diff --git a/system/pages/admin/plugins.php b/system/pages/admin/plugins.php index 9ce94f58..7dc4f0d5 100644 --- a/system/pages/admin/plugins.php +++ b/system/pages/admin/plugins.php @@ -62,37 +62,51 @@ if(isset($_FILES["plugin"]["name"])) $zip = new ZipArchive(); $x = $zip->open($targetzip); // open the zip file to extract if ($x === true) { - if($zip->extractTo($targetdir)) { // place in the directory with same name - $string = file_get_contents(BASE . 'plugins/' . $name[0] . '.json'); - $plugin = json_decode($string, true); - if($plugin == NULL) { - warning('Cannot load ' . BASE . 'plugins/' . $name[0] . '.json. File might be not valid json code.'); - } - - if(isset($plugin['install'])) { - if(file_exists(BASE . $plugin['install'])) - require(BASE . $plugin['install']); - else - warning('Cannot load install script. Your plugin might be not working correctly.'); - } - - if(isset($plugin['hooks'])) { - foreach($plugin['hooks'] as $_name => $info) { - if(isset($hook_types[$info['type']])) { - $query = $db->query('SELECT `id` FROM `' . TABLE_PREFIX . 'hooks` WHERE `name` = ' . $db->quote($_name) . ';'); - if($query->rowCount() == 1) { // found something - $query = $query->fetch(); - $db->query('UPDATE `' . TABLE_PREFIX . 'hooks` SET `type` = ' . $hook_types[$info['type']] . ', `file` = ' . $db->quote($info['file']) . ' WHERE `id` = ' . (int)$query['id'] . ';'); - } - else { - $db->query('INSERT INTO `' . TABLE_PREFIX . 'hooks` (`id`, `name`, `type`, `file`) VALUES (NULL, ' . $db->quote($_name) . ', ' . $hook_types[$info['type']] . ', ' . $db->quote($info['file']) . ');'); - } - } - else - warning('Unknown event type: ' . $info['type']); + for ($i = 0; $i < $zip->numFiles; $i++) { + $tmp = $zip->getNameIndex($i); + if(pathinfo($tmp, PATHINFO_DIRNAME) == 'plugins' && pathinfo($tmp, PATHINFO_EXTENSION) == 'json') + $json_file = $tmp; + } + + if(!isset($json_file)) { + error('Cannot find plugin info .json file. Installation is discontinued.'); + } + else if($zip->extractTo($targetdir)) { // place in the directory with same name + $file_name = BASE . $json_file; + if(!file_exists($file_name)) + warning("Cannot load " . $file_name . ". File doesn't exist."); + else { + $string = file_get_contents($file_name); + $plugin = json_decode($string, true); + if ($plugin == null) { + warning('Cannot load ' . $file_name . '. File might be not valid json code.'); } + + if(isset($plugin['install'])) { + if(file_exists(BASE . $plugin['install'])) + require(BASE . $plugin['install']); + else + warning('Cannot load install script. Your plugin might be not working correctly.'); + } + + if(isset($plugin['hooks'])) { + foreach($plugin['hooks'] as $_name => $info) { + if(isset($hook_types[$info['type']])) { + $query = $db->query('SELECT `id` FROM `' . TABLE_PREFIX . 'hooks` WHERE `name` = ' . $db->quote($_name) . ';'); + if($query->rowCount() == 1) { // found something + $query = $query->fetch(); + $db->query('UPDATE `' . TABLE_PREFIX . 'hooks` SET `type` = ' . $hook_types[$info['type']] . ', `file` = ' . $db->quote($info['file']) . ' WHERE `id` = ' . (int)$query['id'] . ';'); + } + else { + $db->query('INSERT INTO `' . TABLE_PREFIX . 'hooks` (`id`, `name`, `type`, `file`) VALUES (NULL, ' . $db->quote($_name) . ', ' . $hook_types[$info['type']] . ', ' . $db->quote($info['file']) . ');'); + } + } + else + warning('Unknown event type: ' . $info['type']); + } + } + success('' . $plugin['name'] . ' plugin has been successfully installed.'); } - success('' . $plugin['name'] . ' plugin has been successfully installed.'); } else { error('There was a problem with extracting zip archive.');