diff options
author | mistic100 <mistic@piwigo.org> | 2011-04-12 00:30:28 +0000 |
---|---|---|
committer | mistic100 <mistic@piwigo.org> | 2011-04-12 00:30:28 +0000 |
commit | f5c5a1b9b2c9fe711193ec6c3ac79fd06239a182 (patch) | |
tree | 5e9df0d6bdc814fb8ce272d05f81506dc289d000 /admin | |
parent | b5592c8228b2decb2e799b2550f83ac963c61e09 (diff) |
new plugins manager, update TipTip in v1.3
git-svn-id: http://piwigo.org/svn/trunk@10305 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r-- | admin/plugins_list.php | 47 | ||||
-rw-r--r-- | admin/themes/clear/theme.css | 12 | ||||
-rw-r--r-- | admin/themes/default/icon/help-min.png | bin | 0 -> 1191 bytes | |||
-rw-r--r-- | admin/themes/default/template/plugins_list.tpl | 244 | ||||
-rw-r--r-- | admin/themes/default/theme.css | 33 | ||||
-rw-r--r-- | admin/themes/roma/theme.css | 8 |
6 files changed, 261 insertions, 83 deletions
diff --git a/admin/plugins_list.php b/admin/plugins_list.php index 4ec64ec29..3f38356b5 100644 --- a/admin/plugins_list.php +++ b/admin/plugins_list.php @@ -30,8 +30,13 @@ include_once(PHPWG_ROOT_PATH.'admin/include/plugins.class.php'); $template->set_filenames(array('plugins' => 'plugins_list.tpl')); -$base_url = get_root_url().'admin.php?page='.$page['page']; -$action_url = $base_url.'&plugin='.'%s'.'&pwg_token='.get_pwg_token(); +// TODO : use a session parameter +$plugin_order = isset($_GET['plugin_order']) ? $_GET['plugin_order'] : 'state'; +$plugin_display = isset($_GET['plugin_display']) ? $_GET['plugin_display'] : 'compact'; + +$base_url = get_root_url().'admin.php?page='.$page['page'].'&plugin_order='.$plugin_order.'&plugin_display='.$plugin_display; +$pwg_token = get_pwg_token(); +$action_url = $base_url.'&plugin='.'%s'.'&pwg_token='.$pwg_token; $plugins = new plugins(); @@ -70,6 +75,7 @@ $plugins->sort_fs_plugins('name'); $plugins->get_merged_extensions(); $plugins->get_incompatible_plugins(); $merged_plugins = false; +$tpl_plugins = array(); foreach($plugins->fs_plugins as $plugin_id => $fs_plugin) { @@ -81,6 +87,7 @@ foreach($plugins->fs_plugins as $plugin_id => $fs_plugin) } $tpl_plugin = array( + 'ID' => $plugin_id, 'NAME' => $fs_plugin['name'], 'VISIT_URL' => $fs_plugin['uri'], 'VERSION' => $fs_plugin['version'], @@ -108,7 +115,7 @@ foreach($plugins->fs_plugins as $plugin_id => $fs_plugin) $merged_plugins = true; } - $template->append('plugins', $tpl_plugin); + array_push($tpl_plugins, $tpl_plugin); } $template->append('plugin_states', 'active'); @@ -128,8 +135,8 @@ if (count($missing_plugin_ids) > 0) { foreach($missing_plugin_ids as $plugin_id) { - $template->append( - 'plugins', + array_push( + $tpl_plugins, array( 'NAME' => $plugin_id, 'VERSION' => $plugins->db_plugins_by_id[$plugin_id]['version'], @@ -142,5 +149,35 @@ if (count($missing_plugin_ids) > 0) $template->append('plugin_states', 'missing'); } +// sort plugins : state or name +if ($plugin_order == 'name') +{ + function cmp($a, $b) + { + return strcasecmp($a['NAME'], $b['NAME']); + } +} +else +{ + function cmp($a, $b) + { + $s = array('merged' => 0, 'missing' => 1, 'active' => 2, 'inactive' => 3); + + if($a['STATE'] == $b['STATE']) + return strcasecmp($a['NAME'], $b['NAME']); + else + return $s[$a['STATE']] >= $s[$b['STATE']]; + } + $plugin_order = 'state'; +} + +usort($tpl_plugins, 'cmp'); +$template->assign(array( + 'plugin_order' => $plugin_order, + 'plugin_display' => $plugin_display, + 'plugins' => $tpl_plugins, + 'PWG_TOKEN' => $pwg_token, +)); + $template->assign_var_from_handle('ADMIN_CONTENT', 'plugins'); ?>
\ No newline at end of file diff --git a/admin/themes/clear/theme.css b/admin/themes/clear/theme.css index f1060b7d3..8a8f7ccc2 100644 --- a/admin/themes/clear/theme.css +++ b/admin/themes/clear/theme.css @@ -255,16 +255,18 @@ display:block; height:85px; left:225px; position:relative; top:-42px; width:313p #pwgHead A:hover, #footer A:hover {color:black; border-color:black;} #footer { background-image: url(images/piwigo_logo_small.png);} -.pluginBox {background-color:#ddd;color:#333} -.pluginBoxNameCell {font-weight:bold;} +.pluginBox, .pluginMiniBox {background-color:#ddd;color:#353535;border:1px solid #ddd;} +.pluginBoxNameCell, .pluginMiniBoxNameCell {color:#111;} +.pluginBox.active, .pluginMiniBox.active {border-color:#666;background-color:#dadada;} +.pluginBox.incompatible, .pluginMiniBox.incompatible {border-color:#a00 !important;} +.pluginBox.missing, .pluginBox.merged, .pluginMiniBox.missing, .pluginMiniBox.merged {background-color:#d99;border:1px solid #a00;} +.plugin-delete {color:#f00;} .languageBox {background-color:#ddd;} .languageName {color:black;} .languageDefault {background-color:#dbe8f3;} -UL.thumbnails li.rank-of-image { - background-color: #ddd; -} +UL.thumbnails li.rank-of-image {background-color: #ddd;} #batchManagerGlobal ul.thumbnails span.wrap2 {background-color:#ddd;} #batchManagerGlobal .thumbSelected {background-color:#C2F5C2 !important} diff --git a/admin/themes/default/icon/help-min.png b/admin/themes/default/icon/help-min.png Binary files differnew file mode 100644 index 000000000..9a825692f --- /dev/null +++ b/admin/themes/default/icon/help-min.png diff --git a/admin/themes/default/template/plugins_list.tpl b/admin/themes/default/template/plugins_list.tpl index 101227231..39b1725bd 100644 --- a/admin/themes/default/template/plugins_list.tpl +++ b/admin/themes/default/template/plugins_list.tpl @@ -1,92 +1,218 @@ -{footer_script} +{combine_script id='jquery.ajaxmanager' load='footer' require='jquery' path='themes/default/js/plugins/jquery.ajaxmanager.js' } + +{footer_script require='jquery.ajaxmanager'} +/* incompatible message */ var incompatible_msg = '{'WARNING! This plugin does not seem to be compatible with this version of Piwigo.'|@translate|@escape:'javascript'}'; incompatible_msg += '\n'; incompatible_msg += '{'Do you want to activate anyway?'|@translate|@escape:'javascript'}'; +/* group action */ +var pwg_token = '{$PWG_TOKEN}'; +var confirmMsg = '{'Are you sure?'|@translate|@escape:'javascript'}'; {literal} +var queuedManager = jQuery.manageAjax.create('queued', { + queue: true, + maxRequests: 1, + complete: function() { location.reload(); } +}); + jQuery(document).ready(function() { - jQuery('.incompatible').click(function() { + /* group action */ + jQuery('a.deactivate_all').click(function() { + if (confirm(confirmMsg)) { + jQuery('div.active').each(function() { + performPluginAction(jQuery(this).attr('id'), 'deactivate'); + }); + } + }); + jQuery('a.activate_all').click(function() { + if (confirm(confirmMsg)) { + jQuery('div.inactive').each(function() { + performPluginAction(jQuery(this).attr('id'), 'activate'); + }); + } + }); + function performPluginAction(id, action) { + queuedManager.add({ + type: 'GET', + dataType: 'json', + url: 'ws.php', + data: { method: 'pwg.plugins.performAction', action: action, plugin: id, pwg_token: pwg_token, format: 'json' }, + success: function(data) { + if (data['stat'] == 'ok') { + if (action == 'deactivate') + jQuery("#"+id).removeClass('active').addClass('inactive'); + else + jQuery("#"+id).removeClass('inactive').addClass('active'); + } + } + }); + }; + + /* incompatible message */ + jQuery('.incompatible a.incompatible').click(function() { return confirm(incompatible_msg); }); + + /* TipTips */ jQuery('.warning').tipTip({ 'delay' : 0, 'fadeIn' : 200, - 'fadeOut' : 200 + 'fadeOut' : 200, + 'maxWidth':'250px' + }).click(function(){ + return false; + }); + jQuery('.pluginMiniBoxDesc').tipTip({ + 'delay' : 0, + 'fadeIn' : 200, + 'fadeOut' : 200, + 'maxWidth':'300px', /* not effective, TipTip bug */ + 'keepAlive':true + }).click(function(){ + return false; }); }); -{/literal}{/footer_script} +{/literal} +{/footer_script} <div class="titrePage"> + <span class="sort"> + <form action="" method="get" name="change_order"> + <input type="hidden" name="page" value="plugins_list"/> + {'Sort order'|@translate} : + <select name="plugin_order" onchange="this.form.submit();"> + <option value="status" {if $plugin_order=='state'}selected="selected"{/if}>{'Status'|@translate}</option> + <option value="name" {if $plugin_order=='name'}selected="selected"{/if}>{'Name'|@translate}</option> + </select> + | + {'Display'|@translate} : + <select name="plugin_display" onchange="this.form.submit();"> + <option value="compact" {if $plugin_diplay=='compact'}selected="selected"{/if}>{'Compact'|@translate}</option> + <option value="complete" {if $plugin_display=='complete'}selected="selected"{/if}>{'Complete'|@translate}</option> + </select> + | + <a class="deactivate_all">{'Deactivate'|@translate} {'all'|@translate}</a> + {* | + <a class="activate_all">{'Activate'|@translate} {'all'|@translate}</a> *} + </form> + </span> <h2>{'Plugins'|@translate}</h2> </div> {if isset($plugins)} -{foreach from=$plugin_states item=plugin_state} -<fieldset> - <legend> - {if $plugin_state == 'active'} - {'Active Plugins'|@translate} - - {elseif $plugin_state == 'inactive'} - {'Inactive Plugins'|@translate} +{assign var='field_name' value='null'} +{foreach from=$plugins item=plugin name=plugins_loop} + +{if $plugin_order == 'state' AND $field_name != $plugin.STATE} + {if $field_name != 'null'}</fieldset>{/if} + <fieldset class="pluginBoxes pluginsByState"> + <legend> + {if $plugin.STATE == 'active'} + {'Active Plugins'|@translate} + {elseif $plugin.STATE == 'inactive'} + {'Inactive Plugins'|@translate} + {elseif $plugin.STATE == 'missing'} + {'Missing Plugins'|@translate} + {elseif $plugin.STATE == 'merged'} + {'Obsolete Plugins'|@translate} + {/if} + </legend> + {assign var='field_name' value=$plugin.STATE} - {elseif $plugin_state == 'missing'} - {'Missing Plugins'|@translate} +{elseif $field_name == 'null'} + <fieldset class="pluginBoxes pluginsByName"> + {assign var='field_name' value='not_null'} - {elseif $plugin_state == 'merged'} - {'Obsolete Plugins'|@translate} +{/if} + {if not empty($plugin.AUTHOR)} + {if not empty($plugin.AUTHOR_URL)} + {assign var='author' value="<a href='%s'>%s</a>"|@sprintf:$plugin.AUTHOR_URL:$plugin.AUTHOR} + {else} + {assign var='author' value='<u>'|cat:$plugin.AUTHOR|cat:'</u>'} + {/if} {/if} - </legend> - {foreach from=$plugins item=plugin name=plugins_loop} - {if $plugin.STATE == $plugin_state} - <div class="pluginBox"> - <table> - <tr> - <td class="pluginBoxNameCell{if $plugin.INCOMPATIBLE} warning" title="{'WARNING! This plugin does not seem to be compatible with this version of Piwigo.'|@translate|@escape:'html'}{/if}"> - {$plugin.NAME} - </td> - <td>{$plugin.DESC}</td> - </tr> - <tr> - <td> - {if $plugin.STATE == 'active'} - <a href="{$plugin.U_ACTION}&action=deactivate">{'Deactivate'|@translate}</a> - | <a href="{$plugin.U_ACTION}&action=restore" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Restore'|@translate}</a> + + {if $plugin_display == 'complete'} + <div id="{$plugin.ID}" class="pluginBox {$plugin.STATE}{if $plugin.INCOMPATIBLE} incompatible{/if}"> + <table> + <tr> + <td class="pluginBoxNameCell"> + {if $plugin.INCOMPATIBLE}<a class="warning" title="{'WARNING! This plugin does not seem to be compatible with this version of Piwigo.'|@translate|@escape:'html'}"></a>{/if} + {$plugin.NAME} + </td> + <td>{$plugin.DESC}</td> + </tr> + <tr> + <td> + {if $plugin.STATE == 'active'} + <a href="{$plugin.U_ACTION}&action=deactivate">{'Deactivate'|@translate}</a> + | <a href="{$plugin.U_ACTION}&action=restore" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Restore'|@translate}</a> - {elseif $plugin_state == 'inactive'} - <a href="{$plugin.U_ACTION}&action=activate" {if $plugin.INCOMPATIBLE}class="incompatible"{/if}>{'Activate'|@translate}</a> - | <a href="{$plugin.U_ACTION}&action=delete" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Delete'|@translate}</a> + {elseif $plugin.STATE == 'inactive'} + <a href="{$plugin.U_ACTION}&action=activate" {if $plugin.INCOMPATIBLE}class="incompatible"{/if}>{'Activate'|@translate}</a> + | <a href="{$plugin.U_ACTION}&action=delete" class="plugin-delete" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Delete'|@translate}</a> - {elseif $plugin_state == 'missing'} - <a href="{$plugin.U_ACTION}&action=uninstall" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Uninstall'|@translate}</a> + {elseif $plugin.STATE == 'missing'} + <a href="{$plugin.U_ACTION}&action=uninstall" class="plugin-delete" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Uninstall'|@translate}</a> - {elseif $plugin_state == 'merged'} - <a href="{$plugin.U_ACTION}&action=delete">{'Delete'|@translate}</a> - {/if} - </td> - <td> - {'Version'|@translate} {$plugin.VERSION} - {if not empty($plugin.AUTHOR)} - {if not empty($plugin.AUTHOR_URL)} - {assign var='author' value='<a href="%s">%s</a>'|@sprintf:$plugin.AUTHOR_URL:$plugin.AUTHOR} - {else} - {assign var='author' value=$plugin.AUTHOR} - {/if} - | {'By %s'|@translate|@sprintf:$author} - {/if} + {elseif $plugin.STATE == 'merged'} + <a href="{$plugin.U_ACTION}&action=delete" class="plugin-delete">{'Delete'|@translate}</a> + {/if} + </td> + <td> + {'Version'|@translate} {$plugin.VERSION} + + {if not empty($author)} + | {'By %s'|@translate|@sprintf:$author} + {/if} + {if not empty($plugin.VISIT_URL)} + | <a class="externalLink" href="{$plugin.VISIT_URL}">{'Visit plugin site'|@translate}</a> + {/if} + </td> + </tr> + </table> + </div> {*<!-- pluginBox -->*} + + {elseif $plugin_display == 'compact'} {if not empty($plugin.VISIT_URL)} - | <a class="externalLink" href="{$plugin.VISIT_URL}">{'Visit plugin site'|@translate}</a> - {/if} - </td> - </tr> - </table> - </div> + {assign var='version' value="<a class='externalLink' href='"|cat:$plugin.VISIT_URL|cat:"'>"|cat:$plugin.VERSION|cat:"</a>"} + {else + {assign var='version' value=$plugin.VERSION} {/if} - {/foreach} -</fieldset> + + <div id="{$plugin.ID}" class="pluginMiniBox {$plugin.STATE}{if $plugin.INCOMPATIBLE} incompatible{/if}"> + <div class="pluginMiniBoxNameCell"> + {if $plugin.INCOMPATIBLE}<a class="warning" title="{'WARNING! This plugin does not seem to be compatible with this version of Piwigo.'|@translate|@escape:'html'}"></a>{/if} + {$plugin.NAME} + <a class="pluginMiniBoxDesc" title="{if !empty($author)}{'By %s'|@translate|@sprintf:$author} | {/if}{'Version'|@translate} {$version}<br/>{$plugin.DESC|@escape:'html'}"></a> + </div> + <div class="pluginActions"> + <div> + {if $plugin.STATE == 'active'} + <a href="{$plugin.U_ACTION}&action=deactivate">{'Deactivate'|@translate}</a> + | <a href="{$plugin.U_ACTION}&action=restore" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Restore'|@translate}</a> + + {elseif $plugin.STATE == 'inactive'} + <a href="{$plugin.U_ACTION}&action=activate" {if $plugin.INCOMPATIBLE}class="incompatible"{/if}>{'Activate'|@translate}</a> + | <a href="{$plugin.U_ACTION}&action=delete" class="plugin-delete"onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Delete'|@translate}</a> + + {elseif $plugin.STATE == 'missing'} + <a href="{$plugin.U_ACTION}&action=uninstall" class="plugin-delete" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">{'Uninstall'|@translate}</a> + + {elseif $plugin.STATE == 'merged'} + <a href="{$plugin.U_ACTION}&action=delete" class="plugin-delete">{'Delete'|@translate}</a> + {/if} + </div> + </div> + </div> {*<!-- pluginMiniBox -->*} + + {/if} + {/foreach} + </fieldset> {/if} diff --git a/admin/themes/default/theme.css b/admin/themes/default/theme.css index bb645c256..fc093c009 100644 --- a/admin/themes/default/theme.css +++ b/admin/themes/default/theme.css @@ -927,13 +927,28 @@ h2:lang(en) { text-transform:capitalize; } .checkActions {text-align:left;padding:0;margin:0;} .comment A:hover {border:none;} +.pluginBoxes {text-align:left;} +.author-group {text-align:left;background:url('icon/remove_filter.png') left center no-repeat;padding-left:15px;margin-left:-15px;} + .pluginBox {margin-bottom:10px;-moz-border-radius:5px;} -.pluginBox table {width:99%} +.pluginBox table {width:99%;} .pluginBox td {text-align:left;} -.pluginBox td.pluginDesc {cursor:pointer;} -.pluginBox td.pluginDesc img{vertical-align:middle;} -.pluginBox td em{float:right;} -.pluginBoxNameCell {width:150px; vertical-align:top;} +.pluginBox td.pluginDesc img {vertical-align:middle;} +.pluginBoxNameCell {width:180px; vertical-align:top;} +.pluginBox.inactive, .pluginBox.uninstalled {margin-left:20px;opacity:0.65;filter:alpha(opacity=65);} +.pluginsByState .pluginBox.inactive, .pluginsByState .pluginBox.uninstalled {margin-left:0px;opacity:0.8;filter:alpha(opacity=80);} + +.pluginMiniBox {display:inline-table; text-align:center; width:250px; height:40px; margin:5px; -moz-border-radius:5px; overflow:hidden; } +.pluginMiniBoxNameCell {font-size:1.05em; margin:5px 0;} +.pluginActions {display: table-row; font-size:12px; } +.pluginActions DIV {display: table-cell; vertical-align: middle; line-height:18px; } +.pluginMiniBox.inactive, .pluginMiniBox.uninstalled {opacity:0.65;filter:alpha(opacity=65);} +.pluginsByState .pluginMiniBox.inactive, .pluginsByState .pluginMiniBox.uninstalled {opacity:0.8;filter:alpha(opacity=80);} + +.pluginMiniBoxDesc{float:right;margin:0 4px 0 -20px;} +.pluginMiniBoxDesc:after{content:url(icon/help-min.png);} +.warning:before {content:url(icon/warning.png);vertical-align:top;} +fieldset.pluginsByName{border:none;} .languageBoxes {min-height:0;text-align:left;} .languageBox {display:inline-table; text-align:center; width:200px; height:40px; margin:5px; -moz-border-radius:5px; overflow:hidden; } @@ -1042,10 +1057,4 @@ LEGEND { #batchManagerGlobal a.removeFilter:hover {background: url(icon/remove_filter_hover.png); border:none;} #batchManagerGlobal .removeFilter span {display:none} #batchManagerGlobal #applyFilterBlock {margin-top:20px;} -#batchManagerGlobal .useFilterCheckbox {display:none} - -.warning { - background:url(icon/warning.png) no-repeat top left; - width: 130px; - padding-left: 20px; -} +#batchManagerGlobal .useFilterCheckbox {display:none}
\ No newline at end of file diff --git a/admin/themes/roma/theme.css b/admin/themes/roma/theme.css index 8830f5a12..b32c49cb9 100644 --- a/admin/themes/roma/theme.css +++ b/admin/themes/roma/theme.css @@ -234,8 +234,12 @@ display:block; height:85px; left:225px; position:relative; top:-42px; width:313p #pwgHead, #footer {background-color:#222;} #footer {background-image: url(images/piwigo_logo_small.png);} -.pluginBox {background-color:#333;color:#999} -.pluginBoxNameCell {color:#ccc;} +.pluginBox, .pluginMiniBox {background-color:#333;color:#999;border:1px solid #333;} +.pluginBoxNameCell, .pluginMiniBoxNameCell {color:#ddd;} +.pluginBox.active, .pluginMiniBox.active {border-color:#666;background-color:#383838;} +.pluginBox.incompatible, .pluginMiniBox.incompatible {border-color:#800 !important;} +.pluginBox.missing, .pluginBox.merged, .pluginMiniBox.missing, .pluginMiniBox.merged {background-color:#422;border:1px solid #800;} +.plugin-delete {color:#f00;} .languageBox {background-color:#333;} .languageName {color:#ccc;} |