diff --git a/includes/adm/j_plugins.php b/includes/adm/j_plugins.php index 8575f87..0d1ca58 100755 --- a/includes/adm/j_plugins.php +++ b/includes/adm/j_plugins.php @@ -37,14 +37,13 @@ $plugin_update_link = ADMIN_PATH . '?cp=' . basename(__file__, '.php') . '&c //check _GET Csrf token -if (!$case || ! in_array($case, array('install', 'uninstall', 'enable', 'disable' , 'download' , 'update'))) +if (!empty($case) && in_array($case, array('install', 'uninstall', 'enable', 'disable' , 'download' , 'update'))) { - kleeja_admin_err('dont play with links', $action); -} -elseif (!kleeja_check_form_key_get('PLUGINS_FORM_KEY')) -{ - kleeja_admin_err($lang['INVALID_GET_KEY'], $action); - exit; + if (!kleeja_check_form_key_get('PLUGINS_FORM_KEY')) + { + kleeja_admin_err($lang['INVALID_GET_KEY'], $action); + exit; + } } @@ -139,31 +138,27 @@ switch ($case): $no_plugins = sizeof($available_plugins) == 0 && sizeof($installed_plugins) == 0; - - // plugins avilable in kleeja store - - - $store_link = 'https://raw.githubusercontent.com/kleeja-official/plugin-catalog/master/plugins.json'; - - $get_store_plugins = fetch_remote_file($store_link); - $get_store_plugins = json_decode($get_store_plugins , true); - - // make useful plugin list to searching in array - $useful_plugins_list = array(); - - foreach ($available_plugins as $value) + // plugins avilable in kleeja remote catalog + if (!($catalog_plugins = $cache->get('catalog_plugins'))) { - $useful_plugins_list[] = $value['name']; // the important think is plugin name , we dont want display the plugin again + $store_link = 'https://raw.githubusercontent.com/kleeja-official/plugin-catalog/master/plugins.json'; + + $catalog_plugins = fetch_remote_file($store_link); + $catalog_plugins = json_decode($catalog_plugins , true); + + if(json_last_error() == JSON_ERROR_NONE) + { + $cache->save('catalog_plugins', $catalog_plugins); + } } - - + // make an array for all plugins in kleeja remote catalog + // that are not exsisted locally. $store_plugins = array(); - - // make an arry for all plugins in kleeja store that not included in our server - foreach ($get_store_plugins as $plugin_info) + $available_plugins_names = array_column($available_plugins, 'name'); + foreach ($catalog_plugins as $plugin_info) { - if ( ! in_array($plugin_info['name'] , $useful_plugins_list) && empty($installed_plugins[$plugin_info['name']]) ) + if (! in_array($plugin_info['name'] , $available_plugins_names) && empty($installed_plugins[$plugin_info['name']]) ) { $store_plugins[$plugin_info['name']] = array( 'name' => $plugin_info['name'] , @@ -179,10 +174,8 @@ switch ($case): ? false : true, ); } - } - $stylee = "admin_plugins"; break; @@ -192,11 +185,8 @@ switch ($case): //upload a plugin // case 'upload': - - $ERRORS = array(); - if(intval($userinfo['founder']) !== 1) { $ERRORS[] = $lang['HV_NOT_PRVLG_ACCESS']; @@ -209,8 +199,6 @@ switch ($case): $ERRORS[] = $lang['CHOSE_F']; } - - #extract it to plugins folder if(!sizeof($ERRORS)) { @@ -241,7 +229,6 @@ switch ($case): @unlink($_FILES['plugin_file']['tmp_name']); } - if(!sizeof($ERRORS)) { kleeja_admin_info($lang['NO_PROBLEM_AFTER_ZIP'], true, '', true, $action); @@ -259,17 +246,14 @@ switch ($case): // case 'install': - if(intval($userinfo['founder']) !== 1) { kleeja_admin_err($lang['HV_NOT_PRVLG_ACCESS'], ADMIN_PATH . '?cp=' . basename(__file__, '.php')); exit; } - $plg_name = g('plg', 'str'); - if (empty($plg_name)) { if (defined('DEBUG')) @@ -339,13 +323,11 @@ switch ($case): delete_cache('', true); - if (is_array($plugin_info['plugin_description'])) { $plugin_info['plugin_description'] = !empty($plugin_info['plugin_description']['en']) ? $plugin_info['plugin_description']['en'] : $plugin_info['plugin_description'][0]; } - #add to database $insert_query = array( 'INSERT' => '`plg_name` ,`plg_ver`, `plg_author`, `plg_dsc`, `plg_icon`, `plg_uninstall`, `plg_instructions`, `plg_store`, `plg_files`', @@ -355,14 +337,12 @@ switch ($case): $SQL->build($insert_query); - #may God protect you brother. if(is_callable($install_callback)) { $install_callback($SQL->insert_id()); } - #show done, msg $text = '

' . $lang['NEW_PLUGIN_ADDED'] . '

'; if ($plugin_first_run) @@ -394,10 +374,8 @@ switch ($case): exit; } - $plg_name = g('plg', 'str'); - if (empty($plg_name)) { if (defined('DEV_STAGE')) @@ -439,16 +417,13 @@ switch ($case): 'WHERE' => "plg_name='" . $SQL->escape($plg_name) . "'" ); - $result = $SQL->build($query); $pluginDatabaseInfo = $SQL->fetch($result); - #sad to see you go, brother $uninstall_callback(!empty($pluginDatabaseInfo) ? $pluginDatabaseInfo['plg_id'] : 0); - delete_cache('', true); #remove from database @@ -463,7 +438,6 @@ switch ($case): $text = '

' . $lang['PLUGIN_DELETED'] . '

'; $text .= '' . "\n"; - $stylee = 'admin_info'; } @@ -471,7 +445,7 @@ switch ($case): // - //disable a plugin + // disable a plugin // case 'disable': case 'enable': @@ -482,10 +456,8 @@ switch ($case): exit; } - $plg_name = g('plg', 'str'); - if (empty($plg_name)) { if (defined('DEV_STAGE')) @@ -507,7 +479,6 @@ switch ($case): $SQL->build($update_query); - delete_cache('', true); #show done, msg @@ -520,9 +491,7 @@ switch ($case): break; - - case 'download': - + case 'download': if(intval($userinfo['founder']) !== 1) { @@ -531,20 +500,18 @@ switch ($case): } // plugins avilable in kleeja store - - $store_link = 'https://raw.githubusercontent.com/kleeja-official/plugin-catalog/master/plugins.json'; - $get_store_plugins = fetch_remote_file($store_link); + $catalog_plugins = fetch_remote_file($store_link); - if ($get_store_plugins) + if ($catalog_plugins) { - $get_store_plugins = json_decode($get_store_plugins , true); - + $catalog_plugins = json_decode($catalog_plugins , true); + $store_plugins = array(); // make an arry for all plugins in kleeja store that not included in our server - foreach ($get_store_plugins as $plugin_info) + foreach ($catalog_plugins as $plugin_info) { $store_plugins[$plugin_info['name']] = array( 'name' => $plugin_info['name'] , @@ -554,116 +521,109 @@ switch ($case): 'kj_max_version' => $plugin_info['kleeja_version']['max'] , ); } - - - - $downPlugin = g('plg'); - - if (isset($store_plugins[$downPlugin])) // => this plugin is hosted in our store + + $download_plugin = g('plg'); + + // // => this plugin is hosted in our store + if (isset($store_plugins[$download_plugin])) { // check if the version of the plugin is compatible with our kleeja version or not if ( - version_compare(strtolower($store_plugins[$downPlugin]['kj_min_version']), KLEEJA_VERSION , '<=') - && version_compare(strtolower($store_plugins[$downPlugin]['kj_max_version']), KLEEJA_VERSION , '>=') - ) { - $plgDownLink = $store_plugins[$downPlugin]['url']; - - $pluginZipFile = fetch_remote_file($plgDownLink, PATH . 'cache/'.$downPlugin.'.zip', 60, false, 10, true); - - if ($pluginZipFile) + version_compare(strtolower($store_plugins[$download_plugin]['kj_min_version']), KLEEJA_VERSION , '<=') + && version_compare(strtolower($store_plugins[$download_plugin]['kj_max_version']), KLEEJA_VERSION , '>=') + ) + { + $download_plugin_link = $store_plugins[$download_plugin]['url']; + + $downloaded_plugin_zip = fetch_remote_file($download_plugin_link, PATH . 'cache/' . $download_plugin . '.zip', 60, false, 10, true); + + if ($downloaded_plugin_zip) { - if ( file_exists( PATH . 'cache/'.$downPlugin.'.zip' ) ) + if (file_exists(PATH . 'cache/' . $download_plugin . '.zip' ) ) { $zip = new ZipArchive(); - if ($zip->open( PATH . 'cache/'.$downPlugin.'.zip' ) === true) + if ($zip->open(PATH . 'cache/' . $download_plugin . '.zip' ) === true) { if( $zip->extractTo(PATH . KLEEJA_PLUGINS_FOLDER)) { $zip->close(); - // we dont need the zip file anymore - unlink(PATH . 'cache/'.$downPlugin.'.zip'); - + unlink(PATH . 'cache/' . $download_plugin . '.zip'); + // for example :: When we extract zip file , the name will be ( advanced-extras-1.0 ) // so we need to remove the version from folder name and replace ( - ) with ( _ ) // and done - $pluginFolderName = PATH . KLEEJA_PLUGINS_FOLDER. '/' . str_replace('_' , '-' , $downPlugin) . '-' . $store_plugins[$downPlugin]['plg_version']; - rename( $pluginFolderName , PATH . KLEEJA_PLUGINS_FOLDER. '/' . $downPlugin ); - + $plugin_folder_name = PATH . KLEEJA_PLUGINS_FOLDER. '/' . str_replace('_' , '-' , $download_plugin) . '-' . $store_plugins[$download_plugin]['plg_version']; + rename($plugin_folder_name , PATH . KLEEJA_PLUGINS_FOLDER. '/' . $download_plugin); + // download or update msg - ig('update') ? $doMsg = "Plugin {$downPlugin} is updated successfuly" - : $doMsg = "Plugin {$downPlugin} is downloaded successfuly"; - - kleeja_admin_info($doMsg , ADMIN_PATH . '?cp=' . basename(__file__, '.php')); + kleeja_admin_info( + ig('update') ? "Plugin {$downPlugin} is updated successfuly" : "Plugin {$downPlugin} is downloaded successfuly", + ADMIN_PATH . '?cp=' . basename(__file__, '.php')); + exit; } - else // please dont arrive to here , i think every think will be ok + else { - kleeja_admin_err('error when extracting zip file'); + kleeja_admin_err('error during extracting zip file...'); } } } - else // not found plugin zip file + else { - kleeja_admin_err('the zip file is not founded'); + kleeja_admin_err('the plugin zip file is not founded'); } } else // not connected to kleeja store or return empty content { - kleeja_admin_err("error in the url of {$downPlugin} plugin"); + kleeja_admin_err("error in the url of {$download_plugin} plugin"); } } else // not compatible with kleeja version { - kleeja_admin_err("the version of {$downPlugin} is not compatible with your kleeja version"); + kleeja_admin_err("the version of { $download_plugin} is not compatible with your kleeja version"); } } else { - kleeja_admin_err("plugin {$downPlugin} is not hosted in kleeja store"); + kleeja_admin_err("plugin {$download_plugin} is not hosted in kleeja store"); } } - else // the kleeja plugins.json is not found + else { - kleeja_admin_err('error in connection with kleeja store'); + kleeja_admin_err('Connection error to kleeja remote plugin catalog.'); } + break; + case 'update': - break; + $update_plugin = g('plg'); - case 'update': + $plugin_folder_name = PATH . KLEEJA_PLUGINS_FOLDER . '/' . $update_plugin; - $plgUpdate = g('plg'); - - $plgFolder = PATH . KLEEJA_PLUGINS_FOLDER . '/' . $plgUpdate; - - if ( is_dir( $plgFolder ) ) - { - delete_plugin_folder( $plgFolder ); - } - - redirect( $plugin_download_link . $plgUpdate . '&update' ); - - break; - - + if (is_dir($plugin_folder_name)) + { + delete_plugin_folder($plugin_folder_name); + } + redirect($plugin_download_link . $update_plugin . '&update' ); + break; endswitch; -function get_root_plugin_info($plgName) +function get_root_plugin_info($plugin_name) { - $init = PATH . KLEEJA_PLUGINS_FOLDER . '/' . $plgName . '/init.php'; + $init = PATH . KLEEJA_PLUGINS_FOLDER . '/' . $plugin_name . '/init.php'; $return = false; - if ( file_exists( $init ) ) + if (file_exists($init)) { require_once $init; - $return = $kleeja_plugin[$plgName]['information']; + $return = $kleeja_plugin[$plugin_name]['information']; } return $return;