File "modInstaller.php"
Full Path: /home/jlklyejr/public_html/wp-content/test/wp-content/plugins/woo-currency/classes/modInstaller.php
File size: 11.31 KB
MIME-type: text/x-php
Charset: utf-8
<?php
class modInstallerWcu {
static private $_current = array();
/**
* Install new moduleWcu into plugin
* @param string $module new moduleWcu data (@see classes/tables/modules.php)
* @param string $path path to the main plugin file from what module is installed
* @return bool true - if install success, else - false
*/
static public function install($module, $path) {
$exPlugDest = explode('plugins', $path);
if(!empty($exPlugDest[1])) {
$module['ex_plug_dir'] = str_replace(DS, '', $exPlugDest[1]);
}
$path = $path. DS. $module['code'];
if(!empty($module) && !empty($path) && is_dir($path)) {
if(self::isModule($path)) {
$filesMoved = false;
if(empty($module['ex_plug_dir']))
$filesMoved = self::moveFiles($module['code'], $path);
else
$filesMoved = true; //Those modules doesn't need to move their files
if($filesMoved) {
if(frameWcu::_()->getTable('modules')->exists($module['code'], 'code')) {
frameWcu::_()->getTable('modules')->delete(array('code' => $module['code']));
}
if($module['code'] != 'license')
$module['active'] = 0;
frameWcu::_()->getTable('modules')->insert($module);
self::_runModuleInstall($module);
self::_installTables($module);
return true;
} else {
errorsWcu::push(sprintf(__('Move files for %s failed'), $module['code']), errorsWcu::MOD_INSTALL);
}
} else
errorsWcu::push(sprintf(__('%s is not plugin module'), $module['code']), errorsWcu::MOD_INSTALL);
}
return false;
}
static protected function _runModuleInstall($module, $action = 'install') {
$moduleLocationDir = WCU_MODULES_DIR;
if(!empty($module['ex_plug_dir']))
$moduleLocationDir = utilsWcu::getPluginDir( $module['ex_plug_dir'] );
if(is_dir($moduleLocationDir. $module['code'])) {
if(!class_exists($module['code']. strFirstUp(WCU_CODE))) {
importClassWcu($module['code']. strFirstUp(WCU_CODE), $moduleLocationDir. $module['code']. DS. 'mod.php');
}
$moduleClass = toeGetClassNameWcu($module['code']);
$moduleObj = new $moduleClass($module);
if($moduleObj) {
$moduleObj->$action();
}
}
}
/**
* Check whether is or no module in given path
* @param string $path path to the module
* @return bool true if it is module, else - false
*/
static public function isModule($path) {
return true;
}
/**
* Move files to plugin modules directory
* @param string $code code for module
* @param string $path path from what module will be moved
* @return bool is success - true, else - false
*/
static public function moveFiles($code, $path) {
if(!is_dir(WCU_MODULES_DIR. $code)) {
if(mkdir(WCU_MODULES_DIR. $code)) {
utilsWcu::copyDirectories($path, WCU_MODULES_DIR. $code);
return true;
} else
errorsWcu::push(__('Cannot create module directory. Try to set permission to '. WCU_MODULES_DIR. ' directory 755 or 777', WCU_LANG_CODE), errorsWcu::MOD_INSTALL);
} else
return true;
return false;
}
static private function _getPluginLocations() {
$locations = array();
$plug = reqWcu::getVar('plugin');
if(empty($plug)) {
$plug = reqWcu::getVar('checked');
$plug = $plug[0];
}
$locations['plugPath'] = plugin_basename( trim( $plug ) );
$locations['plugDir'] = dirname(WP_PLUGIN_DIR. DS. $locations['plugPath']);
$locations['plugMainFile'] = WP_PLUGIN_DIR. DS. $locations['plugPath'];
$locations['xmlPath'] = $locations['plugDir']. DS. 'install.xml';
return $locations;
}
static private function _getModulesFromXml($xmlPath) {
if($xml = utilsWcu::getXml($xmlPath)) {
if(isset($xml->modules) && isset($xml->modules->mod)) {
$modules = array();
$xmlMods = $xml->modules->children();
foreach($xmlMods->mod as $mod) {
$modules[] = $mod;
}
if(empty($modules))
errorsWcu::push(__('No modules were found in XML file', WCU_LANG_CODE), errorsWcu::MOD_INSTALL);
else
return $modules;
} else
errorsWcu::push(__('Invalid XML file', WCU_LANG_CODE), errorsWcu::MOD_INSTALL);
} else
errorsWcu::push(__('No XML file were found', WCU_LANG_CODE), errorsWcu::MOD_INSTALL);
return false;
}
/**
* Check whether modules is installed or not, if not and must be activated - install it
* @param array $codes array with modules data to store in database
* @param string $path path to plugin file where modules is stored (__FILE__ for example)
* @return bool true if check ok, else - false
*/
static public function check($extPlugName = '') {
if(WCU_TEST_MODE) {
add_action('activated_plugin', array(frameWcu::_(), 'savePluginActivationErrors'));
}
$locations = self::_getPluginLocations();
if($modules = self::_getModulesFromXml($locations['xmlPath'])) {
foreach($modules as $m) {
$modDataArr = utilsWcu::xmlNodeAttrsToArr($m);
if(!empty($modDataArr)) {
//If module Exists - just activate it, we can't check this using frameWcu::moduleExists because this will not work for multy-site WP
if(frameWcu::_()->getTable('modules')->exists($modDataArr['code'], 'code') /*frameWcu::_()->moduleExists($modDataArr['code'])*/) {
self::activate($modDataArr);
} else { // if not - install it
if(!self::install($modDataArr, $locations['plugDir'])) {
errorsWcu::push(sprintf(__('Install %s failed'), $modDataArr['code']), errorsWcu::MOD_INSTALL);
}
}
}
}
} else
errorsWcu::push(__('Error Activate module', WCU_LANG_CODE), errorsWcu::MOD_INSTALL);
if(errorsWcu::haveErrors(errorsWcu::MOD_INSTALL)) {
self::displayErrors();
return false;
}
update_option(WCU_CODE. '_full_installed', 1);
return true;
}
/**
* Public alias for _getCheckRegPlugs()
*/
/**
* We will run this each time plugin start to check modules activation messages
*/
static public function checkActivationMessages() {
}
/**
* Deactivate module after deactivating external plugin
*/
static public function deactivate() {
$locations = self::_getPluginLocations();
if($modules = self::_getModulesFromXml($locations['xmlPath'])) {
foreach($modules as $m) {
$modDataArr = utilsWcu::xmlNodeAttrsToArr($m);
if(frameWcu::_()->moduleActive($modDataArr['code'])) { //If module is active - then deacivate it
if(frameWcu::_()->getModule('options')->getModel('modules')->put(array(
'id' => frameWcu::_()->getModule($modDataArr['code'])->getID(),
'active' => 0,
))->error) {
errorsWcu::push(__('Error Deactivation module', WCU_LANG_CODE), errorsWcu::MOD_INSTALL);
}
}
}
}
if(errorsWcu::haveErrors(errorsWcu::MOD_INSTALL)) {
self::displayErrors(false);
return false;
}
return true;
}
static public function activate($modDataArr) {
$locations = self::_getPluginLocations();
if($modules = self::_getModulesFromXml($locations['xmlPath'])) {
foreach($modules as $m) {
$modDataArr = utilsWcu::xmlNodeAttrsToArr($m);
if(!frameWcu::_()->moduleActive($modDataArr['code'])) { //If module is not active - then acivate it
if(frameWcu::_()->getModule('options')->getModel('modules')->put(array(
'code' => $modDataArr['code'],
'active' => 1,
))->error) {
errorsWcu::push(__('Error Activating module', WCU_LANG_CODE), errorsWcu::MOD_INSTALL);
} else {
$dbModData = frameWcu::_()->getModule('options')->getModel('modules')->get(array('code' => $modDataArr['code']));
if(!empty($dbModData) && !empty($dbModData[0])) {
$modDataArr['ex_plug_dir'] = $dbModData[0]['ex_plug_dir'];
}
self::_runModuleInstall($modDataArr, 'activate');
}
}
}
}
}
/**
* Display all errors for module installer, must be used ONLY if You realy need it
*/
static public function displayErrors($exit = true) {
$errors = errorsWcu::get(errorsWcu::MOD_INSTALL);
foreach($errors as $e) {
echo '<b style="color: red;">'. $e. '</b><br />';
}
if($exit) exit();
}
static public function uninstall() {
$locations = self::_getPluginLocations();
if($modules = self::_getModulesFromXml($locations['xmlPath'])) {
foreach($modules as $m) {
$modDataArr = utilsWcu::xmlNodeAttrsToArr($m);
self::_uninstallTables($modDataArr);
frameWcu::_()->getModule('options')->getModel('modules')->delete(array('code' => $modDataArr['code']));
utilsWcu::deleteDir(WCU_MODULES_DIR. $modDataArr['code']);
}
}
}
static protected function _uninstallTables($module) {
if(is_dir(WCU_MODULES_DIR. $module['code']. DS. 'tables')) {
$tableFiles = utilsWcu::getFilesList(WCU_MODULES_DIR. $module['code']. DS. 'tables');
if(!empty($tableNames)) {
foreach($tableFiles as $file) {
$tableName = str_replace('.php', '', $file);
if(frameWcu::_()->getTable($tableName))
frameWcu::_()->getTable($tableName)->uninstall();
}
}
}
}
static public function _installTables($module, $action = 'install') {
$modDir = empty($module['ex_plug_dir']) ?
WCU_MODULES_DIR. $module['code']. DS :
utilsWcu::getPluginDir($module['ex_plug_dir']). $module['code']. DS;
if(is_dir($modDir. 'tables')) {
$tableFiles = utilsWcu::getFilesList($modDir. 'tables');
if(!empty($tableFiles)) {
frameWcu::_()->extractTables($modDir. 'tables'. DS);
foreach($tableFiles as $file) {
$tableName = str_replace('.php', '', $file);
if(frameWcu::_()->getTable($tableName))
frameWcu::_()->getTable($tableName)->$action();
}
}
}
}
}