Dotclear


Ignore:
Timestamp:
09/30/13 21:16:20 (12 years ago)
Author:
Denis Jean-Chirstian <contact@…>
Branch:
dcRepo
Parents:
2174:6ed25e45a14e (diff), 2173:94520262a1b8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge from default

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • admin/plugins.php

    r2166 r2175  
    1313require dirname(__FILE__).'/../inc/admin/prepend.php'; 
    1414 
    15 dcPage::checkSuper(); 
    16  
    17 $default_tab = !empty($_REQUEST['tab']) ? html::escapeHTML($_REQUEST['tab']) : 'plugins'; 
    18  
    19 $p_paths = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT); 
    20 $p_path = array_pop($p_paths); 
    21 unset($p_paths); 
    22  
    23 $is_writable = false; 
    24 if (is_dir($p_path) && is_writeable($p_path)) { 
    25      $is_writable = true; 
    26      $p_path_pat = preg_quote($p_path,'!'); 
    27 } 
    28  
    29 $plugin_id = !empty($_POST['plugin_id']) ? $_POST['plugin_id'] : null; 
    30  
    31 if ($is_writable) 
    32 { 
    33      # Delete plugin 
    34      if ($plugin_id && !empty($_POST['delete'])) 
    35      { 
    36           try 
    37           { 
    38                if (empty($_POST['deactivated'])) 
    39                { 
    40                     if (!$core->plugins->moduleExists($plugin_id)) { 
    41                          throw new Exception(__('No such plugin.')); 
    42                     } 
    43                      
    44                     $plugin = $core->plugins->getModules($plugin_id); 
    45                     $plugin['id'] = $plugin_id; 
    46                      
    47                     if (!preg_match('!^'.$p_path_pat.'!', $plugin['root'])) { 
    48                          throw new Exception(__('You don\'t have permissions to delete this plugin.')); 
    49                     } 
    50                      
    51                     # --BEHAVIOR-- pluginBeforeDelete 
    52                     $core->callBehavior('pluginsBeforeDelete', $plugin); 
    53                      
    54                     $core->plugins->deleteModule($plugin_id); 
    55                      
    56                     # --BEHAVIOR-- pluginAfterDelete 
    57                     $core->callBehavior('pluginsAfterDelete', $plugin); 
    58                } 
    59                else 
    60                { 
    61                     $core->plugins->deleteModule($plugin_id,true); 
    62                } 
    63                 
    64                http::redirect('plugins.php?removed=1'); 
     15dcPage::check('admin'); 
     16 
     17# -------------------------------------------------- 
     18# @todo Add settings to Dotclear update features 
     19if ($core->blog->settings->system->plugins_allow_multi_install === null) { 
     20     $core->blog->settings->system->put( 
     21          'plugins_allow_multi_install', false, 'boolean', 'Allow multi-installation for plugins', true, true 
     22     ); 
     23} 
     24if ($core->blog->settings->system->repository_plugin_url === null) { 
     25     $core->blog->settings->system->put( 
     26          'repository_plugin_url', 'http://update.dotaddict.org/dc2/plugins.xml', 'string', 'Plugins XML feed location', true, true 
     27     ); 
     28} 
     29# -------------------------------------------------- 
     30 
     31# -- Repository helper -- 
     32$repository = new dcRepository( 
     33     $core->plugins,  
     34     $core->blog->settings->system->repository_plugin_url 
     35); 
     36$repository->check(); 
     37 
     38# -- Page helper -- 
     39$list = new adminModulesList( 
     40     $core,  
     41     DC_PLUGINS_ROOT, 
     42     $core->blog->settings->system->plugins_allow_multi_install 
     43); 
     44 
     45$list::setDistributedModules(array( 
     46     'aboutConfig', 
     47     'akismet', 
     48     'antispam', 
     49     'attachments', 
     50     'blogroll', 
     51     'blowupConfig', 
     52     'daInstaller', 
     53     'fairTrackbacks', 
     54     'importExport', 
     55     'maintenance', 
     56     'pages', 
     57     'pings', 
     58     'simpleMenu', 
     59     'tags', 
     60     'themeEditor', 
     61     'userPref', 
     62     'widgets' 
     63)); 
     64 
     65# -- Check for module configuration -- 
     66$conf_file = false; 
     67if (!empty($_REQUEST['conf']) && !empty($_REQUEST['module'])) { 
     68     if (!$core->plugins->moduleExists($_REQUEST['module'])) { 
     69          $core->error->add(__('Unknow module ID')); 
     70     } 
     71     else { 
     72          $module = $core->plugins->getModules($_REQUEST['module']); 
     73          $module = adminModulesList::parseModuleInfo($_REQUEST['module'], $module); 
     74 
     75          if (!file_exists(path::real($module['root'].'/_config.php'))) { 
     76               $core->error->add(__('This module has no configuration file.')); 
    6577          } 
    66           catch (Exception $e) 
    67           { 
    68                $core->error->add($e->getMessage()); 
     78          else { 
     79               $conf_file = path::real($module['root'].'/_config.php'); 
    6980          } 
    7081     } 
    71      # Deactivate plugin 
    72      elseif ($plugin_id && !empty($_POST['deactivate'])) 
    73      { 
    74           try 
    75           { 
    76                if (!$core->plugins->moduleExists($plugin_id)) { 
    77                     throw new Exception(__('No such plugin.')); 
    78                } 
    79                 
    80                $plugin = $core->plugins->getModules($plugin_id); 
    81                $plugin['id'] = $plugin_id; 
    82                 
    83                if (!$plugin['root_writable']) { 
    84                     throw new Exception(__('You don\'t have permissions to deactivate this plugin.')); 
    85                } 
    86                 
    87                # --BEHAVIOR-- pluginBeforeDeactivate 
    88                $core->callBehavior('pluginsBeforeDeactivate', $plugin); 
    89                      
    90                $core->plugins->deactivateModule($plugin_id); 
    91  
    92                # --BEHAVIOR-- pluginAfterDeactivate 
    93                $core->callBehavior('pluginsAfterDeactivate', $plugin); 
    94                      
    95                http::redirect('plugins.php'); 
     82} 
     83 
     84# -- Display module configuration page -- 
     85if ($conf_file) { 
     86     dcPage::open(__('Plugins management'), 
     87 
     88          # --BEHAVIOR-- pluginsToolsHeaders 
     89          $core->callBehavior('pluginsToolsHeaders', $core, $module['id']), 
     90 
     91          dcPage::breadcrumb( 
     92               array( 
     93                    html::escapeHTML($core->blog->name) => '', 
     94                    '<a href="'.$list->getPageURL().'">'.__('Plugins management').'</a>' => '', 
     95                    '<span class="page-title">'.__('Plugin configuration').'</span>' => '' 
     96               )) 
     97     ); 
     98 
     99     if (!empty($_GET['done'])){ 
     100          dcPage::success(__('Plugin successfully configured.')); 
     101     } 
     102 
     103     try { 
     104          if (!$module['standalone_config']) { 
     105               echo 
     106               '<form id="module_config" action="'.$list->getPageURL('conf=1').'" method="post" enctype="multipart/form-data">'. 
     107               '<h3>'.sprintf(__('Configure plugin "%s"'), html::escapeHTML($module['name'])).'</h3>'. 
     108               '<p><a class="back" href="'.$list->getPageURL().'#plugins">'.__('Back').'</a></p>'; 
    96109          } 
    97           catch (Exception $e) 
    98           { 
    99                $core->error->add($e->getMessage()); 
     110          define('DC_CONTEXT_PLUGIN', true); 
     111 
     112          include $conf_file; 
     113 
     114          if (!$module['standalone_config']) { 
     115               echo 
     116               '<p class="clear"><input type="submit" name="save" value="'.__('Save').'" />'. 
     117               form::hidden('module', $module['id']). 
     118               $core->formNonce().'</p>'. 
     119               '</form>'; 
    100120          } 
    101121     } 
    102      # Activate plugin 
    103      elseif ($plugin_id && !empty($_POST['activate'])) 
    104      { 
    105           try 
    106           { 
    107                $p = $core->plugins->getDisabledModules(); 
    108                if (!isset($p[$plugin_id])) { 
    109                     throw new Exception(__('No such plugin.')); 
    110                } 
    111  
    112                # --BEHAVIOR-- pluginBeforeActivate 
    113                $core->callBehavior('pluginsBeforeActivate', $plugin_id); 
    114                 
    115                $core->plugins->activateModule($plugin_id); 
    116  
    117                # --BEHAVIOR-- pluginAfterActivate 
    118                $core->callBehavior('pluginsAfterActivate', $plugin_id); 
    119                 
    120                http::redirect('plugins.php'); 
    121           } 
    122           catch (Exception $e) 
    123           { 
    124                $core->error->add($e->getMessage()); 
    125           } 
    126      } 
    127      # Plugin upload 
    128      elseif ((!empty($_POST['upload_pkg']) && !empty($_FILES['pkg_file'])) || 
    129           (!empty($_POST['fetch_pkg']) && !empty($_POST['pkg_url']))) 
    130      { 
    131           try 
    132           { 
    133                if (empty($_POST['your_pwd']) || !$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['your_pwd']))) { 
    134                     throw new Exception(__('Password verification failed')); 
    135                } 
    136                 
    137                if (!empty($_POST['upload_pkg'])) 
    138                { 
    139                     files::uploadStatus($_FILES['pkg_file']); 
    140                      
    141                     $dest = $p_path.'/'.$_FILES['pkg_file']['name']; 
    142                     if (!move_uploaded_file($_FILES['pkg_file']['tmp_name'],$dest)) { 
    143                          throw new Exception(__('Unable to move uploaded file.')); 
    144                     } 
    145                } 
    146                else 
    147                { 
    148                     $url = urldecode($_POST['pkg_url']); 
    149                     $dest = $p_path.'/'.basename($url); 
    150                      
    151                     try 
    152                     { 
    153                          $client = netHttp::initClient($url,$path); 
    154                          $client->setUserAgent('Dotclear - http://www.dotclear.org/'); 
    155                          $client->useGzip(false); 
    156                          $client->setPersistReferers(false); 
    157                          $client->setOutput($dest); 
    158                          $client->get($path); 
    159                     } 
    160                     catch( Exception $e) 
    161                     { 
    162                          throw new Exception(__('An error occurred while downloading the file.')); 
    163                     } 
    164                      
    165                     unset($client); 
    166                } 
    167  
    168                # --BEHAVIOR-- pluginBeforeAdd 
    169                $core->callBehavior('pluginsBeforeAdd', $plugin_id); 
    170                                
    171                $ret_code = $core->plugins->installPackage($dest,$core->plugins); 
    172  
    173                # --BEHAVIOR-- pluginAfterAdd 
    174                $core->callBehavior('pluginsAfterAdd', $plugin_id); 
    175                 
    176                http::redirect('plugins.php?added='.$ret_code); 
    177           } 
    178           catch (Exception $e) 
    179           { 
    180                $core->error->add($e->getMessage()); 
    181                $default_tab = 'addplugin'; 
    182           } 
    183      } 
    184 } 
    185  
    186 # Plugin install 
    187 $plugins_install = $core->plugins->installModules(); 
    188  
    189 /* DISPLAY Main page 
    190 -------------------------------------------------------- */ 
     122     catch (Exception $e) { 
     123          echo '<div class="error"><p>'.$e->getMessage().'</p></div>'; 
     124     } 
     125 
     126     dcPage::close(); 
     127 
     128     # Stop reading code here 
     129     return; 
     130} 
     131 
     132# -- Execute actions -- 
     133if (!empty($_POST) && empty($_REQUEST['conf']) && $core->auth->isSuperAdmin() && $list->isPathWritable()) { 
     134     try { 
     135          $list->executeAction('plugins', $core->plugins, $repository); 
     136     } 
     137     catch (Exception $e) { 
     138          $core->error->add($e->getMessage()); 
     139     } 
     140} 
     141 
     142# -- Plugin install -- 
     143$plugins_install = null; 
     144if (!$core->error->flag()) { 
     145     $plugins_install = $core->plugins->installModules(); 
     146} 
     147 
     148# -- Page header -- 
    191149dcPage::open(__('Plugins management'), 
    192150     dcPage::jsLoad('js/_plugins.js'). 
    193      dcPage::jsPageTabs($default_tab), 
     151     dcPage::jsPageTabs(). 
     152 
     153     # --BEHAVIOR-- pluginsToolsHeaders 
     154     $core->callBehavior('pluginsToolsHeaders', $core, false), 
     155 
    194156     dcPage::breadcrumb( 
    195157          array( 
     
    199161); 
    200162 
    201 if (!empty($_GET['removed'])) { 
    202      dcPage::success(__('Plugin has been successfully deleted.')); 
    203 } 
    204 if (!empty($_GET['added'])) { 
    205      dcPage::success(($_GET['added'] == 2 ? __('Plugin has been successfully upgraded') : __('Plugin has been successfully installed.'))); 
    206 } 
    207  
    208 # Plugins install messages 
    209 if (!empty($plugins_install['success'])) 
    210 { 
    211      echo '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>'; 
     163# -- Succes messages -- 
     164if (!empty($_GET['msg'])) { 
     165     $list->displayMessage($_GET['msg']); 
     166} 
     167 
     168# -- Plugins install messages -- 
     169if (!empty($plugins_install['success'])) { 
     170     echo  
     171     '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>'; 
    212172     foreach ($plugins_install['success'] as $k => $v) { 
    213           echo '<li>'.$k.'</li>'; 
    214      } 
    215      echo '</ul></div>'; 
    216 } 
    217 if (!empty($plugins_install['failure'])) 
    218 { 
    219      echo '<div class="error">'.__('Following plugins have not been installed:').'<ul>'; 
     173          echo  
     174          '<li>'.$k.'</li>'; 
     175     } 
     176     echo  
     177     '</ul></div>'; 
     178} 
     179if (!empty($plugins_install['failure'])) { 
     180     echo  
     181     '<div class="error">'.__('Following plugins have not been installed:').'<ul>'; 
    220182     foreach ($plugins_install['failure'] as $k => $v) { 
    221           echo '<li>'.$k.' ('.$v.')</li>'; 
    222      } 
    223      echo '</ul></div>'; 
     183          echo  
     184          '<li>'.$k.' ('.$v.')</li>'; 
     185     } 
     186     echo  
     187     '</ul></div>'; 
     188} 
     189 
     190# -- Display modules lists -- 
     191if ($core->auth->isSuperAdmin() && $list->isPathWritable()) { 
     192 
     193     # Updated modules from repo 
     194     $modules = $repository->get(true); 
     195     if (!empty($modules)) { 
     196          echo  
     197          '<div class="multi-part" id="update" title="'.html::escapeHTML(__('Update plugins')).'">'. 
     198          '<h3>'.html::escapeHTML(__('Update plugins')).'</h3>'. 
     199          '<p>'.sprintf( 
     200               __('There is one plugin to update available from %2$s.', 'There are %s plugins to update available from %s.', count($modules)), 
     201               count($modules), 
     202               '<a href="http://dotaddict.org/dc2/plugins">Dotaddict</a>' 
     203          ).'</p>'; 
     204 
     205          $list 
     206               ->newList('plugin-update') 
     207               ->setModules($modules) 
     208               ->setPageTab('update') 
     209               ->displayModulesList( 
     210                    /*cols */      array('icon', 'name', 'version', 'current_version', 'desc'), 
     211                    /* actions */  array('update') 
     212               ); 
     213 
     214          echo 
     215          '</div>'; 
     216     } 
    224217} 
    225218 
    226219# List all active plugins 
    227 echo '<p>'.__('Plugins add new functionalities to Dotclear. '. 
    228 'Here you can activate or deactivate installed plugins.').'</p>'; 
    229  
    230 echo (!$core->plugins->moduleExists('daInstaller') ? 
    231      sprintf('<p><strong>'.__('You can find additional plugins for your blog on %s.').'</strong></p>', 
    232           '<a href="http://plugins.dotaddict.org/dc2/">Dotaddict</a>') : 
    233      sprintf('<p><strong>'.__('You can find additional plugins for your blog on %s or using the %s.').'</strong></p>', 
    234           '<a href="http://plugins.dotaddict.org/dc2/">Dotaddict</a>', 
    235           '<a href="plugin.php?p=daInstaller">'.__('DotAddict.org Installer').'</a>')); 
    236  
    237 if ($is_writable) { 
    238      echo '<p>'.__('To install or upgrade a plugin you generally just need to upload it '. 
    239      'in "Install or upgrade a plugin" section.'); 
    240 } else { 
    241      echo '<p>'.__('To install or upgrade a plugin you just need to extract it in your plugins directory.'); 
    242 } 
    243 echo '</p>'; 
    244  
    245220echo 
    246 '<div class="multi-part" id="plugins" title="'.__('Plugins').'">'; 
    247  
    248 $p_available = $core->plugins->getModules(); 
    249 uasort($p_available,create_function('$a,$b','return strcasecmp($a["name"],$b["name"]);')); 
    250 if (!empty($p_available))  
    251 { 
     221'<div class="multi-part" id="plugins" title="'.__('Installed plugins').'">'; 
     222 
     223$modules = $core->plugins->getModules(); 
     224if (!empty($modules)) { 
     225 
    252226     echo 
    253227     '<h3>'.__('Activated plugins').'</h3>'. 
    254      '<div class="table-outer clear">'. 
    255      '<table class="plugins"><tr>'. 
    256      '<th>'.__('Plugin').'</th>'. 
    257      '<th class="nowrap">'.__('Version').'</th>'. 
    258      '<th class="nowrap">'.__('Details').'</th>'. 
    259      '<th class="nowrap">'.__('Action').'</th>'. 
    260      '</tr>'; 
    261       
    262      $distrib_plugins = array('aboutConfig','akismet','antispam','attachments','blogroll','blowupConfig','daInstaller', 
    263           'fairTrackbacks','importExport','maintenance','pages','pings','simpleMenu','tags','themeEditor','userPref','widgets'); 
    264      $distrib_img = '<img src="images/dotclear_pw.png"'. 
    265           ' alt="'.__('Plugin from official distribution').'" title="'.__('Plugin from official distribution').'" />'; 
    266  
    267      foreach ($p_available as $k => $v) 
    268      { 
    269           $is_deletable = $is_writable && preg_match('!^'.$p_path_pat.'!',$v['root']); 
    270           $is_deactivable = $v['root_writable']; 
    271           $is_distrib = in_array($k, $distrib_plugins); 
    272            
    273           echo 
    274           '<tr class="line wide">'. 
    275           '<td class="minimal nowrap"><strong>'.html::escapeHTML($k).'</strong></td>'. 
    276           '<td class="minimal">'.html::escapeHTML($v['version']).'</td>'. 
    277           '<td class="maximal'.($is_distrib ? ' distrib' : '').'"><strong>'.html::escapeHTML(__($v['name'])).'</strong> '. 
    278           '<br />'.html::escapeHTML(__($v['desc'])).($is_distrib ? ' '.$distrib_img : '').'</td>'. 
    279           '<td class="nowrap action">'; 
    280            
    281           if ($is_deletable || $is_deactivable) 
    282           { 
    283                echo 
    284                '<form action="plugins.php" method="post">'. 
    285                '<div>'. 
    286                $core->formNonce(). 
    287                form::hidden(array('plugin_id'),html::escapeHTML($k)). 
    288                ($is_deactivable ? '<input type="submit" name="deactivate" value="'.__('Deactivate').'" /> ' : ''). 
    289                ($is_deletable ? '<input type="submit" class="delete" name="delete" value="'.__('Delete').'" /> ' : ''). 
    290                '</div>'. 
    291                '</form>'; 
    292           } 
    293            
    294           echo 
    295           '</td>'. 
    296           '</tr>'; 
    297      } 
    298      echo 
    299      '</table></div>'; 
    300 } 
    301  
    302 $p_disabled = $core->plugins->getDisabledModules(); 
    303 uksort($p_disabled,create_function('$a,$b','return strcasecmp($a,$b);')); 
    304 if (!empty($p_disabled)) 
    305 { 
     228     '<p>'.__('Manage installed plugins from this list.').'</p>'; 
     229 
     230     $list 
     231          ->newList('plugin-activate') 
     232          ->setModules($modules) 
     233          ->setPageTab('plugins') 
     234          ->displayModulesList( 
     235               /* cols */          array('expander', 'icon', 'name', 'config', 'version', 'desc', 'distrib'), 
     236               /* actions */  array('deactivate', 'delete') 
     237          ); 
     238} 
     239 
     240# Deactivated modules 
     241$modules = $core->plugins->getDisabledModules(); 
     242if (!empty($modules)) { 
     243 
    306244     echo 
    307245     '<h3>'.__('Deactivated plugins').'</h3>'. 
    308      '<div class="clear table-outer">'. 
    309      '<table class="plugins"><tr>'. 
    310      '<th>'.__('Plugin').'</th>'. 
    311      '<th class="nowrap">'.__('Action').'</th>'. 
    312      '</tr>'; 
    313       
    314      foreach ($p_disabled as $k => $v) 
    315      { 
    316           $is_deletable = $is_writable && preg_match('!^'.$p_path_pat.'!',$v['root']); 
    317           $is_activable = $v['root_writable']; 
    318            
    319           echo 
    320           '<tr class="line wide">'. 
    321           '<td class="maximal nowrap"><strong>'.html::escapeHTML($k).'</strong></td>'. 
    322           '<td class="nowrap action">'; 
    323            
    324           if ($is_deletable || $is_activable) 
    325           { 
    326                echo 
    327                '<form action="plugins.php" method="post">'. 
    328                '<div>'. 
    329                $core->formNonce(). 
    330                form::hidden(array('plugin_id'),html::escapeHTML($k)). 
    331                form::hidden(array('deactivated'),1). 
    332                ($is_activable ? '<input type="submit" name="activate" value="'.__('Activate').'" /> ' : ''). 
    333                ($is_deletable ? '<input type="submit" class="delete" name="delete" value="'.__('Delete').'" /> ' : ''). 
    334                '</div>'. 
    335                '</form>'; 
    336           } 
    337            
    338           echo 
    339           '</td>'. 
    340           '</tr>'; 
    341      } 
    342      echo 
    343      '</table></div>'; 
    344 } 
    345  
    346 echo '</div>'; 
    347  
    348 # Add a new plugin 
    349 echo 
    350 '<div class="multi-part" id="addplugin" title="'.__('Install or upgrade a plugin').'">'; 
    351  
    352 if ($is_writable) 
    353 { 
     246     '<p>'.__('Deactivated plugins are installed but not usable. You can activate them from here.').'</p>'; 
     247 
     248     $list 
     249          ->newList('plugin-deactivate') 
     250          ->setModules($modules) 
     251          ->setPageTab('plugins') 
     252          ->displayModulesList( 
     253               /* cols */          array('icon', 'name', 'distrib'), 
     254               /* actions */  array('activate', 'delete') 
     255          ); 
     256} 
     257 
     258echo  
     259'</div>'; 
     260 
     261if ($core->auth->isSuperAdmin() && $list->isPathWritable()) { 
     262 
     263     # New modules from repo 
     264     $search = $list->getSearchQuery(); 
     265     $modules = $search ? $repository->search($search) : $repository->get(); 
     266 
     267     echo 
     268     '<div class="multi-part" id="new" title="'.__('Add plugins from Dotaddict').'">'. 
     269     '<h3>'.__('Add plugins from Dotaddict repository').'</h3>'; 
     270 
     271     $list 
     272          ->newList('plugin-new') 
     273          ->setModules($modules) 
     274          ->setPageTab('new') 
     275          ->displaySearchForm() 
     276          ->displayNavMenu() 
     277          ->displayModulesList( 
     278               /* cols */          array('expander', 'name', 'version', 'desc'), 
     279               /* actions */  array('install'), 
     280               /* nav limit */     true 
     281          ); 
     282 
     283     echo 
     284     '<p class="info vertical-separator">'.sprintf( 
     285          __("Visit %s repository, the resources center for Dotclear."), 
     286          '<a href="http://dotaddict.org/dc2/plugins">Dotaddict</a>' 
     287          ). 
     288     '</p>'. 
     289 
     290     '</div>'; 
     291 
     292     # Add a new plugin 
     293     echo 
     294     '<div class="multi-part" id="addplugin" title="'.__('Install or upgrade manually').'">'; 
     295 
    354296     echo '<p>'.__('You can install plugins by uploading or downloading zip files.').'</p>'; 
    355297      
    356      # 'Upload plugin' form 
    357      echo 
    358      '<form method="post" action="plugins.php" id="uploadpkg" enctype="multipart/form-data" class="fieldset">'. 
    359      '<h3>'.__('Upload a zip file').'</h3>'. 
    360      '<p class="field"><label for="pkg_file" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Plugin zip file:').'</label> '. 
    361      '<input type="file" id="pkg_file" name="pkg_file" /></p>'. 
    362      '<p class="field"><label for="your_pwd1" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label> '. 
    363      form::password(array('your_pwd','your_pwd1'),20,255).'</p>'. 
    364      '<p><input type="submit" name="upload_pkg" value="'.__('Upload plugin').'" />'. 
    365      $core->formNonce(). 
    366      '</p>'. 
    367      '</form>'; 
    368       
    369      # 'Fetch plugin' form 
    370      echo 
    371      '<form method="post" action="plugins.php" id="fetchpkg" class="fieldset">'. 
    372      '<h3>'.__('Download a zip file').'</h3>'. 
    373      '<p class="field"><label for="pkg_url" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Plugin zip file URL:').'</label> '. 
    374      form::field(array('pkg_url','pkg_url'),40,255).'</p>'. 
    375      '<p class="field"><label for="your_pwd2" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label> '. 
    376      form::password(array('your_pwd','your_pwd2'),20,255).'</p>'. 
    377      '<p><input type="submit" name="fetch_pkg" value="'.__('Download plugin').'" />'. 
    378      $core->formNonce().'</p>'. 
    379      '</form>'; 
    380 } 
    381 else 
    382 { 
    383      echo 
    384      '<p class="static-msg">'. 
    385      __('To enable this function, please give write access to your plugins directory.'). 
    386      '</p>'; 
    387 } 
    388 echo '</div>'; 
     298     $list->displayManualForm(); 
     299 
     300     echo 
     301     '</div>'; 
     302} 
    389303 
    390304# --BEHAVIOR-- pluginsToolsTabs 
    391 $core->callBehavior('pluginsToolsTabs',$core); 
     305$core->callBehavior('pluginsToolsTabs', $core); 
     306 
     307# -- Notice for super admin -- 
     308if ($core->auth->isSuperAdmin() && !$list->isPathWritable()) { 
     309     echo  
     310     '<p class="warning">'.__('Some functions are disabled, please give write access to your plugins directory to enable them.').'</p>'; 
     311} 
    392312 
    393313dcPage::close(); 
  • admin/plugins.php

    r2174 r2175  
    157157          array( 
    158158               __('System') => '', 
    159                '<span class="page-title">'.__('Plugins management').'</span>' => '' 
     159               __('Plugins management') => '' 
    160160          )) 
    161161); 
Note: See TracChangeset for help on using the changeset viewer.

Sites map