2006-12-02 04:36:16 +00:00
< ? php
/*
2012-01-11 14:54:47 +00:00
* e107 website system
*
2013-02-27 17:18:33 +01:00
* Copyright ( C ) 2008 - 2013 e107 Inc ( e107 . org )
2012-01-11 14:54:47 +00:00
* Released under the terms and conditions of the
* GNU General Public License ( http :// www . gnu . org / licenses / gpl . txt )
*
2012-01-11 14:58:35 +00:00
* Plugin administration area
2012-01-11 14:54:47 +00:00
*
*/
2021-01-16 13:32:35 -08:00
require_once ( __DIR__ . '/../class2.php' );
2017-01-17 01:33:03 +01:00
if ( ! getperms ( " Z " ))
2008-12-10 22:39:43 +00:00
{
2016-01-13 19:17:37 -08:00
e107 :: redirect ( 'admin' );
2006-12-02 04:36:16 +00:00
exit ;
}
2009-08-28 16:11:02 +00:00
2012-01-11 14:58:35 +00:00
e107 :: coreLan ( 'plugin' , true );
2009-08-28 16:11:02 +00:00
2006-12-02 04:36:16 +00:00
$e_sub_cat = 'plug_manage' ;
2009-07-07 02:22:57 +00:00
define ( 'PLUGIN_SHOW_REFRESH' , FALSE );
2015-03-30 13:02:51 -07:00
define ( 'PLUGIN_SCAN_INTERVAL' , ! empty ( $_SERVER [ 'E_DEV' ]) ? 0 : 360 );
2017-02-05 15:49:03 -08:00
define ( " ADMIN_GITSYNC_ICON " , e107 :: getParser () -> toGlyph ( 'fa-refresh' , array ( 'size' => '2x' , 'fw' => 1 )));
2016-06-02 19:20:58 -07:00
2009-07-07 02:22:57 +00:00
global $user_pref ;
2017-02-07 14:54:02 -08:00
/*
2017-02-05 15:49:03 -08:00
2017-02-05 19:53:45 -08:00
if ( ! deftrue ( 'e_DEBUG_PLUGMANAGER' ))
2017-02-05 15:49:03 -08:00
{
require_once ( e_HANDLER . 'plugin_class.php' );
require_once ( e_HANDLER . 'file_class.php' );
$plugin = new e107plugin ;
$pman = new pluginManager ;
2017-02-06 08:47:39 -08:00
define ( " e_PAGETITLE " , ADLAN_98 . " - " . $pman -> pagetitle );
2017-02-05 15:49:03 -08:00
}
2017-02-07 14:54:02 -08:00
*/
2017-02-05 15:49:03 -08:00
if ( isset ( $_POST [ 'uninstall_cancel' ]))
{
2020-12-22 14:48:28 -08:00
e107 :: redirect ( e_SELF );
2017-02-05 15:49:03 -08:00
exit ;
}
// Experimental rewrite for v2.1.5 ----------------------
class plugman_adminArea extends e_admin_dispatcher
{
protected $modes = array (
'installed' => array (
'controller' => 'plugin_ui' ,
'path' => null ,
'ui' => 'plugin_form_ui' ,
'uipath' => null
),
'avail' => array (
'controller' => 'plugin_ui' ,
'path' => null ,
'ui' => 'plugin_form_ui' ,
'uipath' => null
),
'online' => array (
'controller' => 'plugin_online_ui' ,
'path' => null ,
2017-12-25 16:20:44 -08:00
'ui' => 'plugin_form_online_ui' ,
2017-02-05 15:49:03 -08:00
'uipath' => null
),
'create' => array (
'controller' => 'plugin_ui' ,
'path' => null ,
'ui' => 'plugin_form_ui' ,
'uipath' => null
),
2017-09-18 13:43:31 -07:00
'lans' => array (
'controller' => 'pluginLanguage' ,
'path' => null ,
'ui' => 'plugin_form_ui' ,
'uipath' => null
),
2017-02-05 15:49:03 -08:00
);
protected $adminMenu = array (
'installed/list' => array ( 'caption' => EPL_ADLAN_22 , 'perm' => 'Z' ),
'avail/list' => array ( 'caption' => EPL_ADLAN_23 , 'perm' => 'Z' ),
2021-02-03 08:10:23 -08:00
'online/grid' => array ( 'caption' => EPL_ADLAN_220 , 'perm' => 'Z' , 'icon' => 'fas-search' ),
2017-02-05 15:49:03 -08:00
'avail/upload' => array ( 'caption' => EPL_ADLAN_38 , 'perm' => '0' ),
2021-02-03 08:10:23 -08:00
'create/build' => array ( 'caption' => EPL_ADLAN_114 , 'perm' => '0' , 'icon' => 'fas-toolbox' ),
2017-02-05 15:49:03 -08:00
// 'main/create' => array('caption'=> LAN_CREATE, 'perm' => 'P'),
// 'main/custom' => array('caption'=> 'Custom Page', 'perm' => 'P')
);
protected $defaultMode = 'installed' ;
protected $adminMenuAliases = array (
2017-09-18 13:43:31 -07:00
'installed/uninstall' => 'installed/list' ,
2021-01-23 14:21:55 -08:00
'lans/list' => 'create/build' ,
'online/list' => 'online/grid' ,
2017-02-05 15:49:03 -08:00
);
protected $adminMenuIcon = 'e-plugmanager-24' ;
function init ()
{
$mode = $this -> getRequest () -> getMode ();
$action = $this -> getRequest () -> getAction ();
if ( $mode === 'online' && $action === 'download' )
{
define ( 'e_IFRAME' , true );
}
2017-12-21 13:40:10 -08:00
if ( deftrue ( 'e_DEVELOPER' ))
{
e107 :: getPlug () -> clearCache ();
}
2017-02-05 15:49:03 -08:00
}
public static function getPluginManagerFields ()
{
return array (
'checkboxes' => array ( 'title' => '' , 'type' => null , 'data' => null , 'width' => '5%' , 'thclass' => 'center' , 'forced' => '1' , 'class' => 'center' , 'toggle' => 'e-multiselect' ,),
'plugin_id' => array ( 'title' => LAN_ID , 'data' => 'int' , 'width' => '5%' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
'plugin_icon' => array ( 'title' => LAN_ICON , 'type' => 'icon' , 'data' => false , " width " => " 5% " , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
'plugin_name' => array ( 'title' => LAN_TITLE , 'type' => 'text' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
'plugin_version' => array ( 'title' => LAN_VERSION , 'type' => 'text' , 'data' => false , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
2021-01-23 14:21:55 -08:00
'plugin_description' => array ( 'title' => LAN_DESCRIPTION , 'type' => 'textarea' , 'data' => false , 'width' => 'auto' , 'help' => '' , 'readParms' => 'expand=1&truncate=180&bb=1' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
2017-02-09 10:31:19 +01:00
'plugin_date' => array ( 'title' => LAN_RELEASED , 'type' => 'text' , 'data' => false , " width " => " 8% " , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
2017-02-05 15:49:03 -08:00
'plugin_category' => array ( 'title' => LAN_CATEGORY , 'type' => 'dropdown' , 'data' => 'str' , 'width' => 'auto' , 'batch' => true , 'filter' => true , 'inline' => true , 'help' => '' , 'readParms' => '' , 'writeParms' => array (), 'class' => 'left' , 'thclass' => 'left' ,),
'plugin_author' => array ( 'title' => LAN_AUTHOR , 'type' => 'text' , 'data' => false , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
" plugin_license " => array ( " title " => " License " , 'nolist' => false , 'data' => false , " type " => " text " , " width " => " 5% " , " thclass " => " left " ),
2017-02-09 10:31:19 +01:00
'plugin_compatible' => array ( 'title' => EPL_ADLAN_13 , 'type' => 'method' , 'data' => false , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'center' , 'thclass' => 'center' ,),
2017-02-05 15:49:03 -08:00
2017-02-09 10:31:19 +01:00
'plugin_path' => array ( 'title' => LAN_PATH , 'type' => 'text' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
'plugin_installflag' => array ( 'title' => EPL_ADLAN_22 , 'type' => 'boolean' , 'data' => 'int' , 'width' => 'auto' , 'filter' => false , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'center' , 'thclass' => 'center' ,),
'plugin_addons' => array ( 'title' => LAN_ADDONS , 'type' => 'method' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' ,),
2017-02-05 15:49:03 -08:00
'options' => array ( 'title' => LAN_OPTIONS , 'type' => 'method' , 'data' => null , 'width' => '10%' , 'thclass' => 'center last' , 'class' => 'center last' , 'forced' => '1' ,),
);
}
protected $menuTitle = ADLAN_98 ;
}
class plugin_ui extends e_admin_ui
{
protected $pluginTitle = ADLAN_98 ;
protected $pluginName = 'core' ;
// protected $eventName = 'plugman-plugin'; // remove comment to enable event triggers in admin.
protected $table = 'plugin' ;
protected $pid = 'plugin_id' ;
protected $perPage = 10 ;
2017-12-18 09:56:10 +01:00
2017-02-05 15:49:03 -08:00
protected $batchDelete = false ;
protected $batchExport = false ;
protected $batchCopy = false ;
2020-12-19 10:52:52 -08:00
protected $batchOptions = array ();
2017-02-05 15:49:03 -08:00
// protected $sortField = 'somefield_order';
// protected $orderStep = 10;
// protected $tabs = array('Tabl 1','Tab 2'); // Use 'tab'=>0 OR 'tab'=>1 in the $fields below to enable.
protected $listQry = " SELECT * FROM `#plugin` WHERE plugin_installflag = 1 AND plugin_category != 'menu' " ; // Example Custom Query. LEFT JOINS allowed. Should be without any Order or Limit.
protected $listOrder = 'plugin_path ASC' ;
protected $fields = array ();
protected $fieldpref = array ( 'plugin_icon' , 'plugin_name' , 'plugin_version' , 'plugin_description' , 'plugin_compatible' , 'plugin_released' , 'plugin_author' , 'plugin_category' , 'plugin_installflag' );
// protected $preftabs = array('General', 'Other' );
protected $prefs = array (
);
// Ideal way to set field data.
public function __construct ( $request , $response , $params = array ())
{
$this -> fields = plugman_adminArea :: getPluginManagerFields ();
$this -> fields [ 'plugin_category' ][ 'writeParms' ][ 'optArray' ] = e107 :: getPlug () -> getCategoryList (); // array('plugin_category_0','plugin_category_1', 'plugin_category_2'); // Example Drop-down array.
2017-02-06 07:35:43 -08:00
unset ( $this -> fields [ 'plugin_category' ][ 'writeParms' ][ 'optArray' ][ 'menu' ]);
unset ( $this -> fields [ 'plugin_category' ][ 'writeParms' ][ 'optArray' ][ 'about' ]);
2020-12-19 10:52:52 -08:00
2017-02-05 15:49:03 -08:00
parent :: __construct ( $request , $response , $params );
2020-12-19 10:52:52 -08:00
if ( $this -> getMode () === 'installed' ) // TODO more batch options install, uninstall etc.
{
$this -> batchOptions = array ( 'repairall' => 'Repair selected' ); // TODO LAN "[x] selected"
}
2017-02-05 15:49:03 -08:00
}
2020-12-19 10:52:52 -08:00
public function handleListRepairallBatch ( $arr )
{
if ( empty ( $arr ))
{
return null ;
}
$arr = e107 :: getParser () -> filter ( $arr , 'int' );
$data = e107 :: getDb () -> retrieve ( 'plugin' , 'plugin_path' , 'plugin_id IN (' . implode ( ',' , $arr ) . ')' , true );
if ( empty ( $data ))
{
return null ;
}
foreach ( $data as $row )
{
$this -> repair ( $row [ 'plugin_path' ]);
}
}
2017-02-05 15:49:03 -08:00
public function init ()
{
2017-02-08 17:37:24 -08:00
if ( ! e_QUERY )
{
e107 :: getPlug () -> clearCache ();
}
2017-02-05 15:49:03 -08:00
if ( $this -> getMode () === 'avail' )
{
$this -> listQry = " SELECT * FROM `#plugin` WHERE plugin_installflag = 0 AND plugin_category != 'menu' " ;
}
// Set drop-down values (if any).
}
// Modify the list data.
public function ListObserver ()
{
parent :: ListObserver ();
$this -> setPlugData ();
}
private function setPlugData ()
{
$tree = $this -> getTreeModel ();
$plg = e107 :: getPlug ();
2019-02-03 11:09:07 -08:00
/**
* @ var $id
* @ var e_model $model
*/
foreach ( $tree -> getTree () as $id => $model )
2017-02-05 15:49:03 -08:00
{
$path = $model -> get ( 'plugin_path' );
$plg -> load ( $path );
$model -> set ( 'plugin_name' , $plg -> getName ());
$model -> set ( 'plugin_date' , $plg -> getDate ());
$model -> set ( 'plugin_author' , $plg -> getAuthor ());
$model -> set ( 'plugin_compatible' , $plg -> getCompat ());
$model -> set ( 'plugin_admin_url' , $plg -> getAdminUrl ());
2017-02-06 08:47:39 -08:00
$model -> set ( 'plugin_admin_caption' , $plg -> getAdminCaption ());
2017-02-05 15:49:03 -08:00
$model -> set ( 'plugin_description' , $plg -> getDescription ());
$model -> set ( 'plugin_version_file' , $plg -> getVersion ());
$model -> set ( 'plugin_install_required' , $plg -> getInstallRequired ());
$model -> set ( 'plugin_icon' , $plg -> getIcon ( 32 , 'path' ));
}
}
public function ListAjaxObserver ()
{
2019-06-03 16:29:38 -07:00
$this -> getTreeModel () -> setParam ( 'db_query' , $this -> _modifyListQry ( false , false , 0 , false , $this -> listQry )) -> loadBatch ();
2017-02-05 15:49:03 -08:00
$this -> setPlugData ();
}
private function pluginProcessUpload ()
{
if ( ! $_POST [ 'ac' ] == md5 ( ADMINPWCHANGE ))
{
exit ;
}
$fl = e107 :: getFile ();
$data = $fl -> getUploaded ( e_TEMP );
$mes = e107 :: getMessage ();
if ( empty ( $data [ 0 ][ 'error' ]))
{
if ( $fl -> unzipArchive ( $data [ 0 ][ 'name' ], 'plugin' ))
{
$mes -> addSuccess ( EPL_ADLAN_43 );
}
else
{
$mes -> addError ( EPL_ADLAN_97 );
}
}
//echo $mes->render();
return true ;
}
2017-02-06 08:47:39 -08:00
function renderHelp ()
{
$plg = e107 :: getPlug ();
2020-12-31 10:24:13 -08:00
$plg -> clearCache ();
2017-02-06 08:47:39 -08:00
if ( ! $list = $plg -> getUpgradableList ())
{
return null ;
}
2017-02-07 14:54:02 -08:00
$text = " <ul class='media-list'> " ;
2017-02-06 08:47:39 -08:00
foreach ( $list as $path => $ver )
{
$plg -> load ( $path );
2020-12-31 10:24:13 -08:00
$name = $plg -> getName ();
2022-01-10 15:23:27 -08:00
$url = e_ADMIN . " plugin.php?mode=installed&action=upgrade&path= " . $path . " &e-token= " . defset ( 'e_TOKEN' );
2017-02-07 14:54:02 -08:00
$text .= " <li class='media'>
< div class = 'media-left' >
< a href = '".$url."' > " . $plg->getIcon (32). " </ a >
2020-12-31 10:24:13 -08:00
</ div >< div class = 'media-body' >< a class = 'e-spinner' href = '".$url."' title = \ " " . EPL_UPGRADE . " " . $name . " v " . $ver . " \" > " . $name . " </a></div></li> " ;
2017-02-06 08:47:39 -08:00
}
$text .= " </ul> " ;
2017-04-28 10:17:56 +02:00
return array ( 'caption' => EPL_ADLAN_247 , 'text' => $text );
2017-02-06 08:47:39 -08:00
}
2017-02-05 15:49:03 -08:00
// Action Pages.
function installPage ()
{
2022-01-01 13:05:17 -08:00
if ( empty ( $this -> getQuery ( 'e-token' )))
{
e107 :: getMessage () -> addError ( " Invalid Token " ); // Debug - no need for translation.
$this -> redirectAction ( 'list' );
}
2019-02-07 15:58:51 -08:00
$id = $this -> getQuery ( 'path' );
2017-02-05 15:49:03 -08:00
$text = e107 :: getPlugin () -> install ( $id );
2020-11-02 10:36:07 -08:00
// $log = e107::getAdminLog();
2017-02-05 15:49:03 -08:00
if ( $text === FALSE )
{
e107 :: getMessage () -> add ( EPL_ADLAN_99 , E_MESSAGE_ERROR );
}
else
{
//$plugin->save_addon_prefs('update');
// $info = $plugin->getinfo($this->id); //FIXME use e107::getPlug();
// $name = deftrue($info['plugin_name'],$info['plugin_name']). " v".$info['plugin_version']. "({e_PLUGIN}".$info['plugin_path'].")";
2020-12-18 09:39:02 -08:00
// $log->add('PLUGMAN_01', $name, E_LOG_INFORMATIVE, '');
2017-02-05 15:49:03 -08:00
2018-07-15 15:35:31 +02:00
// make sure ALL plugin/addon pref lists get update and are current
e107 :: getPlug () -> clearCache () -> buildAddonPrefLists ();
2017-02-05 15:49:03 -08:00
e107 :: getMessage () -> add ( $text , E_MESSAGE_SUCCESS );
}
$this -> redirectAction ( 'list' );
}
function buildPage ()
{
2022-12-12 15:00:30 -08:00
require_once ( e_HANDLER . " e_pluginbuilder_class.php " );
$pc = new e_pluginbuilder ;
2017-02-07 14:54:02 -08:00
$ret = $pc -> run ();
if ( is_array ( $ret ))
{
$this -> addTitle ( $ret [ 'caption' ]);
return $ret [ 'text' ];
}
return $ret ;
2017-02-05 15:49:03 -08:00
}
2017-09-18 13:43:31 -07:00
function lanPage ()
{
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
}
2017-02-05 15:49:03 -08:00
function uninstallPage ()
{
2022-01-01 13:05:17 -08:00
if ( empty ( $this -> getQuery ( 'e-token' )))
{
e107 :: getMessage () -> addError ( " Invalid Token " ); // Debug - no need for translation.
$this -> redirectAction ( 'list' );
}
2019-02-07 15:58:51 -08:00
$id = $this -> getQuery ( 'path' );
2017-02-05 15:49:03 -08:00
if ( empty ( $_POST [ 'uninstall_confirm' ]))
{
$plug_vars = e107 :: getPlug () -> load ( $id ) -> getMeta ();
2019-02-07 15:58:51 -08:00
2017-02-05 15:49:03 -08:00
$name = e107 :: getPlug () -> getName ();
$this -> addTitle ( EPL_ADLAN_63 );
$this -> addTitle ( $name );
return $this -> pluginConfirmUninstall ( $plug_vars );
}
$post = e107 :: getParser () -> filter ( $_POST );
2017-03-02 12:51:03 -08:00
if ( empty ( $_POST [ 'e-token' ]))
{
return false ;
}
2017-02-05 15:49:03 -08:00
// $id = e107::getPlugin
$text = e107 :: getPlugin () -> uninstall ( $id , $post );
2019-02-07 15:58:51 -08:00
2018-07-15 15:35:31 +02:00
// make sure ALL plugin/addon pref lists get update and are current
e107 :: getPlug () -> clearCache () -> buildAddonPrefLists ();
2017-02-05 15:49:03 -08:00
e107 :: getMessage () -> add ( $text , E_MESSAGE_SUCCESS );
$log = e107 :: getPlugin () -> getLog ();
e107 :: getDebug () -> log ( $log );
$this -> redirectAction ( 'list' );
}
function repairPage ()
{
2022-01-01 13:05:17 -08:00
if ( empty ( $this -> getQuery ( 'e-token' )))
{
e107 :: getMessage () -> addError ( " Invalid Token " ); // Debug - no need for translation.
$this -> redirectAction ( 'list' );
return null ;
}
2019-02-07 15:58:51 -08:00
$id = $this -> getQuery ( 'path' );
2017-02-05 15:49:03 -08:00
2020-12-19 10:52:52 -08:00
$this -> repair ( $id );
$this -> redirectAction ( 'list' );
}
private function repair ( $id )
{
2017-04-03 15:55:37 -07:00
if ( ! is_dir ( e_PLUGIN . $id ))
2017-02-05 15:49:03 -08:00
{
2020-12-19 10:52:52 -08:00
e107 :: getMessage () -> addError ( " Plugin { $id } doesn't exist " );
2017-02-05 15:49:03 -08:00
return false ;
}
e107 :: getSingleton ( 'e107plugin' ) -> refresh ( $id );
2022-01-01 13:05:17 -08:00
e107 :: getLog () -> add ( 'PLUGMAN_04' , $id );
2017-02-05 15:49:03 -08:00
2017-04-03 15:55:37 -07:00
e107 :: getMessage () -> addSuccess ( " Repair Complete ( " . $id . " ) " ); // Repair Complete ([x])
2017-02-05 15:49:03 -08:00
}
function pullPage ()
{
2019-02-07 15:58:51 -08:00
$id = $this -> getQuery ( 'path' );
2017-02-05 15:49:03 -08:00
if ( ! e107 :: isInstalled ( $id ))
{
$this -> redirectAction ( 'list' );
}
$return = e107 :: getFile () -> gitPull ( $id , 'plugin' );
e107 :: getMessage () -> addSuccess ( $return );
e107 :: getPlugin () -> refresh ( $id );
$this -> redirectAction ( 'list' );
}
function upgradePage ()
{
2022-01-01 13:05:17 -08:00
if ( empty ( $this -> getQuery ( 'e-token' )))
{
e107 :: getMessage () -> addError ( " Invalid Token " ); // Debug - no need for translation.
$this -> redirectAction ( 'list' );
}
2017-02-07 14:54:02 -08:00
$this -> pluginUpgrade ();
2020-12-31 10:24:13 -08:00
2017-02-05 15:49:03 -08:00
}
function uploadPage ()
{
global $plugin ;
$frm = e107 :: getForm ();
if ( ! empty ( $_POST [ 'upload' ]))
{
$this -> pluginProcessUpload ();
$this -> redirectAction ( 'list' );
}
//TODO 'install' checkbox in plugin upload form. (as it is for theme upload)
/* plugin upload form */
if ( ! is_writable ( e_PLUGIN ))
{
$text = EPL_ADLAN_44 ;
}
else
{
// Get largest allowable file upload
require_once ( e_HANDLER . 'upload_handler.php' );
$max_file_size = get_user_max_upload ();
$text = "
2020-11-02 10:36:07 -08:00
< form enctype = 'multipart/form-data' method = 'post' action = '".e_SELF."?mode=avail&action=upload' >
2017-02-05 15:49:03 -08:00
< table class = 'table adminform' >
< colgroup >
< col class = 'col-label' />
< col class = 'col-control' />
</ colgroup >
< tr >
< td > " .EPL_ADLAN_37. " </ td >
< td >
< input type = 'hidden' name = 'MAX_FILE_SIZE' value = '{$max_file_size}' />
< input type = 'hidden' name = 'ac' value = '".md5(ADMINPWCHANGE)."' />
< input class = 'tbox' type = 'file' name = 'file_userfile[]' size = '50' />
</ td >
</ tr >
</ table >
< div class = 'center buttons-bar' > " ;
$text .= $frm -> admin_button ( 'upload' , EPL_ADLAN_38 , 'submit' , EPL_ADLAN_38 );
$text .= "
</ div >
</ form > \n " ;
}
return $text ;
2020-11-02 10:36:07 -08:00
// e107::getRender()->tablerender(ADLAN_98.SEP.EPL_ADLAN_38, $text);
2017-02-05 15:49:03 -08:00
}
private function pluginUpgrade ()
{
$pref = e107 :: getPref ();
2020-12-22 09:36:02 -08:00
$admin_log = e107 :: getLog ();
2017-02-05 15:49:03 -08:00
$plugin = e107 :: getPlugin ();
$sql = e107 :: getDb ();
$mes = e107 :: getMessage ();
2019-02-07 15:58:51 -08:00
$id = $this -> getQuery ( 'path' );
2017-02-05 15:49:03 -08:00
$plug = e107 :: getPlug () -> load ( $id ) -> getMeta ();
$text = '' ;
$_path = e_PLUGIN . $id . '/' ;
if ( file_exists ( $_path . 'plugin.xml' ))
{
2020-12-31 10:24:13 -08:00
2017-02-05 15:49:03 -08:00
$plugin -> install_plugin_xml ( $id , 'upgrade' );
2019-04-11 12:28:14 -07:00
$text = LAN_UPGRADE_SUCCESSFUL ;
2017-02-05 15:49:03 -08:00
}
else
{
2020-12-31 10:24:13 -08:00
e107 :: getMessage () -> addDebug ( " Running Legacy plugin upgrade. <b> " . $_path . " </b> not found. " ); // NO LAN
2017-02-05 15:49:03 -08:00
$eplug_folder = null ;
$upgrade_alter_tables = null ;
$upgrade_add_prefs = null ;
$upgrade_remove_prefs = null ;
$upgrade_add_array_pref = null ;
$upgrade_remove_array_pref = null ;
$eplug_version = null ;
include ( e_PLUGIN . $plug [ 'plugin_path' ] . '/plugin.php' );
$text = '' ;
$func = $eplug_folder . '_upgrade' ;
if ( function_exists ( $func ))
{
$text .= call_user_func ( $func );
}
if ( is_array ( $upgrade_alter_tables ))
{
$result = $plugin -> manage_tables ( 'upgrade' , $upgrade_alter_tables );
if ( true !== $result )
{
//$text .= EPL_ADLAN_9.'<br />';
$mes -> addWarning ( EPL_ADLAN_9 )
-> addDebug ( $result );
}
else
{
$text .= EPL_ADLAN_7 . " <br /> " ;
}
}
if ( is_array ( $upgrade_add_prefs ))
{
$plugin -> manage_prefs ( 'add' , $upgrade_add_prefs );
$text .= EPL_ADLAN_8 . '<br />' ;
}
if ( is_array ( $upgrade_remove_prefs ))
{
$plugin -> manage_prefs ( 'remove' , $upgrade_remove_prefs );
}
if ( is_array ( $upgrade_add_array_pref ))
{
foreach ( $upgrade_add_array_pref as $key => $val )
{
$plugin -> manage_plugin_prefs ( 'add' , $key , $eplug_folder , $val );
}
}
if ( is_array ( $upgrade_remove_array_pref ))
{
foreach ( $upgrade_remove_array_pref as $key => $val )
{
$plugin -> manage_plugin_prefs ( 'remove' , $key , $eplug_folder , $val );
}
}
$plugin -> manage_search ( 'upgrade' , $eplug_folder );
$plugin -> manage_notify ( 'upgrade' , $eplug_folder );
$eplug_addons = $plugin -> getAddons ( $eplug_folder );
2018-07-22 09:36:23 -07:00
$info = e107plugin :: getPluginRecord ( $this -> id );
2017-02-05 15:49:03 -08:00
$name = deftrue ( $info [ 'plugin_name' ], $info [ 'plugin_name' ]) . " v " . $eplug_version . " ( { e_PLUGIN} " . $info [ 'plugin_path' ] . " ) " ;
2021-03-02 08:33:27 -08:00
e107 :: getLog () -> add ( 'PLUGMAN_02' , $name );
2017-02-05 15:49:03 -08:00
$text .= ( isset ( $eplug_upgrade_done )) ? '<br />' . $eplug_upgrade_done : " <br /> " . LAN_UPGRADE_SUCCESSFUL ;
$sql -> update ( 'plugin' , " plugin_version =' { $eplug_version } ', plugin_addons=' { $eplug_addons } ' WHERE plugin_id=' $this->id ' " );
$pref [ 'plug_installed' ][ $plug [ 'plugin_path' ]] = $eplug_version ; // Update the version
2021-03-02 08:33:27 -08:00
e107 :: getConfig () -> setPref ( $pref );
2017-02-05 15:49:03 -08:00
$plugin -> rebuildUrlConfig ();
2021-03-02 08:33:27 -08:00
e107 :: getConfig () -> save ();
2017-02-05 15:49:03 -08:00
}
$mes -> addSuccess ( $text );
2018-07-15 15:35:31 +02:00
//$plugin->save_addon_prefs('update');
// make sure ALL plugin/addon pref lists get update and are current
e107 :: getPlug () -> clearCache () -> buildAddonPrefLists ();
2017-02-05 15:49:03 -08:00
2019-04-11 12:28:14 -07:00
// clear infopanel in admin dashboard.
e107 :: getCache () -> clear ( 'Infopanel_plugin' , true );
e107 :: getSession () -> clear ( 'addons-update-status' );
e107 :: getSession () -> set ( 'addons-update-checked' , false ); // set to recheck it.
2017-02-05 15:49:03 -08:00
$this -> redirectAction ( 'list' );
}
private function pluginConfirmUninstall ( $plug_vars )
{
global $plugin ;
$frm = e107 :: getForm ();
$tp = e107 :: getParser ();
$mes = e107 :: getMessage ();
$path = $plug_vars [ 'folder' ];
// $plug = $plugin->getinfo($this->id);
if ( ! e107 :: isInstalled ( $path ))
{
return false ;
}
$userclasses = '' ;
$eufields = '' ;
if ( isset ( $plug_vars [ 'userClasses' ]))
{
if ( isset ( $plug_vars [ 'userclass' ][ '@attributes' ]))
{
$plug_vars [ 'userclass' ][ 0 ][ '@attributes' ] = $plug_vars [ 'userclass' ][ '@attributes' ];
unset ( $plug_vars [ 'userclass' ][ '@attributes' ]);
}
$spacer = '' ;
foreach ( $plug_vars [ 'userClasses' ][ 'class' ] as $uc )
{
$userclasses .= $spacer . $uc [ '@attributes' ][ 'name' ] . ' - ' . $uc [ '@attributes' ][ 'description' ];
$spacer = '<br />' ;
}
}
if ( isset ( $plug_vars [ 'extendedFields' ]))
{
if ( isset ( $plug_vars [ 'extendedFields' ][ '@attributes' ]))
{
$plug_vars [ 'extendedField' ][ 0 ][ '@attributes' ] = $plug_vars [ 'extendedField' ][ '@attributes' ];
unset ( $plug_vars [ 'extendedField' ][ '@attributes' ]);
}
$spacer = '' ;
foreach ( $plug_vars [ 'extendedFields' ][ 'field' ] as $eu )
{
$eufields .= $spacer . 'plugin_' . $plug_vars [ 'folder' ] . '_' . $eu [ '@attributes' ][ 'name' ];
$spacer = '<br />' ;
}
}
if ( is_writable ( e_PLUGIN . $path ))
{
$del_text = $frm -> select ( 'delete_files' , 'yesno' , 0 );
}
else
{
$del_text = "
" .EPL_ADLAN_53. "
< input type = 'hidden' name = 'delete_files' value = '0' />
" ;
}
$text = "
< form action = '".e_SELF."?".e_QUERY."' method = 'post' >
< fieldset id = 'core-plugin-confirmUninstall' >
2019-02-26 12:22:36 -08:00
< legend > " .EPL_ADLAN_54. " " . $tp->toHTML ( $plug_vars['@attributes'] ['name'], " " , " defs , emotes_off , no_make_clickable " ). " </ legend >
2017-02-05 15:49:03 -08:00
< table class = 'table adminform' >
< colgroup >
< col class = 'col-label' />
< col class = 'col-control' />
</ colgroup >
< tr >
< td > " .EPL_ADLAN_55. " </ td >
< td > " .LAN_YES. " </ td >
</ tr > " ;
$opts = array ();
$opts [ 'delete_tables' ] = array (
'label' => EPL_ADLAN_57 ,
'helpText' => EPL_ADLAN_58 ,
'itemList' => array ( 1 => LAN_YES , 0 => LAN_NO ),
'itemDefault' => 1
);
if ( $userclasses )
{
$opts [ 'delete_userclasses' ] = array (
'label' => EPL_ADLAN_78 ,
'preview' => $userclasses ,
'helpText' => EPL_ADLAN_79 ,
'itemList' => array ( 1 => LAN_YES , 0 => LAN_NO ),
'itemDefault' => 1
);
}
if ( $eufields )
{
$opts [ 'delete_xfields' ] = array (
'label' => EPL_ADLAN_80 ,
'preview' => $eufields ,
'helpText' => EPL_ADLAN_79 ,
'itemList' => array ( 1 => LAN_YES , 0 => LAN_NO ),
'itemDefault' => 0
);
}
$med = e107 :: getMedia ();
2021-03-02 08:33:27 -08:00
$icons = ( array ) $med -> listIcons ( e_PLUGIN . $path );
2017-02-05 15:49:03 -08:00
$iconText = '' ;
2021-03-02 08:33:27 -08:00
if ( count ( $icons ) > 0 )
2017-02-05 15:49:03 -08:00
{
foreach ( $icons as $key => $val )
{
$iconText .= " <img src=' " . $tp -> replaceConstants ( $val ) . " ' alt='' /> " ;
}
$iconText = '<div class="icon-pool-preview">' . $iconText . '</div>' ;
$opts [ 'delete_ipool' ] = array (
'label' => EPL_ADLAN_231 ,
'preview' => $iconText ,
'helpText' => EPL_ADLAN_79 ,
'itemList' => array ( 1 => LAN_YES , 0 => LAN_NO ),
'itemDefault' => 1
);
}
if ( is_readable ( e_PLUGIN . $path . " / " . $path . " _setup.php " ))
{
include_once ( e_PLUGIN . $path . " / " . $path . " _setup.php " );
$mes -> add ( " Loading " . e_PLUGIN . $path . " / " . $path . " _setup.php " , E_MESSAGE_DEBUG );
$class_name = $path . " _setup " ;
if ( class_exists ( $class_name ))
{
$obj = new $class_name ;
if ( method_exists ( $obj , 'uninstall_options' ))
{
$arr = call_user_func ( array ( $obj , 'uninstall_options' ), $this );
foreach ( $arr as $key => $val )
{
$newkey = $path . " _ " . $key ;
$opts [ $newkey ] = $val ;
}
}
}
}
foreach ( $opts as $key => $val )
{
$text .= " <tr> \n <td class='top'> " . $tp -> toHTML ( $val [ 'label' ], FALSE , 'TITLE' );
$text .= varset ( $val [ 'preview' ]) ? " <div class='indent'> " . $val [ 'preview' ] . " </div> " : " " ;
2021-02-12 12:19:58 -08:00
$text .= varset ( $val [ 'helpText' ]) ? " " . $frm -> help ( $val [ 'helpText' ]) . " " : " " ;
2017-02-05 15:49:03 -08:00
$text .= " </td> \n <td> " . $frm -> select ( $key , $val [ 'itemList' ], $val [ 'itemDefault' ]);
2021-02-12 12:19:58 -08:00
2017-02-05 15:49:03 -08:00
$text .= " </td> \n </tr> \n " ;
}
$text .= " <tr>
< td > " .EPL_ADLAN_59. " </ td >
< td > { $del_text }
< div class = 'field-help' > " .EPL_ADLAN_60. " </ div >
</ td >
</ tr >
</ table >
< div class = 'buttons-bar center' > " ;
$text .= $frm -> admin_button ( 'uninstall_confirm' , EPL_ADLAN_3 , 'submit' );
$text .= $frm -> admin_button ( 'uninstall_cancel' , EPL_ADLAN_62 , 'cancel' );
/*
$text .= " <input class='btn' type='submit' name='uninstall_confirm' value= \" " . EPL_ADLAN_3 . " \" />
< input class = 'btn' type = 'submit' name = 'uninstall_cancel' value = '".EPL_ADLAN_62."' onclick = \ " location.href=' " . e_SELF . " '; return false; \" /> " ;
*/
// $frm->admin_button($name, $value, $action = 'submit', $label = '', $options = array());
2017-03-02 12:51:03 -08:00
2022-01-10 15:23:27 -08:00
$text .= " <input type='hidden' name='e-token' value=' " . defset ( 'e_TOKEN' ) . " ' /></div>
2017-02-05 15:49:03 -08:00
</ fieldset >
</ form >
" ;
return $text ;
2019-02-26 12:22:36 -08:00
// e107::getRender()->tablerender(EPL_ADLAN_63.SEP.$tp->toHTML($plug_vars['@attributes']['name'], "", "defs,emotes_off, no_make_clickable"),$mes->render(). $text);
2017-02-05 15:49:03 -08:00
}
/*
// optional - a custom page.
public function customPage ()
{
$text = 'Hello World!' ;
$otherField = $this -> getController () -> getFieldVar ( 'other_field_name' );
return $text ;
}
*/
}
class plugin_form_ui extends e_admin_form_ui
{
// Custom Method/Function
function plugin_compatible ( $curVal , $mode )
{
$frm = e107 :: getForm ();
switch ( $mode )
{
case 'read' : // List Page
if ( intval ( $curVal ) > 1 )
{
return " <span class='label label-warning'> " . $curVal . " </span> " ;
}
return $curVal ;
break ;
case 'write' : // Edit Page
return $frm -> text ( 'plugin_name' , $curVal , 255 , 'size=large' );
break ;
case 'filter' :
case 'batch' :
return array ();
break ;
}
}
// Custom Method/Function
function plugin_addons ( $curVal , $mode )
{
$frm = e107 :: getForm ();
switch ( $mode )
{
case 'read' : // List Page
return $curVal ;
break ;
case 'write' : // Edit Page
return $frm -> text ( 'plugin_addons' , $curVal , 255 , 'size=large' );
break ;
case 'filter' :
case 'batch' :
return array ();
break ;
}
}
function options ( $val , $curVal )
{
$tp = e107 :: getParser ();
$var = $this -> getController () -> getListModel () -> getData ();
$mode = $this -> getController () -> getMode ();
// e107::getDebug()->log($var);
$_path = e_PLUGIN . $var [ 'plugin_path' ] . '/' ;
if ( $var [ 'plugin_admin_url' ] && $var [ 'plugin_installflag' ] == true )
{
2017-02-06 08:47:39 -08:00
$conf_title = ! empty ( $var [ 'plugin_admin_caption' ]) ? $var [ 'plugin_admin_caption' ] : LAN_CONFIGURE . ' ' . $tp -> toHTML ( $var [ 'plugin_name' ], " " , " defs,emotes_off, no_make_clickable " );
2017-02-05 15:49:03 -08:00
$plugin_config_icon = " <a class='btn btn-default' title=' { $conf_title } ' href=' " . $var [ 'plugin_admin_url' ] . " ' > " . ADMIN_CONFIGURE_ICON . " </a> " ;
}
$text = " <div class='btn-group'> " ;
$text .= vartrue ( $plugin_config_icon );
if ( $var [ 'plugin_install_required' ] == true )
{
2022-01-01 13:05:17 -08:00
if ( ! empty ( $var [ 'plugin_installflag' ]))
2017-02-05 15:49:03 -08:00
{
2022-01-10 15:23:27 -08:00
$text .= " <a class='btn btn-default' href= \" " . e_SELF . " ?mode= " . $mode . " &action=uninstall&path= " . $var [ 'plugin_path' ] . " &e-token= " . defset ( 'e_TOKEN' ) . " \" title=' " . EPL_ADLAN_1 . " ' > " . ADMIN_UNINSTALLPLUGIN_ICON . " </a> " ;
2017-02-05 15:49:03 -08:00
}
else
{
2022-01-10 15:23:27 -08:00
$text .= " <a class='btn btn-default' href= \" " . e_SELF . " ?mode=installed&action=install&path= " . $var [ 'plugin_path' ] . " &e-token= " . defset ( 'e_TOKEN' ) . " \" title=' " . EPL_ADLAN_0 . " ' > " . ADMIN_INSTALLPLUGIN_ICON . " </a> " ;
2017-02-05 15:49:03 -08:00
}
}
2020-12-18 19:55:12 -08:00
// else
// {
/* if ( $var [ 'menuName' ])
2017-02-05 15:49:03 -08:00
{
// $text .= EPL_NOINSTALL . str_replace("..", "", e_PLUGIN . $var['plugin_path']) . "/ " . EPL_DIRECTORY;
}
else
{
// $text .= EPL_NOINSTALL_1 . str_replace("..", "", e_PLUGIN . $var['plugin_path']) . "/ " . EPL_DIRECTORY;
if ( $var [ 'plugin_installflag' ] == false )
{
// e107::getDb()->delete('plugin', "plugin_installflag=0 AND (plugin_path='{$var['plugin_path']}' OR plugin_path='{$var['plugin_path']}/' ) ");
}
2020-12-18 19:55:12 -08:00
} */
// }
2017-02-05 15:49:03 -08:00
if ( $var [ 'plugin_version' ] != $var [ 'plugin_version_file' ] && $var [ 'plugin_installflag' ])
{
2022-01-10 15:23:27 -08:00
$text .= " <a class='btn btn-default' href=' " . e_SELF . " ?mode= " . $mode . " &action=upgrade&path= " . $var [ 'plugin_path' ] . " &e-token= " . defset ( 'e_TOKEN' ) . " ' title= \" " . EPL_UPGRADE . " v " . $var [ 'plugin_version_file' ] . " \" > " . ADMIN_UPGRADEPLUGIN_ICON . " </a> " ;
2017-02-05 15:49:03 -08:00
}
2020-12-19 10:52:52 -08:00
if ( $var [ 'plugin_installflag' ])
2017-02-05 15:49:03 -08:00
{
2022-01-10 15:23:27 -08:00
$text .= " <a class='btn btn-default' href=' " . e_SELF . " ?mode= " . $mode . " &action=repair&path= " . $var [ 'plugin_path' ] . " &e-token= " . defset ( 'e_TOKEN' ) . " ' title=' " . LAN_REPAIR_PLUGIN_SETTINGS . " '> " . ADMIN_REPAIRPLUGIN_ICON . " </a> " ;
2017-02-05 15:49:03 -08:00
}
if ( $var [ 'plugin_installflag' ] && is_dir ( $_path . " .git " ))
{
2022-01-10 15:23:27 -08:00
$text .= " <a class='plugin-manager btn btn-default' href=' " . e_SELF . " ?mode= " . $mode . " &action=pull&path= " . $var [ 'plugin_path' ] . " &e-token= " . defset ( 'e_TOKEN' ) . " ' title=' " . LAN_SYNC_WITH_GIT_REPO . " '> " . ADMIN_GITSYNC_ICON . " </a> " ;
2017-02-05 15:49:03 -08:00
}
$text .= " </div> " ;
return $text ;
}
}
class plugin_online_ui extends e_admin_ui
{
protected $pluginTitle = ADLAN_98 ;
protected $pluginName = 'core' ;
// protected $eventName = 'plugman-plugin'; // remove comment to enable event triggers in admin.
protected $table = false ;
2021-01-23 14:21:55 -08:00
protected $pid = 'plugin_id' ;
2017-02-05 15:49:03 -08:00
protected $perPage = 10 ;
protected $batchDelete = true ;
protected $batchExport = true ;
protected $batchCopy = true ;
2021-01-23 14:21:55 -08:00
protected $grid = array ();
2017-02-05 15:49:03 -08:00
// protected $sortField = 'somefield_order';
// protected $orderStep = 10;
// protected $tabs = array('Tabl 1','Tab 2'); // Use 'tab'=>0 OR 'tab'=>1 in the $fields below to enable.
// protected $listQry = "SELECT * FROM `#tableName` WHERE field != '' "; // Example Custom Query. LEFT JOINS allowed. Should be without any Order or Limit.
protected $listOrder = '' ;
protected $fields = array ();
2021-01-23 14:21:55 -08:00
protected $fieldpref = array ( 'plugin_icon' , 'plugin_name' , 'plugin_version' , 'plugin_description' , 'plugin_license' , 'plugin_compatible' , 'plugin_date' , 'plugin_author' , 'plugin_category' , 'plugin_installflag' );
2017-02-05 15:49:03 -08:00
// protected $preftabs = array('General', 'Other' );
protected $prefs = array (
);
2021-01-23 14:21:55 -08:00
/** @var e_marketplace */
2017-02-05 15:49:03 -08:00
protected $mp = null ;
public function __construct ( $request , $response , $params = array ())
{
$this -> fields = plugman_adminArea :: getPluginManagerFields ();
2021-01-23 14:21:55 -08:00
unset ( $this -> fields [ 'checkboxes' ]);
2017-02-05 15:49:03 -08:00
$this -> fields [ 'plugin_category' ][ 'writeParms' ][ 'optArray' ] = e107 :: getPlug () -> getCategoryList (); // array('plugin_category_0','plugin_category_1', 'plugin_category_2'); // Example Drop-down array.
$this -> fields [ " plugin_license " ][ 'nolist' ] = false ;
2017-04-03 15:24:09 -07:00
$this -> fields [ 'plugin_category' ][ 'inline' ] = false ;
2021-01-23 14:21:55 -08:00
2017-02-05 15:49:03 -08:00
parent :: __construct ( $request , $response , $params );
}
public function init ()
{
require_once ( e_HANDLER . 'e_marketplace.php' );
}
function pluginCheck ( $force = false )
{
if ( ! PLUGIN_SCAN_INTERVAL )
{
2017-02-12 10:07:13 -08:00
e107 :: getPlugin () -> update_plugins_table ( 'update' );
2017-02-05 15:49:03 -08:00
return ;
}
if (( time () > vartrue ( $_SESSION [ 'nextPluginFolderScan' ], 0 )) || $force == true )
{
2017-02-12 10:07:13 -08:00
e107 :: getPlugin () -> update_plugins_table ( 'update' );
2017-02-05 15:49:03 -08:00
}
$_SESSION [ 'nextPluginFolderScan' ] = time () + PLUGIN_SCAN_INTERVAL ;
//echo "TIME = ".$_SESSION['nextPluginFolderScan'];
}
// Modal Download.
public function downloadPage ()
{
2022-01-01 13:05:17 -08:00
if ( empty ( $_GET [ 'e-token' ]))
{
echo e107 :: getMessage () -> addError ( " Invalid Token " ) -> render ( 'default' , 'error' );
return null ;
}
2017-02-05 15:49:03 -08:00
$frm = e107 :: getForm ();
$mes = e107 :: getMessage ();
$tp = e107 :: getParser ();
$string = base64_decode ( $_GET [ 'src' ]);
parse_str ( $string , $data );
if ( deftrue ( 'e_DEBUG_MARKETPLACE' ))
{
echo " <b>DEBUG MODE ACTIVE (no downloading)</b><br /> " ;
echo '$_GET[src]: ' ;
print_a ( $_GET );
echo 'base64 decoded and parsed as $data:' ;
print_a ( $data );
return false ;
}
2012-07-29 02:36:18 +00:00
2017-02-05 15:49:03 -08:00
$pluginFolder = ! empty ( $data [ 'plugin_folder' ]) ? $tp -> filter ( $data [ 'plugin_folder' ]) : '' ;
$pluginUrl = ! empty ( $data [ 'plugin_url' ]) ? $tp -> filter ( $data [ 'plugin_url' ]) : '' ;
$pluginID = ! empty ( $data [ 'plugin_id' ]) ? $tp -> filter ( $data [ 'plugin_id' ]) : '' ;
$pluginMode = ! empty ( $data [ 'plugin_mode' ]) ? $tp -> filter ( $data [ 'plugin_mode' ]) : '' ;
2009-07-07 02:22:57 +00:00
2017-02-05 15:49:03 -08:00
if ( ! empty ( $data [ 'plugin_price' ]))
{
e107 :: getRedirect () -> go ( $pluginUrl );
return true ;
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
$mp = $this -> getMarketplace ();
// $mp->generateAuthKey($e107SiteUsername, $e107SiteUserpass);
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
// Server flush useless. It's ajax ready state 4, we can't flush (sadly) before that (at least not for all browsers)
$mes -> addSuccess ( EPL_ADLAN_94 );
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
if ( $mp -> download ( $pluginID , $pluginMode , 'plugin' ))
{
$this -> pluginCheck ( true ); // rescan the plugin directory
$text = e107 :: getPlugin () -> install ( $pluginFolder );
2017-02-04 15:52:26 -08:00
2017-04-16 09:22:15 -07:00
2017-02-05 15:49:03 -08:00
$mes -> addInfo ( $text );
2017-04-16 09:22:15 -07:00
$upgradable = e107 :: getPlug () -> getUpgradableList ();
if ( ! empty ( $upgradable [ $pluginFolder ]))
{
2022-01-10 15:23:27 -08:00
$mes -> addSuccess ( " <a target='_top' href=' " . e_ADMIN . " plugin.php?mode=installed&action=upgrade&id= " . $pluginFolder . " &e-token= " . defset ( 'e_TOKEN' ) . " ' class='btn btn-primary'> " . LAN_UPDATE . " </a> " );
2017-04-16 09:22:15 -07:00
}
2017-02-05 15:49:03 -08:00
echo $mes -> render ( 'default' , 'success' );
}
else
{
// Unable to continue
echo $mes -> addError ( EPL_ADLAN_95 ) -> render ( 'default' , 'error' );
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
echo $mes -> render ( 'default' , 'debug' );
return null ;
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
public function ListObserver ()
{
2021-01-23 14:21:55 -08:00
$this -> setupGridData ();
$this -> setPlugData ();
parent :: ListObserver ();
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
}
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
public function ListAjaxObserver ()
{
parent :: ListAjaxObserver ();
$this -> setPlugData ();
}
public function GridAjaxObserver ()
{
$this -> setupGridData ();
$this -> setPlugData ();
parent :: GridAjaxObserver ();
}
public function GridObserver ()
{
$this -> setupGridData ();
$this -> setPlugData ();
parent :: GridObserver ();
}
private function setupGridData ()
{
$this -> fields [ 'plugin_description' ][ 'readParms' ] = 'expand=0&truncate=1800&bb=1' ;
$this -> fields [ 'plugin_license' ][ 'class' ] = 'right' ;
$this -> grid = array (
'price' => 'plugin_license' ,
'title' => 'plugin_name' ,
'image' => 'plugin_icon' ,
'date' => 'plugin_date' ,
'body' => 'plugin_description' ,
'version' => 'plugin_version' ,
'class' => 'col-md-6 col-lg-4' ,
'author' => 'plugin_author' ,
'perPage' => 6 ,
'carousel' => true
);
$this -> grid [ 'template' ] = '
< div class = " panel panel-primary " style = " height:190px " >
< table class = " table " style = " height:180px;display:block " >
< tr >
< td style = " width:25% " >
< div class = " text-center " style = " height:90px; " > { IMAGE }
</ div >
</ td >
< td >< h4 > { TITLE } < small > v { VERSION } { PRICE } </ small ></ h4 >
< div style = " height:100px; overflow:hidden " > { BODY } </ div >
< div >< small class = " text-muted " >< i class = " fa fa-user " ></ i > { AUTHOR } < i > { DATE } </ i ></ small > < span class = " pull-right " >& nbsp ; { OPTIONS } </ span ></ div >
</ td ></ tr >
</ table >
</ div > ' ;
$this -> perPage = 180 ;
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
/**
* @ return e_marketplace | null
*/
public function getMarketplace ()
{
if ( null === $this -> mp )
{
$this -> mp = new e_marketplace (); // autodetect the best method
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
return $this -> mp ;
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
private function compatibilityLabel ( $val = '' )
{
$badge = ( vartrue ( $val ) > 1.9 ) ? " <span class='label label-warning'> " . EPL_ADLAN_88 . " </span> " : '1.x' ;
return $badge ;
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
function options ( $data )
{
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
/*
if ( ! e107 :: getFile () -> hasAuthKey ())
{
// return "<a href='".e_SELF."' class='btn btn-primary e-modal' >Download and Install</a>";
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
}
*/
2017-02-12 10:20:40 -08:00
if ( $data [ 'plugin_installflag' ])
{
return null ;
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
//$url = e_SELF."?src=".base64_encode($d);
// $url = e_SELF.'?action=download&src='.base64_encode($d);//$url.'&action=download';
$id = 'plug_' . $data [ 'plugin_id' ];
//<button type='button' data-target='{$id}' data-loading='".e_IMAGE."/generic/loading_32.gif' class='btn btn-primary e-ajax middle' value='Download and Install' data-src='".$url."' ><span>Download and Install</span></button>
$modalCaption = ( ! empty ( $data [ 'plugin_price' ])) ? EPL_ADLAN_92 . " " . $data [ 'plugin_name' ] . " " . $data [ 'plugin_version' ] : EPL_ADLAN_230 . " " . $data [ 'plugin_name' ] . " " . $data [ 'plugin_version' ];
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
$srcData = array (
'plugin_id' => $data [ 'plugin_id' ],
'plugin_folder' => $data [ 'plugin_folder' ],
'plugin_price' => $data [ 'plugin_price' ],
'plugin_mode' => $data [ 'plugin_mode' ],
'plugin_url' => $data [ 'plugin_url' ],
);
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
$url = $this -> getMarketplace () -> getDownloadModal ( 'plugin' , $srcData );
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
// $d = http_build_query($srcData,false,'&');
// $url = e_SELF.'?mode=download&src='.base64_encode($d);
2018-01-10 15:11:12 -08:00
$dicon = '<a title="' . EPL_ADLAN_237 . '" class="e-modal btn btn-default btn-secondary" href="' . $url . '" rel="external" data-loading="' . e_IMAGE . '/generic/loading_32.gif" data-cache="false" data-modal-caption="' . $modalCaption . '" target="_blank" >' . ADMIN_INSTALLPLUGIN_ICON . '</a>' ;
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
/*
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
// DEBUGGER .
$base64 = base64_encode ( $d );
$tmp = base64_decode ( $base64 );
parse_str ( $tmp , $data );
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
// XXX Suhosin has a 512 char limit for $_GET strings.
e107 :: getDebug () -> log ( $data [ 'plugin_name' ] . ' : ' . strlen ( $base64 ) . " <br /> " . print_a ( $data , true )); //FIXME - enable when needed to debug.
*/
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
// Temporary Pop-up version.
// $dicon = '<a class="e-modal" href="'.$data['plugin_url'].'" rel="external" data-modal-caption="'.$data['plugin_name']." ".$data['plugin_version'].'" target="_blank" ><img class="top" src="'.e_IMAGE_ABS.'icons/download_32.png" alt="" /></a>';
2017-02-04 15:52:26 -08:00
2021-01-26 15:08:58 -08:00
// $dicon = "<a data-toggle='modal' data-bs-toggle='modal' data-modal-caption=\"Downloading ".$data['plugin_name']." ".$data['plugin_version']."\" href='{$url}' data-cache='false' data-target='#uiModal' title='".$LAN_DOWNLOAD."' ><img class='top' src='".e_IMAGE_ABS."icons/download_32.png' alt='' /></a> ";
2017-02-04 15:52:26 -08:00
2017-02-12 10:20:40 -08:00
return " <div id=' { $id } ' class='center' >
2017-02-05 15:49:03 -08:00
{ $dicon }
</ div > " ;
}
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
private function truncateSentence ( $string , $limit = 120 )
{
if ( strlen ( $string ) <= $limit )
{
$text = nl2br ( $string );
return $string ;
}
$tmp = explode ( " . " , $string );
$chars = 0 ;
$arr = array ();
foreach ( $tmp as $line )
2017-02-05 15:49:03 -08:00
{
2021-01-23 14:21:55 -08:00
$line = str_replace ( " \n " , '' , trim ( $line ));
$len = strlen ( $line );
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
if ( $chars >= $limit )
{
break ;
}
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
$arr [] = $line ;
$chars += $len ;
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
}
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
$text = implode ( '. ' , $arr ) . '.' ;
$text = nl2br ( $text );
return $text ;
}
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
private function setPlugData ()
{
$from = $this -> getQuery ( 'from' , 0 );
$srch = $this -> getQuery ( 'searchquery' );
// $srch = preg_replace('/[^\w]/','', vartrue($_GET['srch']));
$mp = $this -> getMarketplace ();
$cat = '' ;
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
if ( $filter = $this -> getQuery ( 'filter_options' ))
{
list ( $bla , $cat ) = explode ( " __ " , $filter );
2017-02-04 15:52:26 -08:00
}
2021-01-23 14:21:55 -08:00
// do the request, retrieve and parse data
$xdata = $mp -> call ( 'getList' , array (
'type' => 'plugin' ,
'params' => array ( 'limit' => $this -> perPage , 'search' => $srch , 'from' => $from , 'cat' => $cat )
));
$total = ( int ) $xdata [ 'params' ][ 'count' ];
// e107::getDebug()->log($xdata);
$tree = $this -> getTreeModel ();
$tree -> setTotal ( $total );
$tp = e107 :: getParser ();
foreach ( $xdata [ 'data' ] as $id => $row )
2017-02-05 15:49:03 -08:00
{
2021-01-23 14:21:55 -08:00
$v [ 'id' ] = $id ;
$model = new e_model ( $v );
$tree -> setNode ( $id , $model );
2021-03-02 08:33:27 -08:00
$badge = $this -> compatibilityLabel ( $row [ 'compatibility' ]);
2021-01-23 14:21:55 -08:00
$featured = ( $row [ 'featured' ] == 1 ) ? " <span class='label label-info'> " . EPL_ADLAN_91 . " </span> " : '' ;
$price = ( ! empty ( $row [ 'price' ])) ? " <span class='label label-primary'> " . $row [ 'price' ] . " " . $row [ 'currency' ] . " </span> " : " <span class='label label-success'> " . EPL_ADLAN_93 . " </span> " ;
$node = array (
'plugin_id' => $row [ 'params' ][ 'id' ],
'plugin_mode' => $row [ 'params' ][ 'mode' ],
'plugin_icon' => vartrue ( $row [ 'icon' ], e_IMAGE . " logo_template.png " ),
'plugin_name' => stripslashes ( $row [ 'name' ]),
'plugin_description' => $this -> truncateSentence ( vartrue ( $row [ 'description' ])),
'plugin_featured' => $featured ,
'plugin_sef' => '' ,
'plugin_folder' => $row [ 'folder' ],
'plugin_path' => $row [ 'folder' ],
'plugin_date' => $tp -> toDate ( strtotime ( $row [ 'date' ]), 'relative' ),
'plugin_category' => vartrue ( $row [ 'category' ], 'n/a' ),
'plugin_author' => vartrue ( $row [ 'author' ]),
'plugin_version' => $row [ 'version' ],
'plugin_compatible' => $row [ 'compatibility' ], // $badge,
'plugin_website' => vartrue ( $row [ 'authorUrl' ]),
'plugin_url' => $row [ 'urlView' ],
'plugin_notes' => '' ,
'plugin_price' => $row [ 'price' ],
'plugin_license' => $price ,
'plugin_installflag' => e107 :: isInstalled ( $row [ 'folder' ]),
'options' => $row ,
);
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
$model -> setData ( $node );
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
}
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
}
public function listoldPage ()
{
// e107SiteUsername
global $plugin ;
$tp = e107 :: getParser ();
$frm = $this -> getUI ();
$caption = EPL_ADLAN_89 ;
$e107 = e107 :: getInstance ();
$xml = e107 :: getXml ();
$mes = e107 :: getMessage ();
2017-02-04 15:52:26 -08:00
2017-02-05 15:49:03 -08:00
// $mes->addWarning("Some older plugins may produce unpredictable results.");
2021-01-23 14:21:55 -08:00
// check for cURL
if ( ! function_exists ( 'curl_init' ))
{
$mes -> addWarning ( EPL_ADLAN_90 );
}
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
//TODO use admin_ui including filter capabilities by sending search queries back to the xml script.
$from = isset ( $_GET [ 'frm' ]) ? intval ( $_GET [ 'frm' ]) : 0 ;
$srch = preg_replace ( '/[^\w]/' , '' , vartrue ( $_GET [ 'srch' ]));
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
$mp = $this -> getMarketplace ();
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
// auth
// $mp->generateAuthKey($e107SiteUsername, $e107SiteUserpass);
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
// do the request, retrieve and parse data
$xdata = $mp -> call ( 'getList' , array (
'type' => 'plugin' ,
'params' => array ( 'limit' => $this -> perPage , 'search' => $srch , 'from' => $from )
));
$total = $xdata [ 'params' ][ 'count' ];
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
// OLD BIT OF CODE ------------------------------->
2017-02-05 15:49:03 -08:00
/*
// $file = SITEURLBASE.e_PLUGIN_ABS."release/release.php"; // temporary testing
$file = " http://e107.org/feed?type=plugin&frm= " . $from . " &srch= " . $srch . " &limit=10 " ;
$xml -> setOptArrayTags ( 'plugin' ); // make sure 'plugin' tag always returns an array
$xdata = $xml -> loadXMLfile ( $file , 'advanced' );
$total = $xdata [ '@attributes' ][ 'total' ];
echo 'file=' . $file ;
// print_a($xdata);
$xdata [ 'data' ] = $xdata [ 'plugin' ];
*/
2021-01-23 14:21:55 -08:00
// OLD BIT OF CODE END ------------------------------->
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
// print_a($xdata);
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
$c = 1 ;
foreach ( $xdata [ 'data' ] as $row )
{
//$row = $r['@attributes'];
// print_a($row);
2021-03-02 08:33:27 -08:00
$badge = $this -> compatibilityLabel ( $row [ 'compatibility' ]);
2021-01-23 14:21:55 -08:00
$featured = ( $row [ 'featured' ] == 1 ) ? " <span class='label label-info'> " . EPL_ADLAN_91 . " </span> " : '' ;
$price = ( ! empty ( $row [ 'price' ])) ? " <span class='label label-primary'> " . $row [ 'price' ] . " " . $row [ 'currency' ] . " </span> " : " <span class='label label-success'> " . EPL_ADLAN_93 . " </span> " ;
$data [] = array (
'plugin_id' => $row [ 'params' ][ 'id' ],
'plugin_mode' => $row [ 'params' ][ 'mode' ],
'plugin_icon' => vartrue ( $row [ 'icon' ], 'e-plugins-32' ),
'plugin_name' => stripslashes ( $row [ 'name' ]),
'plugin_featured' => $featured ,
'plugin_sef' => '' ,
'plugin_folder' => $row [ 'folder' ],
'plugin_path' => $row [ 'folder' ],
'plugin_date' => vartrue ( $row [ 'date' ]),
'plugin_category' => vartrue ( $row [ 'category' ], 'n/a' ),
'plugin_author' => vartrue ( $row [ 'author' ]),
'plugin_version' => $row [ 'version' ],
'plugin_description' => nl2br ( vartrue ( $row [ 'description' ])),
'plugin_compatible' => $badge ,
'plugin_website' => vartrue ( $row [ 'authorUrl' ]),
'plugin_url' => $row [ 'urlView' ],
'plugin_notes' => '' ,
'plugin_price' => $row [ 'price' ],
'plugin_license' => $price ,
'plugin_installflag' => e107 :: isInstalled ( $row [ 'folder' ])
);
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
$c ++ ;
}
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
$fieldList = $this -> fields ;
unset ( $fieldList [ 'checkboxes' ]);
$text = "
< form class = 'form-search form-inline' action = '" . e_SELF . "?" . e_QUERY . "' id = 'core-plugin-list-form' method = 'get' >
< div id = 'admin-ui-list-filter' class = 'e-search ' > " . $frm->search ('srch', $srch , 'go') . $frm->hidden ('mode', 'online') . "
2017-02-05 15:49:03 -08:00
</ div >
</ form >
2021-01-23 14:21:55 -08:00
< form action = '" . e_SELF . "?" . e_QUERY . "' id = 'core-plugin-list-form' method = 'post' >
2017-02-05 15:49:03 -08:00
< fieldset class = 'e-filter' id = 'core-plugin-list' >
2021-01-23 14:21:55 -08:00
< legend class = 'e-hideme' > " . $caption . " </ legend >
2017-02-05 15:49:03 -08:00
< table id = core - plugin - list ' class=' table adminlist table - striped ' >
2021-01-23 14:21:55 -08:00
" . $frm->colGroup ( $fieldList , $this->fieldpref ) .
$frm -> thead ( $fieldList , $this -> fieldpref ) . "
2017-02-05 15:49:03 -08:00
< tbody >
" ;
2021-01-23 14:21:55 -08:00
foreach ( $data as $key => $val )
{
2017-02-05 15:49:03 -08:00
// print_a($val);
2021-01-23 14:21:55 -08:00
$text .= " <tr> " ;
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
foreach ( $this -> fields as $v => $foo )
{
if ( ! in_array ( $v , $this -> fieldpref ) || $v == 'checkboxes' || $v === 'options' )
2017-02-05 15:49:03 -08:00
{
2021-01-23 14:21:55 -08:00
continue ;
2017-02-05 15:49:03 -08:00
}
2021-01-23 14:21:55 -08:00
$_value = $val [ $v ];
if ( $v == 'plugin_name' )
{
$_value .= $val [ 'plugin_featured' ];
}
// echo '<br />v='.$v;
$text .= " <td style='height: 40px' class=' " . vartrue ( $this -> fields [ $v ][ 'class' ], 'left' ) . " '> " . $frm -> renderValue ( $v , $_value , $this -> fields [ $v ], $key ) . " </td> \n " ;
2017-02-05 15:49:03 -08:00
}
2021-01-23 14:21:55 -08:00
$text .= " <td class='center'> " . $this -> options ( $val ) . " </td> " ;
$text .= " </tr> " ;
}
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
$text .= "
2017-02-05 15:49:03 -08:00
</ tbody >
</ table > " ;
2021-01-23 14:21:55 -08:00
$text .= "
2017-02-05 15:49:03 -08:00
</ fieldset >
</ form >
" ;
2017-02-04 15:52:26 -08:00
2021-01-23 14:21:55 -08:00
if ( $total > $this -> perPage )
{
$parms = $total . " , " . $this -> perPage . " , " . $from . " , " . e_SELF . '?mode=online&action=list&frm=[FROM]' ;
2017-02-05 15:49:03 -08:00
2021-01-23 14:21:55 -08:00
if ( ! empty ( $srch ))
{
$parms .= '&srch=' . $srch ;
2017-02-05 15:49:03 -08:00
}
2021-03-02 08:33:27 -08:00
$text .= " <div class='control-group form-inline input-inline' style='text-align:center;margin-top:10px'> " . $tp -> parseTemplate ( " { NEXTPREV= $parms } " ) . " </div> " ;
2017-02-05 15:49:03 -08:00
}
2021-01-23 14:21:55 -08:00
return $text ;
}
2017-02-04 15:52:26 -08:00
// ------- Customize Create --------
public function beforeCreate ( $new_data , $old_data )
{
return $new_data ;
}
public function afterCreate ( $new_data , $old_data , $id )
{
// do something
}
public function onCreateError ( $new_data , $old_data )
{
// do something
}
// ------- Customize Update --------
public function beforeUpdate ( $new_data , $old_data , $id )
{
return $new_data ;
}
public function afterUpdate ( $new_data , $old_data , $id )
{
// do something
}
public function onUpdateError ( $new_data , $old_data , $id )
{
// do something
}
/*
// optional - a custom page.
public function customPage ()
{
$text = 'Hello World!' ;
$otherField = $this -> getController () -> getFieldVar ( 'other_field_name' );
return $text ;
}
*/
}
2017-02-05 15:49:03 -08:00
class plugin_form_online_ui extends e_admin_form_ui
2017-02-04 15:52:26 -08:00
{
// Custom Method/Function
function plugin_name ( $curVal , $mode )
{
$frm = e107 :: getForm ();
switch ( $mode )
{
case 'read' : // List Page
return $curVal ;
break ;
case 'write' : // Edit Page
return $frm -> text ( 'plugin_name' , $curVal , 255 , 'size=large' );
break ;
case 'filter' :
case 'batch' :
return array ();
break ;
}
}
// Custom Method/Function
function plugin_addons ( $curVal , $mode )
{
$frm = e107 :: getForm ();
switch ( $mode )
{
case 'read' : // List Page
return $curVal ;
break ;
case 'write' : // Edit Page
return $frm -> text ( 'plugin_addons' , $curVal , 255 , 'size=large' );
break ;
case 'filter' :
case 'batch' :
return array ();
break ;
}
}
2017-12-25 16:20:44 -08:00
// Custom Method/Function
function plugin_compatible ( $curVal , $mode )
{
$frm = e107 :: getForm ();
switch ( $mode )
{
case 'read' : // List Page
if ( intval ( $curVal ) > 1 )
{
return " <span class='label label-warning'> " . $curVal . " </span> " ;
}
return $curVal ;
break ;
case 'write' : // Edit Page
return $frm -> text ( 'plugin_name' , $curVal , 255 , 'size=large' );
break ;
case 'filter' :
case 'batch' :
return array ();
break ;
}
}
2021-01-23 14:21:55 -08:00
function plugin_icon ( $curVal , $mode )
2017-12-25 16:20:44 -08:00
{
2021-01-23 14:21:55 -08:00
return e107 :: getParser () -> toIcon ( $curVal );
}
function options ( $bla , $data )
{
$action = $this -> getController () -> getAction ();
if ( e107 :: isInstalled ( $data [ 'folder' ]))
{
if ( $action === 'grid' )
{
return " <button class='btn btn-sm btn-default btn-secondary' disabled> " . LAN_INSTALLED . " </button> " ;
}
return ' <span class="label label-default">' . LAN_INSTALLED . " </span> " ;
return null ;
}
$id = 'plug_' . $data [ 'params' ][ 'id' ];
$modalCaption = ( ! empty ( $data [ 'price' ])) ? EPL_ADLAN_92 . " " . $data [ 'name' ] . " " . $data [ 'version' ] : EPL_ADLAN_230 . " " . $data [ 'name' ] . " " . $data [ 'version' ];
$srcData = array (
'plugin_id' => $data [ 'params' ][ 'id' ],
'plugin_folder' => $data [ 'folder' ],
'plugin_price' => $data [ 'price' ],
'plugin_mode' => 'addon' ,
'plugin_url' => $data [ 'url' ],
);
$url = $this -> getController () -> getMarketplace () -> getDownloadModal ( 'plugin' , $data );
$button = ADMIN_INSTALLPLUGIN_ICON ;
$class = 'btn btn-sm btn-default btn-secondary' ;
$disable = '' ;
$title = EPL_ADLAN_237 ;
$tp = e107 :: getParser ();
if ( $action === 'grid' )
{
$button = e107 :: getParser () -> toGlyph ( 'fa-bolt' ) . ADLAN_121 ; // Install
$class = 'btn btn-sm btn-primary' ;
$version = $tp -> filter ( e_VERSION , 'version' );
$compat = ( float ) $tp -> filter ( $data [ 'compatibility' ], 'version' );
if ( $compat == 2 )
{
$compat = $version ;
}
2021-02-13 06:15:42 -08:00
if ( ! e107 :: isCompatible ( $compat , 'plugin' ))
2021-01-23 14:21:55 -08:00
{
$button = e107 :: getParser () -> toGlyph ( 'fa-bolt' ) . ADLAN_121 ;
$class = 'btn btn-sm btn-warning' ;
// $disable = 'data-confirm="This plugin may not be compatible with your version of e107. Are you sure?"';
$title = " Install: May not be compatible " ;
}
}
2021-03-02 08:33:27 -08:00
return '<a title="' . $title . '" ' . $disable . ' class="e-modal ' . $class . '" href="' . $url . '" rel="external" data-loading="' . e_IMAGE . '/generic/loading_32.gif" data-cache="false" data-modal-caption="' . $modalCaption . '" target="_blank" >' . $button . '</a>' ;
2021-01-26 15:08:58 -08:00
// $dicon = "<a data-toggle='modal' data-bs-toggle='modal' data-modal-caption=\"Downloading ".$data['plugin_name']." ".$data['plugin_version']."\" href='{$url}' data-cache='false' data-target='#uiModal' title='".LAN_DOWNLOAD."' ><img class='top' src='".e_IMAGE_ABS."icons/download_32.png' alt='' /></a> ";
2021-01-23 14:21:55 -08:00
2017-12-25 16:20:44 -08:00
}
2017-02-04 15:52:26 -08:00
}
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
class pluginLanguage extends e_admin_ui
{
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
private $scriptFiles = array ();
private $lanFiles = array ();
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
private $lanDefs = array ();
private $scriptDefs = array ();
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
private $lanDefsData = array ();
private $scriptDefsData = array ();
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
private $unused = array ();
private $unsure = array ();
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
private $excludeLans = array ( 'CORE_LC' , 'CORE_LC2' , 'e_LAN' , 'e_LANGUAGE' , 'e_LANGUAGEDIR' , 'LAN' , 'LANGUAGE' );
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
private $useSimilar = false ;
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
function listPage ()
{
if ( ! empty ( $_GET [ 'newplugin' ]) && $_GET [ 'step' ] == 2 )
{
$plugin = e107 :: getParser () -> filter ( $_GET [ 'newplugin' ], 'file' );
return $this -> step2 ( $plugin );
2017-02-05 15:49:03 -08:00
2017-09-18 13:43:31 -07:00
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
function step2 ( $path )
{
$this -> plugin = $path ;
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
$fl = e107 :: getFile ();
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
$files = $fl -> get_files ( e_PLUGIN . $path . '/languages' , null , null , 3 );
$files2 = $fl -> get_files ( e_PLUGIN . $path , '\.php|\.sc|\.bb|\.xml' , 'languages' , 3 );
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
$this -> scanLanFile ( e_LANGUAGEDIR . " English/English.php " );
$this -> scanLanFile ( e_LANGUAGEDIR . " English/admin/lan_admin.php " );
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
foreach ( $files as $v )
{
if ( strpos ( $v [ 'path' ], 'English' ) !== false OR strpos ( $v [ 'fname' ], 'English' ) !== false )
{
$path = $v [ 'path' ] . $v [ 'fname' ];
$this -> lanFiles [] = $path ;
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
$this -> scanLanFile ( $path );
}
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
foreach ( $files2 as $v )
{
$path = $v [ 'path' ] . $v [ 'fname' ];
$this -> scriptFiles [] = $path ;
$this -> scanScriptFile ( $path );
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
return $this -> renderResults ();
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
function findSimilar ( $data )
{
$sim = array ();
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
foreach ( $this -> lanDefsData as $k => $v )
{
if ( empty ( $v [ 'value' ]))
{
continue ;
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
if ( $this -> useSimilar == true )
{
similar_text ( $v [ 'value' ], $data [ 'value' ], $percentSimilar );
}
else
{
$percentSimilar = 0 ;
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
if ((( $v [ 'value' ] == $data [ 'value' ] || $percentSimilar > 89 ) && $data [ 'file' ] != $v [ 'file' ]))
{
if ( strpos ( $v [ 'lan' ], 'LAN' ) === false ) // Defined constants that don't contain 'LAN'.
{
$v [ 'status' ] = 2 ;
}
else
{
$v [ 'status' ] = ( in_array ( $v [ 'lan' ], $this -> used )) ? 1 : 0 ;
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
$sim [] = $v ;
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
}
}
2017-02-04 15:52:26 -08:00
2017-09-18 13:43:31 -07:00
return $sim ;
2017-02-04 15:52:26 -08:00
2013-03-05 06:11:05 -08:00
}
2017-09-18 13:43:31 -07:00
function renderSimilar ( $data , $mode = '' )
2013-03-05 06:11:05 -08:00
{
2017-09-18 13:43:31 -07:00
2021-03-02 08:33:27 -08:00
$sim = ( array ) $this -> findSimilar ( $data );
2017-09-18 13:43:31 -07:00
if ( empty ( $sim ) || ( $mode == 'script' && count ( $sim ) < 2 ))
2013-03-05 06:11:05 -08:00
{
2017-09-18 13:43:31 -07:00
return ; // ADMIN_TRUE_ICON;
2013-03-05 06:11:05 -08:00
}
2017-09-18 13:43:31 -07:00
$text = " <table class='table table-striped table-bordered'>
" ;
foreach ( $sim as $k => $val )
2013-03-05 06:11:05 -08:00
{
2017-09-18 13:43:31 -07:00
$text .= " <tr>
< td style = 'width:30%' > " . $this->shortPath ( $val['file'] ). " </ td >
< td style = 'width:45%' > " . $val['lan'] . " < br />< small > " . $val['value'] . " </ small ></ td >
< td style = 'width:25%' > " . $this->renderStatus ( $val['status'] ). " </ td >
</ tr > " ;
2013-03-05 06:11:05 -08:00
}
2017-09-18 13:43:31 -07:00
$text .= " </table> " ;
return $text ;
2013-03-05 06:11:05 -08:00
}
2017-09-18 13:43:31 -07:00
function renderFilesList ( $list )
2013-03-05 06:11:05 -08:00
{
2017-09-18 13:43:31 -07:00
$l = array ();
foreach ( $list as $v )
2013-03-05 06:11:05 -08:00
{
2017-09-18 13:43:31 -07:00
$l [] = $this -> shortPath ( $v , 'script' );
2013-03-05 06:11:05 -08:00
}
2017-09-18 13:43:31 -07:00
if ( ! empty ( $l ))
2013-03-05 06:11:05 -08:00
{
2017-09-18 13:43:31 -07:00
return implode ( " <br /> " , $l );
2013-03-05 06:11:05 -08:00
}
2016-01-12 15:44:54 -08:00
}
2017-09-18 13:43:31 -07:00
function renderStatus ( $val , $mode = 'lan' )
2016-06-02 19:20:58 -07:00
{
2017-09-18 13:43:31 -07:00
$diz = array (
'lan' => array ( 0 => 'Unused by ' . $this -> plugin , 1 => 'Used by ' . $this -> plugin , 2 => 'Unsure' ),
'script' => array ( 0 => 'Missing from Language Files' , 1 => 'Found in Language Files' , 3 => " Generic " )
);
2016-01-12 15:44:54 -08:00
2013-03-05 06:11:05 -08:00
2017-09-18 13:43:31 -07:00
if ( $val == 1 )
{
return " <span class='label label-success'> " . $diz [ $mode ][ $val ] . " </span> " ;
}
2013-03-05 06:11:05 -08:00
2017-09-18 13:43:31 -07:00
if ( $val == 2 )
{
return " <span class='label label-warning'> " . $diz [ $mode ][ $val ] . " </span> " ;
}
2013-04-17 15:22:47 -07:00
2017-09-18 13:43:31 -07:00
return " <span class='label label-important label-danger'> " . $diz [ $mode ][ $val ] . " </span> " ;
}
2006-12-02 04:36:16 +00:00
2017-09-18 13:43:31 -07:00
function shortPath ( $path , $mode = 'lan' )
{
2013-03-05 06:11:05 -08:00
2017-09-18 13:43:31 -07:00
if ( $path == e_LANGUAGEDIR . 'English/English.php' )
{
return " <i>Core Frontend Language File</i> " ;
}
2008-12-10 22:39:43 +00:00
2017-09-18 13:43:31 -07:00
if ( $path == e_LANGUAGEDIR . 'English/admin/lan_admin.php' )
{
return " <i>Core Admin-area Language File</i> " ;
}
2017-02-07 14:54:02 -08:00
2017-09-18 13:43:31 -07:00
if ( $mode == 'script' )
{
return str_replace ( e_PLUGIN . $this -> plugin . '/' , '' , $path );
}
else
{
2013-03-05 06:11:05 -08:00
2017-09-18 13:43:31 -07:00
$text = str_replace ( e_PLUGIN . $this -> plugin . '/languages/' , '' , $path );
2013-03-05 06:11:05 -08:00
2017-09-18 13:43:31 -07:00
if ( strpos ( $path , '_front.php' ) === false && strpos ( $path , '_admin.php' ) === false && strpos ( $path , '_global.php' ) === false && strpos ( $path , '_menu.php' ) === false && strpos ( $path , '_notify.php' ) === false && strpos ( $path , '_search.php' ) === false )
{
return " <span class='text-error e-tip' title='File name should be either English_front.php, English_admin.php or English_global.php'> " . $text . " </span> " ;
}
2008-12-10 22:39:43 +00:00
2017-09-18 13:43:31 -07:00
return $text ;
2017-02-03 20:18:45 -08:00
2017-09-18 13:43:31 -07:00
}
2016-06-02 19:20:58 -07:00
2012-07-24 00:42:17 +00:00
}
2009-08-14 21:11:49 +00:00
2013-05-06 05:19:20 -07:00
2017-09-18 13:43:31 -07:00
function renderTable ( $array , $mode )
{
if ( empty ( $array ))
{
return " <div class='alert alert-info alert-block'>No Matches</div> " ;
}
2009-07-07 02:22:57 +00:00
2017-09-18 13:43:31 -07:00
$text2 = '' ;
2009-07-07 06:26:51 +00:00
2017-09-18 13:43:31 -07:00
if ( $mode == 'unsure' )
{
$text2 .= " <div class='alert alert-info alert-block'>LAN items in this list have been named incorrectly. They should include 'LAN' in their name. eg. LAN_ " . strtoupper ( $this -> plugin ) . " _001</div> " ;
2009-07-07 02:22:57 +00:00
2017-09-18 13:43:31 -07:00
}
2009-07-07 02:22:57 +00:00
2017-09-18 13:43:31 -07:00
$text2 .= " <table class='table table-striped table-bordered'>
< tr >
< th > LAN </ th >
< th > File </ th >
< th > Value </ th >
< th > Duplicate or Similar Value </ th >
</ tr >
" ;
2017-02-07 14:54:02 -08:00
2017-09-18 13:43:31 -07:00
foreach ( $array as $k => $v )
{
$text2 .= " <tr>
< td style = 'width:5%' > " . $v . " </ td >
< td > " . $this->shortPath ( $this->lanDefsData [ $k ]['file']). " </ td >
< td style = 'width:20%' > " . $this->lanDefsData [ $k ]['value']. " </ td >
< td > " . $this->renderSimilar ( $this->lanDefsData [ $k ]). " </ td >
</ tr > " ;
2009-08-14 21:11:49 +00:00
2017-09-18 13:43:31 -07:00
}
2009-08-14 21:11:49 +00:00
2017-09-18 13:43:31 -07:00
$text2 .= " </table> " ;
2010-06-23 10:21:21 +00:00
2017-09-18 13:43:31 -07:00
return $text2 ;
2009-07-09 02:47:17 +00:00
}
2009-07-13 09:31:19 +00:00
2017-09-18 13:43:31 -07:00
function renderScriptTable ()
2009-08-14 21:11:49 +00:00
{
2009-07-09 02:47:17 +00:00
2017-09-18 13:43:31 -07:00
// return print_a($this->scriptDefsData,true);
2009-07-09 02:47:17 +00:00
2017-09-18 13:43:31 -07:00
$text2 = " <table class='table table-striped table-bordered'>
< tr >
< th > id </ th >
< th > File </ th >
< th > Detected LAN </ th >
< th > LAN Value </ th >
< th class = 'right' > Found on Line </ th >
< th style = 'width:10%' > Status </ th >
< th > Duplicates / Possible Substitions </ th >
</ tr >
" ;
2009-07-07 06:26:51 +00:00
2017-09-18 13:43:31 -07:00
foreach ( $this -> scriptDefsData as $k => $v )
2013-05-06 05:19:20 -07:00
{
2017-09-18 13:43:31 -07:00
$status = in_array ( $v [ 'lan' ], $this -> lanDefs ) ? 1 : 0 ;
// $lan = $v['lan'];
// $v['value'] = $this->lanDefsRaw[$lan];
// $sim = $this->findSimilar($v);
$text2 .= " <tr>
< td style = 'width:5%' > " . $k . " </ td >
< td > " . $this->shortPath ( $v['file'] ,'script'). " </ td >
< td > " . $v['lan'] . " </ td >
< td >< small > " . $this->lanDefsRaw [ $v['lan'] ]. " </ small ></ td >
< td class = 'right' > " . $v['line'] . " </ td >
< td > " . $this->renderStatus ( $status ,'script'). " </ td >
< td > " . $this->renderSimilar ( $v ,'script'). " </ td >
</ tr > " ;
}
$text2 .= " </table> " ;
return $text2 ;
2015-02-03 21:58:26 -08:00
}
2016-06-02 19:20:58 -07:00
2017-09-18 13:43:31 -07:00
function renderResults ()
2016-06-02 19:20:58 -07:00
{
2017-09-18 13:43:31 -07:00
$frm = e107 :: getForm ();
$ns = e107 :: getRender ();
2016-06-02 19:20:58 -07:00
2017-09-18 13:43:31 -07:00
$this -> unused = array_diff ( $this -> lanDefs , $this -> scriptDefs );
$this -> used = array_intersect ( $this -> lanDefs , $this -> scriptDefs );
foreach ( $this -> unused as $k => $v )
2016-06-02 19:20:58 -07:00
{
2017-09-18 13:43:31 -07:00
if ( strpos ( $v , 'LAN' ) === false )
{
unset ( $this -> unused [ $k ]);
$this -> unsure [ $k ] = $v ;
}
if ( strpos ( $this -> lanDefsData [ $k ][ 'file' ], $this -> plugin ) === false || in_array ( $v , $this -> excludeLans ))
{
unset ( $this -> unused [ $k ]);
unset ( $this -> unsure [ $k ]);
}
2016-06-02 19:20:58 -07:00
}
2017-09-18 13:43:31 -07:00
// print_a($this->scriptData);
2016-06-02 19:20:58 -07:00
2017-09-18 13:43:31 -07:00
$used = $this -> renderTable ( $this -> used , 'used' );
$unused = $this -> renderTable ( $this -> unused , 'unused' );
$unsure = $this -> renderTable ( $this -> unsure , 'unsure' );
2016-06-02 19:20:58 -07:00
2009-07-09 02:47:17 +00:00
2017-09-18 13:43:31 -07:00
// echo $text2;
$tabs = array (
0 => array ( 'caption' => EPL_ADLAN_222 , 'text' => $this -> renderScriptTable ()),
1 => array ( 'caption' => EPL_ADLAN_223 , 'text' => $used ),
2 => array ( 'caption' => EPL_ADLAN_224 , 'text' => $unused ),
3 => array ( 'caption' => EPL_ADLAN_225 , 'text' => $unsure ),
2009-07-09 02:47:17 +00:00
2016-04-30 12:02:02 -07:00
2017-09-18 13:43:31 -07:00
);
2016-06-02 19:20:58 -07:00
2017-09-18 13:43:31 -07:00
$this -> addTitle ( ADLAN_98 . SEP . EPL_ADLAN_114 . SEP . EPL_ADLAN_221 . SEP . $this -> plugin );
2016-06-02 19:20:58 -07:00
2017-09-18 13:43:31 -07:00
$text = " <div class='center'><a class='btn btn-default' href=' " . e_ADMIN_ABS . " plugin.php?mode=create&action=build'> " . LAN_BACK . " </a></div> " ;
2016-06-02 19:20:58 -07:00
2017-09-18 13:43:31 -07:00
return $frm -> tabs ( $tabs ) . $text ;
2009-07-07 02:22:57 +00:00
2017-09-18 13:43:31 -07:00
//$ns->tablerender(ADLAN_98.SEP.EPL_ADLAN_114.SEP.EPL_ADLAN_221.SEP.$this->plugin, $frm->tabs($tabs));
2009-07-07 02:22:57 +00:00
2015-01-30 18:15:17 -08:00
}
2009-07-07 06:26:51 +00:00
2006-12-02 04:36:16 +00:00
2016-04-30 12:02:02 -07:00
2009-07-07 06:26:51 +00:00
2017-09-18 13:43:31 -07:00
function scanScriptFile ( $path )
2009-07-09 02:47:17 +00:00
{
2017-09-18 13:43:31 -07:00
$lines = file ( $path , FILE_IGNORE_NEW_LINES );
foreach ( $lines as $ln => $row )
2009-07-09 02:47:17 +00:00
{
2017-09-18 13:43:31 -07:00
$row = trim ( $row );
2020-12-18 19:55:12 -08:00
// if(substr($row,0,2) == '/*')
// {
2017-09-18 13:43:31 -07:00
// $skip =true; ;
2020-12-18 19:55:12 -08:00
// }
// if(substr($row,0,2) == '*/')
// {
2017-09-18 13:43:31 -07:00
// $skip =false;
// continue;
2020-12-18 19:55:12 -08:00
// }
2017-09-18 13:43:31 -07:00
2019-06-03 16:29:38 -07:00
if ( empty ( $row ) /*|| $skip == true*/ || substr ( $row , 0 , 5 ) == '<?php' || substr ( $row , 0 , 2 ) == '?>' || substr ( $row , 0 , 2 ) == '//' )
2017-09-18 13:43:31 -07:00
{
continue ;
}
if ( preg_match_all ( " /([ \ w_]*LAN[ \ w_]*)/ " , $row , $match ))
{
foreach ( $match [ 1 ] as $lan )
{
if ( ! in_array ( $lan , $this -> excludeLans ))
{
$this -> scriptDefs [] = $lan ;
$this -> scriptDefsData [] = array ( 'file' => $path , 'line' => $ln , 'lan' => $lan , 'value' => $this -> lanDefsRaw [ $lan ]);
// $this->scriptData[$path][$ln] = $row;
}
}
}
2009-07-09 02:47:17 +00:00
}
2010-06-23 10:21:21 +00:00
2009-07-07 06:26:51 +00:00
}
2010-06-23 10:21:21 +00:00
2017-09-18 13:43:31 -07:00
function scanLanFile ( $path )
2013-05-14 22:42:06 +02:00
{
2015-03-30 13:02:51 -07:00
2012-07-20 07:31:16 +00:00
2017-09-18 13:43:31 -07:00
$data = file_get_contents ( $path );
2013-05-17 15:41:02 +03:00
2017-09-18 13:43:31 -07:00
if ( preg_match_all ( '/(\/\*[\s\S]*?\*\/)/i' , $data , $multiComment ))
{
$data = str_replace ( $multiComment [ 1 ], '' , $data ); // strip multi-line comments.
}
2013-05-17 15:41:02 +03:00
2017-09-18 13:43:31 -07:00
$type = basename ( $path );
if ( preg_match_all ( '/^\s*?define\s*?\(\s*?(\'|\")([\w]+)(\'|\")\s*?,\s*?(\'|\")([\s\S]*?)\s*?(\'|\")\s*?\)\s*?;/im' , $data , $matches ))
2012-07-20 07:31:16 +00:00
{
2017-09-18 13:43:31 -07:00
$def = $matches [ 2 ];
$values = $matches [ 5 ];
foreach ( $def as $k => $d )
2012-07-24 00:42:17 +00:00
{
2017-09-18 13:43:31 -07:00
if ( $d == 'e_PAGETITLE' || $d == 'PAGE_NAME' || $d == 'CORE_LC' && $d == 'CORE_LC2' )
{
continue ;
}
$retloc [ $type ][ $d ] = $values [ $k ];
$this -> lanDefs [] = $d ;
$this -> lanDefsData [] = array ( 'file' => $path , 'lan' => $d , 'value' => $values [ $k ]);
$this -> lanDefsRaw [ $d ] = $values [ $k ];
2012-07-24 00:42:17 +00:00
}
2012-07-20 07:31:16 +00:00
}
2017-09-18 13:43:31 -07:00
//print_a($this->lanDefsData);
return ;
2012-07-20 07:31:16 +00:00
}
2017-01-04 11:59:57 -08:00
2017-02-05 15:49:03 -08:00
2017-02-07 14:54:02 -08:00
2016-11-20 20:12:33 -08:00
2017-09-18 13:43:31 -07:00
}
2015-07-17 23:09:36 -07:00
2021-01-16 13:32:35 -08:00
new plugman_adminArea ();
require_once ( e_ADMIN . " auth.php " );
e107 :: getAdminUI () -> runPage ();
require_once ( e_ADMIN . " footer.php " );
2016-11-20 20:12:33 -08:00
2016-11-19 14:07:06 -08:00
2016-11-21 15:17:12 -08:00
2017-02-07 14:54:02 -08:00
2015-02-03 21:58:26 -08:00
2015-07-17 23:09:36 -07:00
2016-11-19 14:07:06 -08:00
2017-01-26 15:37:42 -08:00
2009-07-07 02:22:57 +00:00
2009-07-07 06:26:51 +00:00
2016-12-04 11:54:02 -08:00
2009-07-07 02:22:57 +00:00
2008-12-04 21:36:09 +00:00
2016-12-04 11:54:02 -08:00
2008-12-04 21:36:09 +00:00
2009-07-07 02:22:57 +00:00
2008-12-04 21:36:09 +00:00
2009-07-07 02:22:57 +00:00
2017-09-18 13:43:31 -07:00
// --------------------------------------
2009-07-07 02:22:57 +00:00
2017-09-18 13:43:31 -07:00
/*
class pluginmanager_form extends e_form
{
var $plug ;
var $plug_vars ;
//FIXME _ there's a problem with calling this.
function plugin_website ( $parms , $value , $id , $attributes )
2012-01-06 09:49:08 +00:00
{
2017-09-18 13:43:31 -07:00
return ( varset ( $plugURL , false )) ? " <a href=' { $plugURL } ' title=' { $plugURL } ' > " . ADMIN_URL_ICON . " </a> " : " " ;
}
function options ( $val , $curVal )
{
$tp = e107 :: getParser ();
$_path = e_PLUGIN . $this -> plug [ 'plugin_path' ] . '/' ;
$icon_src = ( isset ( $this -> plug_vars [ 'plugin_php' ]) ? e_PLUGIN : $_path ) . $this -> plug_vars [ 'administration' ][ 'icon' ];
$plugin_icon = $this -> plug_vars [ 'administration' ][ 'icon' ] ? " <img src=' { $icon_src } ' alt='' class='icon S32' /> " : $tp -> toGlyph ( 'e-cat_plugins-32' );
$conf_file = " # " ;
$conf_title = " " ;
if ( $this -> plug_vars [ 'administration' ][ 'configFile' ] && $this -> plug [ 'plugin_installflag' ] == true )
2012-01-06 09:49:08 +00:00
{
2017-09-18 13:43:31 -07:00
$conf_file = e_PLUGIN . $this -> plug [ 'plugin_path' ] . '/' . $this -> plug_vars [ 'administration' ][ 'configFile' ];
$conf_title = LAN_CONFIGURE . ' ' . $tp -> toHTML ( $this -> plug_vars [ '@attributes' ][ 'name' ], " " , " defs,emotes_off, no_make_clickable " );
$plugin_icon = " <a title=' { $conf_title } ' href=' { $conf_file } ' > " . $plugin_icon . " </a> " ;
$plugin_config_icon = " <a class='btn btn-default' title=' { $conf_title } ' href=' { $conf_file } ' > " . ADMIN_CONFIGURE_ICON . " </a> " ;
2012-01-06 09:49:08 +00:00
}
2017-09-18 13:43:31 -07:00
$text = " <div class='btn-group'> " ;
$text .= vartrue ( $plugin_config_icon );
if ( $this -> plug_vars [ '@attributes' ][ 'installRequired' ])
2012-01-06 09:49:08 +00:00
{
2017-09-18 13:43:31 -07:00
if ( $this -> plug [ 'plugin_installflag' ])
2012-01-06 09:49:08 +00:00
{
2017-09-18 13:43:31 -07:00
$text .= ( $this -> plug [ 'plugin_installflag' ] ? " <a class='btn btn-default' href= \" " . e_SELF . " ?uninstall. { $this -> plug [ 'plugin_id' ] } \" title=' " . EPL_ADLAN_1 . " ' > " . ADMIN_UNINSTALLPLUGIN_ICON . " </a> " : " <a class='btn' href= \" " . e_SELF . " ?install. { $this -> plug [ 'plugin_id' ] } \" title=' " . EPL_ADLAN_0 . " ' > " . ADMIN_INSTALLPLUGIN_ICON . " </a> " );
// $text .= ($this->plug['plugin_installflag'] ? "<button type='button' class='delete' value='no-value' onclick=\"location.href='".e_SELF."?uninstall.{$this->plug['plugin_id']}'\"><span>".EPL_ADLAN_1."</span></button>" : "<button type='button' class='update' value='no-value' onclick=\"location.href='".e_SELF."?install.{$this->plug['plugin_id']}'\"><span>".EPL_ADLAN_0."</span></button>");
if ( e_DEBUG && ! vartrue ( $this -> plug_vars [ 'plugin_php' ]))
2009-07-07 02:22:57 +00:00
{
2017-09-18 13:43:31 -07:00
// $text .= "<br /><br /><input type='button' class='btn btn-default button' onclick=\"location.href='".e_SELF."?refresh.{$this->plug['plugin_id']}'\" title='".'Refresh plugin settings'."' value='".'Refresh plugin settings'."' /> ";
2009-07-07 02:22:57 +00:00
}
2012-01-06 09:49:08 +00:00
}
2017-09-18 13:43:31 -07:00
else
2012-01-06 09:49:08 +00:00
{
2017-09-18 13:43:31 -07:00
// $text .= "<input type='button' class='btn' onclick=\"location.href='".e_SELF."?install.{$this->plug['plugin_id']}'\" title='".EPL_ADLAN_0."' value='".EPL_ADLAN_0."' />";
// $text .= "<button type='button' class='update' value='no-value' onclick=\"location.href='".e_SELF."?install.{$this->plug['plugin_id']}'\"><span>".EPL_ADLAN_0."</span></button>";
$text .= " <a class='btn btn-default' href= \" " . e_SELF . " ?install. { $this -> plug [ 'plugin_id' ] } \" title=' " . EPL_ADLAN_0 . " ' > " . ADMIN_INSTALLPLUGIN_ICON . " </a> " ;
2012-01-06 09:49:08 +00:00
}
2017-09-18 13:43:31 -07:00
}
else
{
if ( $this -> plug_vars [ 'menuName' ])
2012-01-06 09:49:08 +00:00
{
2017-09-18 13:43:31 -07:00
$text .= EPL_NOINSTALL . str_replace ( " .. " , " " , e_PLUGIN . $this -> plug [ 'plugin_path' ]) . " / " . EPL_DIRECTORY ;
2012-01-06 09:49:08 +00:00
}
2017-09-18 13:43:31 -07:00
else
2012-01-06 09:49:08 +00:00
{
2017-09-18 13:43:31 -07:00
$text .= EPL_NOINSTALL_1 . str_replace ( " .. " , " " , e_PLUGIN . $this -> plug [ 'plugin_path' ]) . " / " . EPL_DIRECTORY ;
if ( $this -> plug [ 'plugin_installflag' ] == false )
{
e107 :: getDb () -> delete ( 'plugin' , " plugin_installflag=0 AND (plugin_path=' { $this -> plug [ 'plugin_path' ] } ' OR plugin_path=' { $this -> plug [ 'plugin_path' ] } /' ) " );
2009-07-07 02:22:57 +00:00
}
2012-01-06 09:49:08 +00:00
}
2017-09-18 13:43:31 -07:00
}
2008-12-04 21:36:09 +00:00
2017-09-18 13:43:31 -07:00
if ( $this -> plug [ 'plugin_version' ] != $this -> plug_vars [ '@attributes' ][ 'version' ] && $this -> plug [ 'plugin_installflag' ])
{
// $text .= "<br /><input type='button' class='btn' onclick=\"location.href='".e_SELF."?upgrade.{$this->plug['plugin_id']}'\" title='".EPL_UPGRADE." to v".$this->plug_vars['@attributes']['version']."' value='".EPL_UPGRADE."' />";
2019-02-26 12:22:36 -08:00
e107 :: getMessage () -> addInfo ( " <b> " . $tp -> toHTML ( $this -> plug [ 'plugin_name' ], false , 'TITLE' ) . " </b> is ready to be upgraded. (see below) " ); // TODO LAN
2017-09-18 13:43:31 -07:00
$text .= " <a class='btn btn-default' href=' " . e_SELF . " ?upgrade. { $this -> plug [ 'plugin_id' ] } ' title= \" " . EPL_UPGRADE . " v " . $this -> plug_vars [ '@attributes' ][ 'version' ] . " \" > " . ADMIN_UPGRADEPLUGIN_ICON . " </a> " ;
}
2014-01-01 18:38:02 -08:00
2017-09-18 13:43:31 -07:00
if ( $this -> plug [ 'plugin_installflag' ] && e_DEBUG == true )
{
$text .= " <a class='btn btn-default' href=' " . e_SELF . " ?repair. " . $this -> plug [ 'plugin_id' ] . " ' title=' " . LAN_REPAIR_PLUGIN_SETTINGS . " '> " . ADMIN_REPAIRPLUGIN_ICON . " </a> " ;
2012-01-06 09:49:08 +00:00
}
2010-06-23 10:21:21 +00:00
2017-09-18 13:43:31 -07:00
if ( $this -> plug [ 'plugin_installflag' ] && is_dir ( $_path . " .git " ))
{
$text .= " <a class='plugin-manager btn btn-default' href=' " . e_SELF . " ?pull. " . $this -> plug [ 'plugin_id' ] . " ' title=' " . LAN_SYNC_WITH_GIT_REPO . " '> " . ADMIN_GITSYNC_ICON . " </a> " ;
}
2010-06-23 10:21:21 +00:00
2008-12-04 21:36:09 +00:00
2017-09-18 13:43:31 -07:00
$text .= " </div> " ;
return $text ;
}
2008-12-04 21:36:09 +00:00
2017-09-18 13:43:31 -07:00
}
*/
/*
require_once ( " auth.php " );
$pman -> pluginObserver ();
$mes = e107 :: getMessage ();
$frm = e107 :: getForm (); */
2008-12-04 21:36:09 +00:00
2017-09-18 13:43:31 -07:00
require_once ( " footer.php " );
2017-02-04 13:45:11 -08:00
2010-06-23 10:21:21 +00:00
2015-01-30 18:15:17 -08:00