diff options
author | patdenice <patdenice@piwigo.org> | 2008-10-03 23:16:49 +0000 |
---|---|---|
committer | patdenice <patdenice@piwigo.org> | 2008-10-03 23:16:49 +0000 |
commit | e53eee8f166e130ba428a97b0987c5df41959b67 (patch) | |
tree | 7c2390931c99e224c66834c83da6721045743f42 | |
parent | 0287283e382bcc89d8806fa32576532d5cfbc3df (diff) |
- Plugins manager now use PEM API.
- WARNING! Need to change PEM_URL constant and utf8 encoding when PEM will be updated.
- Bug in roma/themeconf.inc.php: accordion menu wasn't selected in plugins_new et plugins_update tabs.
git-svn-id: http://piwigo.org/svn/trunk@2647 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r-- | admin/include/plugins.class.php | 64 | ||||
-rw-r--r-- | admin/plugins_new.php | 57 | ||||
-rw-r--r-- | admin/plugins_update.php | 76 | ||||
-rw-r--r-- | admin/template/goto/plugins_new.tpl | 5 | ||||
-rw-r--r-- | admin/template/goto/plugins_update.tpl | 7 | ||||
-rw-r--r-- | admin/template/goto/theme/roma/themeconf.inc.php | 2 | ||||
-rw-r--r-- | include/constants.php | 2 |
7 files changed, 122 insertions, 91 deletions
diff --git a/admin/include/plugins.class.php b/admin/include/plugins.class.php index de189ffc9..2d2bd3afe 100644 --- a/admin/include/plugins.class.php +++ b/admin/include/plugins.class.php @@ -264,6 +264,33 @@ DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"'; */ function get_server_plugins($new=false) { + // Retrieve PEM versions + $version = PHPWG_VERSION; + $versions_to_check = array(); + $url = PEM_URL . '/api/get_version_list.php?category_id=12&format=php'; + if ($source = @file_get_contents($url) + and $pem_versions = @unserialize($source)) + { + if (!preg_match('/^\d+\.\d+\.\d+/', $version)) + { + $version = $pem_versions[0]['name']; + } + $branch = substr($version, 0, strrpos($version, '.')); + foreach ($pem_versions as $pem_version) + { + if (strpos($pem_version['name'], $branch) === 0) + { + $versions_to_check[] = $pem_version['id']; + } + } + } + if (empty($versions_to_check)) + { + return false; + } + + // Plugins to check + $plugins_to_check = array(); foreach($this->fs_plugins as $fs_plugin) { if (isset($fs_plugin['extension'])) @@ -271,12 +298,23 @@ DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"'; $plugins_to_check[] = $fs_plugin['extension']; } } - $url = PEM_URL . '/uptodate.php?version=' . rawurlencode(PHPWG_VERSION) . '&extensions=' . implode(',', $plugins_to_check); - $url .= $new ? '&newext=Plugin' : ''; - if (!empty($plugins_to_check) and $source = @file_get_contents($url)) + // Retrieve PEM plugins infos + $url = PEM_URL . '/api/get_revision_list.php?category_id=12&format=php&last_revision_only=true'; + $url .= '&version=' . implode(',', $versions_to_check); + if (!empty($plugins_to_check)) + { + $url .= $new ? '&extension_exclude=' : '&extension_include='; + $url .= implode(',', $plugins_to_check); + } + if ($source = @file_get_contents($url) + and $pem_plugins = @unserialize($source)) { - $this->server_plugins = @unserialize($source); + foreach ($pem_plugins as $plugin) + { + $this->server_plugins[$plugin['extension_id']] = $plugin; + } + return true; } } @@ -306,13 +344,15 @@ DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"'; * Extract plugin files from archive * @param string - install or upgrade * @param string - archive URL - * @param string - destination path + * @param string - plugin id or extension id */ - function extract_plugin_files($action, $source, $dest) + function extract_plugin_files($action, $revision, $dest) { if ($archive = tempnam( PHPWG_PLUGINS_PATH, 'zip')) { - if (@copy(PEM_URL . str_replace(' ', '%20', $source), $archive)) + $url = PEM_URL . '/download.php?rid=' . $revision; + $url .= '&origin=piwigo_' . $action; + if (@copy($url, $archive)) { include(PHPWG_ROOT_PATH.'admin/include/pclzip.lib.php'); $zip = new PclZip($archive); @@ -333,7 +373,7 @@ DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"'; $root = dirname($main_filepath); // main.inc.php path in archive if ($action == 'upgrade') { - $extract_path = PHPWG_PLUGINS_PATH.$dest; + $extract_path = PHPWG_PLUGINS_PATH . $dest; } else { @@ -428,25 +468,25 @@ DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"'; $pattern = array('/([a-z])/ei', '/\.+/', '/\.\Z|\A\./'); $replacement = array( "'.'.intval('\\1', 36).'.'", '.', ''); - $array = preg_replace($pattern, $replacement, array($a['version'], $b['version'])); + $array = preg_replace($pattern, $replacement, array($a, $b)); return version_compare($array[0], $array[1], '>='); } function extension_revision_compare($a, $b) { - if ($a['date'] < $b['date']) return 1; + if ($a['revision_date'] < $b['revision_date']) return 1; else return -1; } function extension_name_compare($a, $b) { - return strcmp(strtolower($a['ext_name']), strtolower($b['ext_name'])); + return strcmp(strtolower($a['extension_name']), strtolower($b['extension_name'])); } function extension_author_compare($a, $b) { - $r = strcasecmp($a['author'], $b['author']); + $r = strcasecmp($a['author_name'], $b['author_name']); if ($r == 0) return $this->extension_name_compare($a, $b); else return $r; } diff --git a/admin/plugins_new.php b/admin/plugins_new.php index 19d2be9a4..e86dc0a16 100644 --- a/admin/plugins_new.php +++ b/admin/plugins_new.php @@ -36,10 +36,9 @@ $base_url = get_root_url().'admin.php?page='.$page['page'].'&order='.$order; $plugins = new plugins(); //------------------------------------------------------automatic installation -if (isset($_GET['install']) and isset($_GET['extension']) and !is_adviser()) +if (isset($_GET['revision']) and isset($_GET['extension']) and !is_adviser()) { - $install_status = - $plugins->extract_plugin_files('install', $_GET['install'], $_GET['extension']); + $install_status = $plugins->extract_plugin_files('install', $_GET['revision'], $_GET['extension']); redirect($base_url.'&installstatus='.$install_status); } @@ -90,44 +89,38 @@ $template->assign('order_selected', $link.$order); // +-----------------------------------------------------------------------+ // | start template output | // +-----------------------------------------------------------------------+ -$plugins->get_server_plugins(true); - -if (is_array($plugins->server_plugins)) +if ($plugins->get_server_plugins(true)) { $plugins->sort_server_plugins($order); foreach($plugins->server_plugins as $plugin) { - $ext_desc = nl2br(htmlspecialchars(strip_tags( - utf8_encode($plugin['ext_description'])))); + /* Need to remove this lines for final release : piwigo website will be utf8 only */ + $plugin['extension_description'] = utf8_encode($plugin['extension_description']); + $plugin['revision_description'] = utf8_encode($plugin['revision_description']); + + list($date, ) = explode(' ', $plugin['revision_date']); $ver_desc = sprintf(l10n('plugins_description'), - $plugin['version'], - date('Y-m-d', $plugin['date']), - nl2br(htmlspecialchars(strip_tags( - utf8_encode($plugin['description']))))); + $plugin['revision_name'], + $date, + $plugin['revision_description']); $url_auto_install = htmlentities($base_url) - . '&extension=' . $plugin['id_extension'] - . '&install=%2Fupload%2Fextension-' . $plugin['id_extension'] - . '%2Frevision-' . $plugin['id_revision'] . '%2F' - . str_replace(' ', '%20',$plugin['url']); - - $url_download = PEM_URL .'/upload/extension-'.$plugin['id_extension'] - . '/revision-' . $plugin['id_revision'] - . '/' . str_replace(' ', '%20',$plugin['url']); - - $template->append('plugins', - array('EXT_NAME' => $plugin['ext_name'], - 'EXT_URL' => PEM_URL.'/extension_view.php?eid='.$plugin['id_extension'], - 'EXT_DESC' => $ext_desc, - 'VERSION' => $plugin['version'], - 'VERSION_URL' => PEM_URL.'/revision_view.php?rid='.$plugin['id_revision'], - 'DATE' => date('Y-m-d', $plugin['date']), - 'VER_DESC' => $ver_desc, - 'AUTHOR' => $plugin['author'], - 'URL_INSTALL' => $url_auto_install, - 'URL_DOWNLOAD' => $url_download)); + . '&revision=' . $plugin['revision_id'] + . '&extension=' . $plugin['extension_id']; + + $template->append('plugins', array( + 'EXT_NAME' => $plugin['extension_name'], + 'EXT_URL' => PEM_URL.'/extension_view.php?eid='.$plugin['extension_id'], + 'EXT_DESC' => $plugin['extension_description'], + 'VERSION' => $plugin['revision_name'], + 'VERSION_URL' => PEM_URL.'/revision_view.php?rid='.$plugin['revision_id'], + 'DATE' => $date, + 'VER_DESC' => $ver_desc, + 'AUTHOR' => $plugin['author_name'], + 'URL_INSTALL' => $url_auto_install, + 'URL_DOWNLOAD' => $plugin['download_url'] . '&origin=piwigo_download')); } } else diff --git a/admin/plugins_update.php b/admin/plugins_update.php index 3c274b14f..944fd3b1a 100644 --- a/admin/plugins_update.php +++ b/admin/plugins_update.php @@ -35,9 +35,10 @@ $base_url = get_root_url().'admin.php?page='.$page['page']; $plugins = new plugins(); //-----------------------------------------------------------automatic upgrade -if (isset($_GET['upgrade']) and isset($_GET['plugin']) and !is_adviser()) +if (isset($_GET['plugin']) and isset($_GET['revision']) and !is_adviser()) { $plugin_id = $_GET['plugin']; + $revision = $_GET['revision']; if (isset($plugins->db_plugins_by_id[$plugin_id]) and $plugins->db_plugins_by_id[$plugin_id]['state'] == 'active') @@ -45,13 +46,12 @@ if (isset($_GET['upgrade']) and isset($_GET['plugin']) and !is_adviser()) $plugins->perform_action('deactivate', $plugin_id); redirect($base_url - . '&upgrade=' . $_GET['upgrade'] + . '&revision=' . $revision . '&plugin=' . $plugin_id . '&reactivate=true'); } - $upgrade_status = - $plugins->extract_plugin_files('upgrade', $_GET['upgrade'], $plugin_id); + $upgrade_status = $plugins->extract_plugin_files('upgrade', $revision, $plugin_id); if (isset($_GET['reactivate'])) { @@ -97,9 +97,7 @@ set_plugins_tabsheet($page['page']); // +-----------------------------------------------------------------------+ // | start template output | // +-----------------------------------------------------------------------+ -$plugins->get_server_plugins(); - -if (is_array($plugins->server_plugins)) +if ($plugins->get_server_plugins()) { foreach($plugins->fs_plugins as $plugin_id => $fs_plugin) { @@ -108,55 +106,51 @@ if (is_array($plugins->server_plugins)) { $plugin_info = $plugins->server_plugins[$fs_plugin['extension']]; - $ext_desc = nl2br(htmlspecialchars(strip_tags( - utf8_encode($plugin_info['ext_description'])))); + /* Need to remove this lines for final release : piwigo website will be utf8 only */ + $plugin_info['extension_description'] = utf8_encode($plugin_info['extension_description']); + $plugin_info['revision_description'] = utf8_encode($plugin_info['revision_description']); + + list($date, ) = explode(' ', $plugin_info['revision_date']); $ver_desc = sprintf(l10n('plugins_description'), - $plugin_info['version'], - date('Y-m-d', $plugin_info['date']), - nl2br(htmlspecialchars(strip_tags( - utf8_encode($plugin_info['description']))))); + $plugin_info['revision_name'], + $date, + $plugin_info['revision_description']); - if ($plugins->plugin_version_compare($fs_plugin, $plugin_info)) + if ($plugins->plugin_version_compare($fs_plugin['version'], $plugin_info['revision_name'])) { // Plugin is up to date - $template->append('plugins_uptodate', - array('URL' => $fs_plugin['uri'], - 'NAME' => $fs_plugin['name'], - 'EXT_DESC' => $ext_desc, - 'VERSION' => $fs_plugin['version'])); + $template->append('plugins_uptodate', array( + 'URL' => $fs_plugin['uri'], + 'NAME' => $fs_plugin['name'], + 'EXT_DESC' => $plugin_info['extension_description'], + 'VERSION' => $fs_plugin['version'])); } else { // Plugin need upgrade $url_auto_update = $base_url - . '&plugin=' . $plugin_id - . '&upgrade=%2Fupload%2Fextension-' . $fs_plugin['extension'] - . '%2Frevision-' . $plugin_info['id_revision'] - . '%2F' . str_replace(' ', '%20',$plugin_info['url']); - - $url_download = PEM_URL.'/upload/extension-'. $fs_plugin['extension'] - . '/revision-' . $plugin_info['id_revision'] - . '/' . str_replace(' ', '%20',$plugin_info['url']); - - $template->append('plugins_not_uptodate', - array('EXT_NAME' => $fs_plugin['name'], - 'EXT_URL' => $fs_plugin['uri'], - 'EXT_DESC' => $ext_desc, - 'VERSION' => $fs_plugin['version'], - 'VERSION_URL' => PEM_URL.'/revision_view.php?rid='.$plugin_info['id_revision'], - 'NEW_VERSION' => $plugin_info['version'], - 'NEW_VER_DESC' => $ver_desc, - 'URL_UPDATE' => $url_auto_update, - 'URL_DOWNLOAD' => $url_download)); + . '&revision=' . $plugin_info['revision_id'] + . '&plugin=' . $plugin_id; + + $template->append('plugins_not_uptodate', array( + 'EXT_NAME' => $fs_plugin['name'], + 'EXT_URL' => $fs_plugin['uri'], + 'EXT_DESC' => $plugin_info['extension_description'], + 'VERSION' => $fs_plugin['version'], + 'VERSION_URL' => PEM_URL.'/revision_view.php?rid='.$plugin_info['revision_id'], + 'NEW_VERSION' => $plugin_info['revision_name'], + 'NEW_VER_DESC' => $ver_desc, + 'URL_UPDATE' => $url_auto_update, + 'URL_DOWNLOAD' => $plugin_info['download_url'] . '&origin=piwigo_download')); } } else { // Can't check plugin - $template->append('plugins_cant_check', - array('NAME' => $fs_plugin['name'], - 'VERSION' => $fs_plugin['version'])); + $template->append('plugins_cant_check', array( + 'NAME' => $fs_plugin['name'], + 'VERSION' => $fs_plugin['version'])); } } } diff --git a/admin/template/goto/plugins_new.tpl b/admin/template/goto/plugins_new.tpl index 0d3f4e1ba..bd6339566 100644 --- a/admin/template/goto/plugins_new.tpl +++ b/admin/template/goto/plugins_new.tpl @@ -1,3 +1,4 @@ +{* $Id$ *} {known_script id="jquery" src=$ROOT_URL|@cat:"template-common/lib/jquery.packed.js"} {known_script id="jquery.dimensions" src=$ROOT_URL|@cat:"template-common/lib/plugins/jquery.dimensions.packed.js"} {known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"template-common/lib/plugins/jquery.cluetip.packed.js"} @@ -35,8 +36,8 @@ jQuery().ready(function(){ldelim} </thead> {foreach from=$plugins item=plugin name=plugins_loop} <tr class="{if $smarty.foreach.plugins_loop.index is odd}row1{else}row2{/if}"> - <td><a href="{$plugin.EXT_URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.EXT_NAME}|{$plugin.EXT_DESC}">{$plugin.EXT_NAME}</a></td> - <td style="text-align:center;"><a href="{$plugin.VERSION_URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.EXT_NAME}|{$plugin.VER_DESC}">{$plugin.VERSION}</a></td> + <td><a href="{$plugin.EXT_URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.EXT_NAME}|{$plugin.EXT_DESC|htmlspecialchars|nl2br}">{$plugin.EXT_NAME}</a></td> + <td style="text-align:center;"><a href="{$plugin.VERSION_URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.EXT_NAME}|{$plugin.VER_DESC|htmlspecialchars|nl2br}">{$plugin.VERSION}</a></td> <td>{$plugin.DATE}</td> <td>{$plugin.AUTHOR}</td> <td style="text-align:center;"><a href="{$plugin.URL_INSTALL}" onclick="return confirm('{'plugins_confirm_install'|@translate|@escape:javascript}');">{'plugins_auto_install'|@translate}</a> diff --git a/admin/template/goto/plugins_update.tpl b/admin/template/goto/plugins_update.tpl index c21e01e18..c7bdc2865 100644 --- a/admin/template/goto/plugins_update.tpl +++ b/admin/template/goto/plugins_update.tpl @@ -1,3 +1,4 @@ +{* $Id$ *} {known_script id="jquery" src=$ROOT_URL|@cat:"template-common/lib/jquery.packed.js"} {known_script id="jquery.dimensions" src=$ROOT_URL|@cat:"template-common/lib/plugins/jquery.dimensions.packed.js"} {known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"template-common/lib/plugins/jquery.cluetip.packed.js"} @@ -29,9 +30,9 @@ jQuery().ready(function(){ldelim} </thead> {foreach from=$plugins_not_uptodate item=plugin name=plugins_loop} <tr class="{if $smarty.foreach.plugins_loop.index is odd}row1{else}row2{/if}"> - <td><a href="{$plugin.EXT_URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.EXT_NAME}|{$plugin.EXT_DESC}">{$plugin.EXT_NAME}</a></td> + <td><a href="{$plugin.EXT_URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.EXT_NAME}|{$plugin.EXT_DESC|htmlspecialchars|nl2br}">{$plugin.EXT_NAME}</a></td> <td style="text-align:center;">{$plugin.VERSION}</td> - <td style="text-align:center;"><a href="{$plugin.VERSION_URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.EXT_NAME}|{$plugin.NEW_VER_DESC}">{$plugin.NEW_VERSION}</a></td> + <td style="text-align:center;"><a href="{$plugin.VERSION_URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.EXT_NAME}|{$plugin.NEW_VER_DESC|htmlspecialchars|nl2br}">{$plugin.NEW_VERSION}</a></td> <td style="text-align:center;"><a href="{$plugin.URL_UPDATE}" onclick="return confirm('{'plugins_confirm_upgrade'|@translate|@escape:javascript}');">{'plugins_auto_update'|@translate}</a> / <a href="{$plugin.URL_DOWNLOAD}">{'plugins_download'|@translate}</a></td> </tr> @@ -52,7 +53,7 @@ jQuery().ready(function(){ldelim} </thead> {foreach from=$plugins_uptodate item=plugin name=plugins_loop} <tr class="{if $smarty.foreach.plugins_loop.index is odd}row1{else}row2{/if}"> - <td><a href="{$plugin.URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.NAME}|{$plugin.EXT_DESC}">{$plugin.NAME}</a></td> + <td><a href="{$plugin.URL}" onclick="window.open(this.href); return false;" class="cluetip" title="{$plugin.NAME}|{$plugin.EXT_DESC|htmlspecialchars|nl2br}">{$plugin.NAME}</a></td> <td style="text-align:center;">{$plugin.VERSION}</td> </tr> {/foreach} diff --git a/admin/template/goto/theme/roma/themeconf.inc.php b/admin/template/goto/theme/roma/themeconf.inc.php index 556c685b3..27bfe7ec1 100644 --- a/admin/template/goto/theme/roma/themeconf.inc.php +++ b/admin/template/goto/theme/roma/themeconf.inc.php @@ -41,6 +41,8 @@ function selected_admin_menu() case 'maintenance': case 'advanced_feature': case 'plugins_list': + case 'plugins_update': + case 'plugins_new': case 'plugin': return 5; } diff --git a/include/constants.php b/include/constants.php index 4966c8b59..b921228f3 100644 --- a/include/constants.php +++ b/include/constants.php @@ -25,7 +25,7 @@ define('PHPWG_VERSION', 'Butterfly'); define('PHPWG_DOMAIN', 'phpwebgallery.net'); define('PHPWG_URL', 'http://www.'.PHPWG_DOMAIN); -define('PEM_URL', 'http://' . PHPWG_DOMAIN . '/ext'); +define('PEM_URL', 'http://' . PHPWG_DOMAIN . '/ext_new'); /* need to be changed on final release */ define('PHPWG_DEFAULT_LANGUAGE', 'en_UK'); define('PHPWG_DEFAULT_TEMPLATE', 'yoga/clear'); |