- 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
This commit is contained in:
parent
0287283e38
commit
e53eee8f16
7 changed files with 122 additions and 91 deletions
|
|
@ -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))
|
||||
{
|
||||
$this->server_plugins = @unserialize($source);
|
||||
$url .= $new ? '&extension_exclude=' : '&extension_include=';
|
||||
$url .= implode(',', $plugins_to_check);
|
||||
}
|
||||
if ($source = @file_get_contents($url)
|
||||
and $pem_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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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']);
|
||||
. '&revision=' . $plugin['revision_id']
|
||||
. '&extension=' . $plugin['extension_id'];
|
||||
|
||||
$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));
|
||||
$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
|
||||
|
|
|
|||
|
|
@ -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']);
|
||||
. '&revision=' . $plugin_info['revision_id']
|
||||
. '&plugin=' . $plugin_id;
|
||||
|
||||
$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));
|
||||
$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']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue