Dotclear

Changeset 1793:a25f8d0fd400 for inc


Ignore:
Timestamp:
09/11/13 17:10:01 (12 years ago)
Author:
franck <carnet.franck.paul@…>
Branch:
default
Children:
1795:5c5c52124ab4, 1796:ef72fa20ed9d
Parents:
1792:3ad2e47ed52d (diff), 514:5cacbd2e1fa9 (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 globalhelp into default

Location:
inc/admin
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • inc/admin/lib.dc.page.php

    r512 r1793  
    44# This file is part of Dotclear 2. 
    55# 
    6 # Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear 
     6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear 
    77# Licensed under the GPL version 2.0 license. 
    88# See LICENSE file or 
     
    2222     { 
    2323          global $core; 
    24            
     24 
    2525          if ($core->blog && $core->auth->check($permissions,$core->blog->id)) 
    2626          { 
    2727               return; 
    2828          } 
    29            
     29 
    3030          if (session_id()) { 
    3131               $core->session->destroy(); 
     
    3333          http::redirect(DC_AUTH_PAGE); 
    3434     } 
    35       
     35 
    3636     # Check super admin 
    3737     public static function checkSuper() 
    3838     { 
    3939          global $core; 
    40            
     40 
    4141          if (!$core->auth->isSuperAdmin()) 
    4242          { 
     
    4747          } 
    4848     } 
    49       
     49 
    5050     # Top of admin page 
    51      public static function open($title='', $head='') 
     51     public static function open($title='',$head='',$breadcrumb='') 
    5252     { 
    5353          global $core; 
    54            
     54 
    5555          # List of user's blogs 
    5656          if ($core->auth->blog_count == 1 || $core->auth->blog_count > 20) 
    5757          { 
    5858               $blog_box = 
    59                __('Blog:').' <strong title="'.html::escapeHTML($core->blog->url).'">'. 
     59               '<p>'.__('Blog:').' <strong title="'.html::escapeHTML($core->blog->url).'">'. 
    6060               html::escapeHTML($core->blog->name).'</strong>'; 
    61                 
     61 
    6262               if ($core->auth->blog_count > 20) { 
    6363                    $blog_box .= ' - <a href="blogs.php">'.__('Change blog').'</a>'; 
    6464               } 
     65               $blog_box .= '</p>'; 
    6566          } 
    6667          else 
     
    7273               } 
    7374               $blog_box = 
    74                '<label for="switchblog" class="classic">'. 
    75                __('Blogs:').' '. 
     75               '<p><label for="switchblog" class="classic nomobile">'. 
     76               __('Blogs:').'</label> '. 
    7677               $core->formNonce(). 
    7778               form::combo('switchblog',$blogs,$core->blog->id). 
    78                '</label>'. 
    79                '<noscript><div><input type="submit" value="'.__('ok').'" /></div></noscript>'; 
    80           } 
    81            
     79               '</p>'. 
     80               '<noscript><p><input type="submit" value="'.__('ok').'" /></p></noscript>'; 
     81          } 
     82 
    8283          $safe_mode = isset($_SESSION['sess_safe_mode']) && $_SESSION['sess_safe_mode']; 
    83            
     84 
    8485          # Display 
    8586          header('Content-Type: text/html; charset=UTF-8'); 
     
    9293          "<head>\n". 
    9394          '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n". 
    94           '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n". 
    95            
    9695          '  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n". 
    9796          '  <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n". 
    98            
     97          '  <meta name="viewport" content="width=device-width, initial-scale=1.0" />'."\n". 
     98          '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n". 
     99 
     100 
    99101          self::jsLoadIE7(). 
    100           '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n";  
     102          '  <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 
    101103          if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { 
    102104               echo 
    103           '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n";  
     105               '  <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 
    104106          } 
    105107 
     
    109111               echo '<link rel="icon" type="image/png" href="images/favicon.png" />'; 
    110112          } 
    111            
     113 
    112114          echo 
    113115          self::jsCommon(). 
     116          self::jsToggles(). 
    114117          $head; 
    115            
     118 
    116119          # --BEHAVIOR-- adminPageHTMLHead 
    117120          $core->callBehavior('adminPageHTMLHead'); 
    118            
     121 
    119122          echo 
    120123          "</head>\n". 
    121124          '<body id="dotclear-admin'. 
    122           ($safe_mode ? ' safe-mode' : ''). 
    123           '">'."\n". 
    124            
    125           '<div id=header>'. 
    126           '<ul id="prelude"><li><a href="#content">Aller au contenu</a></li><li><a href="#main-menu">Aller au menu</a></li></ul>'."\n". 
    127           '<div id="top"><h1><a href="index.php">'.DC_VENDOR_NAME.'</a></h1></div>'."\n";  
    128            
     125          ($safe_mode ? ' safe-mode' : '').'" class="no-js">'."\n". 
     126 
     127          '<div id="header">'. 
     128          '<ul id="prelude">'. 
     129          '<li><a href="#content">'.__('Go to the content').'</a></li>'. 
     130          '<li><a href="#main-menu">'.__('Go to the menu').'</a></li>'. 
     131          '<li><a href="#qx">'.__('Go to search').'</a></li>'. 
     132          '</ul>'."\n". 
     133          '<div id="top"><h1><a href="index.php">'.DC_VENDOR_NAME.'</a></h1></div>'."\n"; 
     134 
    129135          echo 
    130136          '<div id="info-boxes">'. 
     
    132138          '<form action="index.php" method="post">'. 
    133139          $blog_box. 
    134           '<a href="'.$core->blog->url.'" onclick="window.open(this.href);return false;" title="'.__('Go to site').' ('.__('new window').')'.'">'.__('Go to site').' <img src="images/outgoing.png" alt="" /></a>'. 
    135           '</form>'. 
     140          '<p class="nomobile"><a href="'.$core->blog->url.'" onclick="window.open(this.href);return false;" title="'.__('Go to site').' ('.__('new window').')'.'">'.__('Go to site').'<img src="images/outgoing.png" alt="" /></a>'. 
     141          '</p></form>'. 
    136142          '</div>'. 
    137143          '<div id="info-box2">'. 
    138           '<a'.(preg_match('/index.php$/',$_SERVER['REQUEST_URI']) ? ' class="active"' : '').' href="index.php">'.__('My dashboard').'</a>'. 
    139           '<span> | </span><a'.(preg_match('/preferences.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' class="active"' : '').' href="preferences.php">'.__('My preferences').'</a>'. 
    140           '<span> | </span><a href="index.php?logout=1" class="logout">'.sprintf(__('Logout %s'),$core->auth->userID()).' <img src="images/logout.png" alt="" /></a>'. 
     144          '<a class="smallscreen'.(preg_match('/index.php$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="index.php">'.__('My dashboard').'</a>'. 
     145          '<span class="smallscreen"> | </span><a class="smallscreen'.(preg_match('/preferences.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="preferences.php">'.__('My preferences').'</a>'. 
     146          '<span class="smallscreen"> | </span><a href="index.php?logout=1" class="logout">'.sprintf(__('Logout %s'),$core->auth->userID()).'<img src="images/logout.png" alt="" /></a>'. 
    141147          '</div>'. 
    142148          '</div>'. 
    143           '<p id="helplinks">'. 
    144           '<a href="#">Aide de cette page</a><span> | </span>'. 
    145           '<a'.(preg_match('/help.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' class="active"' : '').' href="help.php">'.__('Global help').'</a>'. 
    146           '</p>'. 
    147149          '</div>'; 
    148            
    149           echo 
    150           '<div id="wrapper">'."\n". 
     150 
     151          echo 
     152          '<div id="wrapper" class="clearfix">'."\n". 
    151153          '<div id="main">'."\n". 
    152           '<div id="content">'."\n"; 
    153            
     154          '<div id="content" class="clearfix">'."\n"; 
     155 
    154156          # Safe mode 
    155157          if ($safe_mode) 
     
    160162               '</div>'; 
    161163          } 
    162            
     164 
     165          // Display breadcrumb (if given) before any error message 
     166          echo $breadcrumb; 
     167 
     168          if ($core->error->flag()) { 
     169               echo 
     170               '<div class="error"><p><strong>'.(count($core->error->getErrors()) > 1 ? __('Errors:') : __('Error:')).'</strong></p>'. 
     171               $core->error->toHTML(). 
     172               '</div>'; 
     173          } 
     174     } 
     175 
     176     public static function close() 
     177     { 
     178          global $core; 
     179 
     180          $menu =& $GLOBALS['_menu']; 
     181 
     182          echo 
     183          "</div>\n".         // End of #content 
     184          "</div>\n".         // End of #main 
     185 
     186          '<div id="main-menu">'."\n". 
     187 
     188          '<form id="search-menu" action="search.php" method="get">'. 
     189          '<p><label for="qx" class="hidden">'.__('Search:').' </label>'.form::field('qx',30,255,''). 
     190          '<input type="submit" value="'.__('OK').'" /></p>'. 
     191          '</form>'; 
     192 
     193          foreach ($menu as $k => $v) { 
     194               echo $menu[$k]->draw(); 
     195          } 
     196 
     197          $text = sprintf(__('Thank you for using %s.'),'Dotclear '.DC_VERSION); 
     198 
     199          # --BEHAVIOR-- adminPageFooter 
     200          $textAlt = $core->callBehavior('adminPageFooter',$core,$text); 
     201          if ($textAlt != '') { 
     202               $text = $textAlt; 
     203          } 
     204          $text = html::escapeHTML($text); 
     205 
     206          echo 
     207          '</div>'."\n".      // End of #main-menu 
     208          '<div id="footer">'. 
     209          '<span class="helplink"><a href="help.php">'.__('Global help').'</a></span> '. 
     210          '<a href="http://dotclear.org/" title="'.$text.'"><img src="style/dc_logos/w-dotclear90.png" alt="'.$text.'" /></a></div>'."\n". 
     211          '<!-- '."\n". 
     212'                  .'."\n". 
     213'               ,;:\'`\'::'."\n". 
     214'            __||'."\n". 
     215'      _____/LLLL\_'."\n". 
     216'      \__________"|'."\n". 
     217'    ~^~^~^~^~^~^~^~^~^~'."\n". 
     218' -->'."\n". 
     219          "</div>\n";         // End of #wrapper 
     220 
     221          if (defined('DC_DEV') && DC_DEV === true) { 
     222               echo self::debugInfo(); 
     223          } 
     224 
     225          echo 
     226          '</body></html>'; 
     227     } 
     228 
     229     public static function openPopup($title='',$head='',$breadcrumb='') 
     230     { 
     231          global $core; 
     232 
     233          # Display 
     234          header('Content-Type: text/html; charset=UTF-8'); 
     235          echo 
     236          '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '. 
     237          ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n". 
     238          '<html xmlns="http://www.w3.org/1999/xhtml" '. 
     239          'xml:lang="'.$core->auth->getInfo('user_lang').'" '. 
     240          'lang="'.$core->auth->getInfo('user_lang').'">'."\n". 
     241          '<meta name="viewport" content="width=device-width, initial-scale=1.0" />'."\n". 
     242          "<head>\n". 
     243          '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n". 
     244          '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n". 
     245 
     246          '  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n". 
     247          '  <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n". 
     248 
     249          self::jsLoadIE7(). 
     250          '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 
     251          if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { 
     252               echo 
     253               '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 
     254          } 
     255 
     256          echo 
     257          self::jsCommon(). 
     258          self::jsToggles(). 
     259          $head; 
     260 
     261          # --BEHAVIOR-- adminPageHTMLHead 
     262          $core->callBehavior('adminPageHTMLHead'); 
     263 
     264          echo 
     265          "</head>\n". 
     266          '<body id="dotclear-admin" class="popup">'."\n". 
     267 
     268          '<div id="top hidden"><h1>'.DC_VENDOR_NAME.'</h1></div>'."\n"; 
     269 
     270          echo 
     271          '<div id="wrapper">'."\n". 
     272          '<div id="main">'."\n". 
     273          '<div id="content">'."\n"; 
     274 
     275          // display breadcrumb if given 
     276          echo $breadcrumb; 
     277 
    163278          if ($core->error->flag()) { 
    164279               echo 
     
    168283          } 
    169284     } 
    170       
    171      public static function close() 
    172      { 
    173           $menu =& $GLOBALS['_menu']; 
    174            
    175           echo 
    176           "</div>\n".         // End of #content 
    177           "</div>\n".         // End of #main 
    178            
    179           '<div id="main-menu">'."\n"; 
    180            
    181           foreach ($menu as $k => $v) { 
    182                echo $menu[$k]->draw(); 
    183           } 
    184            
    185           echo 
    186           '</div>'."\n".      // End of #main-menu 
    187           '<div id="footer"><p>'. 
    188           '<a class="helplink'.(preg_match('/help.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="help.php">'.__('Global help').'</a>'. 
    189           sprintf(__('Thank you for using %s.'),'<a href="http://dotclear.org/">Dotclear '.DC_VERSION.'</a>'). 
    190           ' <span class="credit"> (Icons by <a href="http://dryicons.com/">Dryicons</a>)</span>'. 
    191           '</p></div>'."\n". 
    192           "</div>\n";         // End of #wrapper 
    193            
    194           if (defined('DC_DEV') && DC_DEV === true) { 
    195                echo self::debugInfo(); 
    196           } 
    197            
    198           echo 
    199           '</body></html>'; 
    200      } 
    201       
    202      public static function openPopup($title='', $head='') 
    203      { 
    204           global $core; 
    205            
    206           # Display 
    207           header('Content-Type: text/html; charset=UTF-8'); 
    208           echo 
    209           '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '. 
    210           ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n". 
    211           '<html xmlns="http://www.w3.org/1999/xhtml" '. 
    212           'xml:lang="'.$core->auth->getInfo('user_lang').'" '. 
    213           'lang="'.$core->auth->getInfo('user_lang').'">'."\n". 
    214           "<head>\n". 
    215           '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n". 
    216           '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n". 
    217            
    218           '  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n". 
    219           '  <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n". 
    220            
    221           self::jsLoadIE7(). 
    222           '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n";  
    223           if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { 
    224                echo 
    225                '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n";  
    226           } 
    227            
    228           echo 
    229           self::jsCommon(). 
    230           $head; 
    231            
    232           # --BEHAVIOR-- adminPageHTMLHead 
    233           $core->callBehavior('adminPageHTMLHead'); 
    234            
    235           echo 
    236           "</head>\n". 
    237           '<body id="dotclear-admin" class="popup">'."\n". 
    238            
    239           '<div id="top"><h1>'.DC_VENDOR_NAME.'</h1></div>'."\n"; 
    240            
    241           echo 
    242           '<div id="wrapper">'."\n". 
    243           '<div id="main">'."\n". 
    244           '<div id="content">'."\n"; 
    245            
    246           if ($core->error->flag()) { 
    247                echo 
    248                '<div class="error"><strong>'.__('Errors:').'</strong>'. 
    249                $core->error->toHTML(). 
    250                '</div>'; 
    251           } 
    252      } 
    253       
     285 
    254286     public static function closePopup() 
    255287     { 
     
    261293          '</body></html>'; 
    262294     } 
    263       
     295 
     296     public static function breadcrumb($elements=null,$with_home_link=true,$echo=false) 
     297     { 
     298          // First item of array elements should be blog's name, System or Plugins 
     299          $res = '<h2>'.($with_home_link ? 
     300               '<a class="go_home" href="index.php"><img src="style/dashboard.png" alt="'.__('Go to dashboard').'" /></a>' : 
     301               '<img src="style/dashboard-alt.png" alt="" />'); 
     302          $index = 0; 
     303          foreach ($elements as $element => $url) { 
     304               $res .= ($with_home_link ? ($index == 1 ? ' : ' : ' &rsaquo; ') : ($index == 0 ? ' ' : ' &rsaquo; ')). 
     305                    ($url ? '<a href="'.$url.'">' : '').$element.($url ? '</a>' : ''); 
     306               $index++; 
     307          } 
     308          $res .= '</h2>'; 
     309          if ($echo) { 
     310               echo $res; 
     311          } 
     312          return $res; 
     313     } 
     314 
     315     public static function message($msg,$timestamp=true,$div=false,$echo=true,$class='message') 
     316     { 
     317          global $core; 
     318 
     319          $res = ''; 
     320          if ($msg != '') { 
     321               $res = ($div ? '<div class="'.$class.'">' : '').'<p'.($div ? '' : ' class="'.$class.'"').'>'. 
     322               ($timestamp ? dt::str(__('%H:%M:%S:'),null,$core->auth->getInfo('user_tz')).' ' : '').$msg. 
     323               '</p>'.($div ? '</div>' : ''); 
     324               if ($echo) { 
     325                    echo $res; 
     326               } 
     327          } 
     328          return $res; 
     329     } 
     330 
     331     public static function success($msg,$timestamp=true,$div=false,$echo=true) 
     332     { 
     333          self::message($msg,$timestamp,$div,$echo,"success"); 
     334     } 
     335 
     336     public static function warning($msg,$timestamp=true,$div=false,$echo=true) 
     337     { 
     338          self::message($msg,$timestamp,$div,$echo,"warning-msg"); 
     339     } 
     340 
    264341     private static function debugInfo() 
    265342     { 
    266343          $global_vars = implode(', ',array_keys($GLOBALS)); 
    267            
     344 
    268345          $res = 
    269346          '<div id="debug"><div>'. 
    270347          '<p>memory usage: '.memory_get_usage().' ('.files::size(memory_get_usage()).')</p>'; 
    271            
     348 
    272349          if (function_exists('xdebug_get_profiler_filename')) 
    273350          { 
    274351               $res .= '<p>Elapsed time: '.xdebug_time_index().' seconds</p>'; 
    275                 
     352 
    276353               $prof_file = xdebug_get_profiler_filename(); 
    277354               if ($prof_file) { 
     
    283360                    $res .= '<p><a href="'.html::escapeURL($prof_url).'">Trigger profiler</a></p>'; 
    284361               } 
    285                 
     362 
    286363               /* xdebug configuration: 
    287364               zend_extension = /.../xdebug.so 
     
    297374               */ 
    298375          } 
    299            
     376 
    300377          $res .= 
    301378          '<p>Global vars: '.$global_vars.'</p>'. 
    302379          '</div></div>'; 
    303            
     380 
    304381          return $res; 
    305382     } 
    306       
     383 
    307384     public static function help($page,$index='') 
    308385     { 
    309386          # Deprecated but we keep this for plugins. 
    310387     } 
    311       
     388 
    312389     public static function helpBlock() 
    313390     { 
    314391          $args = func_get_args(); 
     392 
     393          $args = new ArrayObject($args); 
     394 
     395          # --BEHAVIOR-- adminPageHelpBlock 
     396          $GLOBALS['core']->callBehavior('adminPageHelpBlock',$args); 
     397 
    315398          if (empty($args)) { 
    316399               return; 
    317400          }; 
    318            
     401 
    319402          global $__resources; 
    320403          if (empty($__resources['help'])) { 
    321404               return; 
    322405          } 
    323            
     406 
    324407          $content = ''; 
    325408          foreach ($args as $v) 
     
    329412                    continue; 
    330413               } 
    331                 
     414 
    332415               if (!isset($__resources['help'][$v])) { 
    333416                    continue; 
     
    337420                    continue; 
    338421               } 
    339                 
     422 
    340423               $fc = file_get_contents($f); 
    341424               if (preg_match('|<body[^>]*?>(.*?)</body>|ms',$fc,$matches)) { 
     
    345428               } 
    346429          } 
    347            
     430 
    348431          if (trim($content) == '') { 
    349432               return; 
    350433          } 
    351            
    352           echo 
    353           '<div id="help"><hr /><div class="help-content clear"><h2>'.__('Help').'</h2>'. 
     434 
     435          echo 
     436          '<div id="help"><hr /><div class="help-content clear"><h3>'.__('Help about this page').'</h3>'. 
    354437          $content. 
    355438          '</div>'. 
     
    360443          '</div></div>'; 
    361444     } 
    362       
     445 
    363446     public static function jsLoad($src) 
    364447     { 
     
    369452          } 
    370453     } 
    371       
     454 
    372455     public static function jsVar($n,$v) 
    373456     { 
    374457          return $n." = '".html::escapeJS($v)."';\n"; 
     458     } 
     459 
     460     public static function jsToggles() 
     461     { 
     462          if($GLOBALS['core']->auth->user_prefs->toggles) { 
     463               $unfolded_sections = explode(',',$GLOBALS['core']->auth->user_prefs->toggles->unfolded_sections); 
     464               foreach ($unfolded_sections as $k=>&$v) { 
     465                    if ($v == '') { 
     466                         unset($unfolded_sections[$k]); 
     467                    } else { 
     468                         $v = "'".html::escapeJS($v)."':true"; 
     469                    } 
     470               } 
     471          } else { 
     472               $unfolded_sections=array(); 
     473          } 
     474          return '<script type="text/javascript">'."\n". 
     475                         "//<![CDATA[\n". 
     476                         'dotclear.unfolded_sections = {'.join(",",$unfolded_sections)."};\n". 
     477                         "\n//]]>\n". 
     478                    "</script>\n"; 
    375479     } 
    376480      
    377481     public static function jsCommon() 
    378482     { 
     483          $mute_or_no = ''; 
     484          if (!empty($GLOBALS['core']->blog->settings->system->jquery_migrate_mute)) { 
     485               $mute_or_no .= 
     486                    '<script type="text/javascript">'."\n". 
     487                    "//<![CDATA[\n". 
     488                    'jQuery.migrateMute = true;'. 
     489                    "\n//]]>\n". 
     490                    "</script>\n"; 
     491          } 
     492 
    379493          return 
    380494          self::jsLoad('js/jquery/jquery.js'). 
     495          $mute_or_no. 
     496          self::jsLoad('js/jquery/jquery-migrate-1.2.1.js'). 
    381497          self::jsLoad('js/jquery/jquery.biscuit.js'). 
    382498          self::jsLoad('js/jquery/jquery.bgFade.js'). 
    383499          self::jsLoad('js/common.js'). 
    384500          self::jsLoad('js/prelude.js'). 
    385            
     501 
    386502          '<script type="text/javascript">'."\n". 
    387503          "//<![CDATA[\n". 
    388504          self::jsVar('dotclear.nonce',$GLOBALS['core']->getNonce()). 
    389            
    390           self::jsVar('dotclear.img_plus_src','images/plus.png'). 
     505          self::jsVar('dotclear.img_plus_src','images/expand.png'). 
    391506          self::jsVar('dotclear.img_plus_alt',__('uncover')). 
    392           self::jsVar('dotclear.img_minus_src','images/minus.png'). 
     507          self::jsVar('dotclear.img_minus_src','images/hide.png'). 
    393508          self::jsVar('dotclear.img_minus_alt',__('hide')). 
    394509          self::jsVar('dotclear.img_menu_on','images/menu_on.png'). 
    395510          self::jsVar('dotclear.img_menu_off','images/menu_off.png'). 
    396            
     511 
    397512          self::jsVar('dotclear.msg.help', 
    398                __('help')). 
     513               __('Help about this page')). 
     514          self::jsVar('dotclear.msg.help_hide', 
     515               __('Hide')). 
     516          self::jsVar('dotclear.msg.to_select', 
     517               __('Select:')). 
    399518          self::jsVar('dotclear.msg.no_selection', 
    400519               __('no selection')). 
     
    402521               __('select all')). 
    403522          self::jsVar('dotclear.msg.invert_sel', 
    404                __('invert selection')). 
     523               __('Invert selection')). 
    405524          self::jsVar('dotclear.msg.website', 
    406525               __('Web site:')). 
     
    419538          self::jsVar('dotclear.msg.confirm_delete_posts', 
    420539               __("Are you sure you want to delete selected entries (%s)?")). 
     540          self::jsVar('dotclear.msg.confirm_delete_categories', 
     541               __("Are you sure you want to delete selected categories (%s)?")). 
    421542          self::jsVar('dotclear.msg.confirm_delete_post', 
    422543               __("Are you sure you want to delete this entry?")). 
     544          self::jsVar('dotclear.msg.click_to_unlock', 
     545               __("Click here to unlock the field")). 
     546          self::jsVar('dotclear.msg.confirm_spam_delete', 
     547               __('Are you sure you want to delete all spams?')). 
    423548          self::jsVar('dotclear.msg.confirm_delete_comments', 
    424549               __('Are you sure you want to delete selected comments (%s)?')). 
     
    449574          self::jsVar('dotclear.msg.confirm_delete_theme', 
    450575               __('Are you sure you want to delete "%s" theme?')). 
     576          self::jsVar('dotclear.msg.confirm_delete_backup', 
     577               __('Are you sure you want to delete this backup?')). 
    451578          self::jsVar('dotclear.msg.zip_file_content', 
    452579               __('Zip file content')). 
     
    459586          self::jsVar('dotclear.msg.confirm_change_post_format', 
    460587               __('You have unsaved changes. Switch post format will loose these changes. Proceed anyway?')). 
     588          self::jsVar('dotclear.msg.confirm_change_post_format_noconvert', 
     589               __("Warning: post format change will not convert existing content. You will need to apply new format by yourself. Proceed anyway?")). 
    461590          self::jsVar('dotclear.msg.load_enhanced_uploader', 
    462591               __('Loading enhanced uploader, please wait.')). 
    463           "\n//]]>\n". 
     592               "\n//]]>\n". 
    464593          "</script>\n"; 
    465594     } 
    466       
     595 
    467596     public static function jsLoadIE7() 
    468597     { 
    469598          return 
    470           '<!--[if lt IE 8]>'."\n". 
    471           self::jsLoad('js/ie7/IE8.js'). 
     599          '<!--[if lt IE 9]>'."\n". 
     600          self::jsLoad('js/ie7/IE9.js'). 
    472601          '<link rel="stylesheet" type="text/css" href="style/iesucks.css" />'."\n". 
    473602          '<![endif]-->'."\n"; 
    474603     } 
    475       
     604 
    476605     public static function jsConfirmClose() 
    477606     { 
     
    485614               $args = ''; 
    486615          } 
    487            
     616 
    488617          return 
    489618          self::jsLoad('js/confirm-close.js'). 
     
    495624          "</script>\n"; 
    496625     } 
    497       
     626 
    498627     public static function jsPageTabs($default=null) 
    499628     { 
     
    501630               $default = "'".html::escapeJS($default)."'"; 
    502631          } 
    503            
     632 
    504633          return 
    505634          self::jsLoad('js/jquery/jquery.pageTabs.js'). 
     
    507636          "//<![CDATA[\n". 
    508637          "\$(function() {\n". 
    509           "    \$.pageTabs(".$default.");\n". 
    510           "});\n". 
    511           "\n//]]>\n". 
    512           "</script>\n"; 
    513      } 
    514       
    515      public static function jsModal() 
    516      { 
    517           return 
    518           '<link rel="stylesheet" type="text/css" href="style/modal/modal.css" />'."\n". 
    519           self::jsLoad('js/jquery/jquery.modal.js'). 
     638               "    pagetabs = \$.pageTabs(".$default.");\n". 
     639               "});\n". 
     640"\n//]]>\n". 
     641"</script>\n". 
     642          "<!--[if lt IE 8]>\n". 
     643          self::jsLoad('js/ie7/ie7-hashchange.js'). 
    520644          '<script type="text/javascript">'."\n". 
    521645          "//<![CDATA[\n". 
    522           self::jsVar('$.modal.prototype.params.loader_img','style/modal/loader.gif'). 
    523           self::jsVar('$.modal.prototype.params.close_img','style/modal/close.png'). 
     646          "\$(function() {". 
     647               "\$(window).hashchange( function(){". 
     648                    "pagetabs.showDiv(document.location.hash.split('#').join(''));". 
     649               "});". 
     650          "});". 
    524651          "\n//]]>\n". 
    525           "</script>\n"; 
    526      } 
    527       
    528      public static function jsColorPicker() 
    529      { 
    530           return 
    531           '<link rel="stylesheet" type="text/css" href="style/farbtastic/farbtastic.css" />'."\n". 
    532           self::jsLoad('js/jquery/jquery.farbtastic.js'). 
    533           self::jsLoad('js/color-picker.js'); 
    534      } 
    535       
    536      public static function jsDatePicker() 
    537      { 
    538           return 
    539           '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n". 
    540           self::jsLoad('js/date-picker.js'). 
    541           '<script type="text/javascript">'."\n". 
    542           "//<![CDATA[\n". 
    543            
    544           "datePicker.prototype.months[0] = '".html::escapeJS(__('January'))."'; ". 
    545           "datePicker.prototype.months[1] = '".html::escapeJS(__('February'))."'; ". 
    546           "datePicker.prototype.months[2] = '".html::escapeJS(__('March'))."'; ". 
    547           "datePicker.prototype.months[3] = '".html::escapeJS(__('April'))."'; ". 
    548           "datePicker.prototype.months[4] = '".html::escapeJS(__('May'))."'; ". 
    549           "datePicker.prototype.months[5] = '".html::escapeJS(__('June'))."'; ". 
    550           "datePicker.prototype.months[6] = '".html::escapeJS(__('July'))."'; ". 
    551           "datePicker.prototype.months[7] = '".html::escapeJS(__('August'))."'; ". 
    552           "datePicker.prototype.months[8] = '".html::escapeJS(__('September'))."'; ". 
    553           "datePicker.prototype.months[9] = '".html::escapeJS(__('October'))."'; ". 
    554           "datePicker.prototype.months[10] = '".html::escapeJS(__('November'))."'; ". 
    555           "datePicker.prototype.months[11] = '".html::escapeJS(__('December'))."'; ". 
    556            
    557           "datePicker.prototype.days[0] = '".html::escapeJS(__('Monday'))."'; ". 
    558           "datePicker.prototype.days[1] = '".html::escapeJS(__('Tuesday'))."'; ". 
    559           "datePicker.prototype.days[2] = '".html::escapeJS(__('Wednesday'))."'; ". 
    560           "datePicker.prototype.days[3] = '".html::escapeJS(__('Thursday'))."'; ". 
    561           "datePicker.prototype.days[4] = '".html::escapeJS(__('Friday'))."'; ". 
    562           "datePicker.prototype.days[5] = '".html::escapeJS(__('Saturday'))."'; ". 
    563           "datePicker.prototype.days[6] = '".html::escapeJS(__('Sunday'))."'; ". 
    564            
    565           "datePicker.prototype.img_src = 'images/date-picker.png'; ". 
    566            
    567           "datePicker.prototype.close_msg = '".html::escapeJS(__('close'))."'; ". 
    568           "datePicker.prototype.now_msg = '".html::escapeJS(__('now'))."'; ". 
    569            
    570           "\n//]]>\n". 
    571           "</script>\n"; 
    572      } 
    573       
    574      public static function jsToolBar() 
    575      { 
    576           $res = 
    577           '<link rel="stylesheet" type="text/css" href="style/jsToolBar/jsToolBar.css" />'. 
    578           '<script type="text/javascript" src="js/jsToolBar/jsToolBar.js"></script>'; 
    579            
    580           if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) { 
    581                $res .= '<script type="text/javascript" src="js/jsToolBar/jsToolBar.wysiwyg.js"></script>'; 
    582           } 
    583            
    584           $res .= 
    585           '<script type="text/javascript" src="js/jsToolBar/jsToolBar.dotclear.js"></script>'. 
    586           '<script type="text/javascript">'."\n". 
    587           "//<![CDATA[\n". 
    588           "jsToolBar.prototype.dialog_url = 'popup.php'; ". 
    589           "jsToolBar.prototype.iframe_css = '". 
    590                'body{'. 
    591                     'font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;'. 
    592                     'color : #000;'. 
    593                     'background: #f9f9f9;'. 
    594                     'margin: 0;'. 
    595                     'padding : 2px;'. 
    596                     'border: none;'. 
    597                     (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl' ? 'direction:rtl;' : ''). 
    598                '}'. 
    599                'pre, code, kbd, samp {'. 
    600                     'font-family:"Courier New",Courier,monospace;'. 
    601                     'font-size : 1.1em;'. 
    602                '}'. 
    603                'code {'. 
    604                     'color : #666;'. 
    605                     'font-weight : bold;'. 
    606                '}'. 
    607                'body > p:first-child {'. 
    608                     'margin-top: 0;'. 
    609                '}'. 
    610           "'; ". 
    611           "jsToolBar.prototype.base_url = '".html::escapeJS($GLOBALS['core']->blog->host)."'; ". 
    612           "jsToolBar.prototype.switcher_visual_title = '".html::escapeJS(__('visual'))."'; ". 
    613           "jsToolBar.prototype.switcher_source_title = '".html::escapeJS(__('source'))."'; ". 
    614           "jsToolBar.prototype.legend_msg = '". 
    615           html::escapeJS(__('You can use the following shortcuts to format your text.'))."'; ". 
    616           "jsToolBar.prototype.elements.blocks.options.none = '".html::escapeJS(__('-- none --'))."'; ". 
    617           "jsToolBar.prototype.elements.blocks.options.nonebis = '".html::escapeJS(__('-- block format --'))."'; ". 
    618           "jsToolBar.prototype.elements.blocks.options.p = '".html::escapeJS(__('Paragraph'))."'; ". 
    619           "jsToolBar.prototype.elements.blocks.options.h1 = '".html::escapeJS(__('Level 1 header'))."'; ". 
    620           "jsToolBar.prototype.elements.blocks.options.h2 = '".html::escapeJS(__('Level 2 header'))."'; ". 
    621           "jsToolBar.prototype.elements.blocks.options.h3 = '".html::escapeJS(__('Level 3 header'))."'; ". 
    622           "jsToolBar.prototype.elements.blocks.options.h4 = '".html::escapeJS(__('Level 4 header'))."'; ". 
    623           "jsToolBar.prototype.elements.blocks.options.h5 = '".html::escapeJS(__('Level 5 header'))."'; ". 
    624           "jsToolBar.prototype.elements.blocks.options.h6 = '".html::escapeJS(__('Level 6 header'))."'; ". 
    625           "jsToolBar.prototype.elements.strong.title = '".html::escapeJS(__('Strong emphasis'))."'; ". 
    626           "jsToolBar.prototype.elements.em.title = '".html::escapeJS(__('Emphasis'))."'; ". 
    627           "jsToolBar.prototype.elements.ins.title = '".html::escapeJS(__('Inserted'))."'; ". 
    628           "jsToolBar.prototype.elements.del.title = '".html::escapeJS(__('Deleted'))."'; ". 
    629           "jsToolBar.prototype.elements.quote.title = '".html::escapeJS(__('Inline quote'))."'; ". 
    630           "jsToolBar.prototype.elements.code.title = '".html::escapeJS(__('Code'))."'; ". 
    631           "jsToolBar.prototype.elements.br.title = '".html::escapeJS(__('Line break'))."'; ". 
    632           "jsToolBar.prototype.elements.blockquote.title = '".html::escapeJS(__('Blockquote'))."'; ". 
    633           "jsToolBar.prototype.elements.pre.title = '".html::escapeJS(__('Preformated text'))."'; ". 
    634           "jsToolBar.prototype.elements.ul.title = '".html::escapeJS(__('Unordered list'))."'; ". 
    635           "jsToolBar.prototype.elements.ol.title = '".html::escapeJS(__('Ordered list'))."'; ". 
    636            
    637           "jsToolBar.prototype.elements.link.title = '".html::escapeJS(__('Link'))."'; ". 
    638           "jsToolBar.prototype.elements.link.href_prompt = '".html::escapeJS(__('URL?'))."'; ". 
    639           "jsToolBar.prototype.elements.link.hreflang_prompt = '".html::escapeJS(__('Language?'))."'; ". 
    640            
    641           "jsToolBar.prototype.elements.img.title = '".html::escapeJS(__('External image'))."'; ". 
    642           "jsToolBar.prototype.elements.img.src_prompt = '".html::escapeJS(__('URL?'))."'; ". 
    643            
    644           "jsToolBar.prototype.elements.img_select.title = '".html::escapeJS(__('Media chooser'))."'; ". 
    645           "jsToolBar.prototype.elements.post_link.title = '".html::escapeJS(__('Link to an entry'))."'; "; 
    646            
    647           if (!$GLOBALS['core']->auth->check('media,media_admin',$GLOBALS['core']->blog->id)) { 
    648                $res .= "jsToolBar.prototype.elements.img_select.disabled = true;\n"; 
    649           } 
    650            
    651           $res .= 
    652           "\n//]]>\n". 
    653           "</script>\n"; 
    654            
    655           return $res; 
    656      } 
    657       
    658      public static function jsCandyUpload($params=array(),$base_url=null) 
    659      { 
    660           if (!$base_url) { 
    661                $base_url = path::clean(dirname(preg_replace('/(\?.*$)?/','',$_SERVER['REQUEST_URI']))).'/'; 
    662           } 
    663            
    664           $params = array_merge($params,array( 
    665                'sess_id='.session_id(), 
    666                'sess_uid='.$_SESSION['sess_browser_uid'], 
    667                'xd_check='.$GLOBALS['core']->getNonce() 
     652          "</script>\n". 
     653          "<![endif]-->\n"; 
     654} 
     655 
     656public static function jsModal() 
     657{ 
     658     return 
     659     '<link rel="stylesheet" type="text/css" href="style/modal/modal.css" />'."\n". 
     660     self::jsLoad('js/jquery/jquery.modal.js'). 
     661     '<script type="text/javascript">'."\n". 
     662     "//<![CDATA[\n". 
     663     self::jsVar('$.modal.prototype.params.loader_img','style/modal/loader.gif'). 
     664     self::jsVar('$.modal.prototype.params.close_img','style/modal/close.png'). 
     665     "\n//]]>\n". 
     666     "</script>\n"; 
     667} 
     668 
     669public static function jsColorPicker() 
     670{ 
     671     return 
     672     '<link rel="stylesheet" type="text/css" href="style/farbtastic/farbtastic.css" />'."\n". 
     673     self::jsLoad('js/jquery/jquery.farbtastic.js'). 
     674     self::jsLoad('js/color-picker.js'); 
     675} 
     676 
     677public static function jsDatePicker() 
     678{ 
     679     return 
     680     '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n". 
     681     self::jsLoad('js/date-picker.js'). 
     682     '<script type="text/javascript">'."\n". 
     683     "//<![CDATA[\n". 
     684 
     685     "datePicker.prototype.months[0] = '".html::escapeJS(__('January'))."'; ". 
     686     "datePicker.prototype.months[1] = '".html::escapeJS(__('February'))."'; ". 
     687     "datePicker.prototype.months[2] = '".html::escapeJS(__('March'))."'; ". 
     688     "datePicker.prototype.months[3] = '".html::escapeJS(__('April'))."'; ". 
     689     "datePicker.prototype.months[4] = '".html::escapeJS(__('May'))."'; ". 
     690     "datePicker.prototype.months[5] = '".html::escapeJS(__('June'))."'; ". 
     691     "datePicker.prototype.months[6] = '".html::escapeJS(__('July'))."'; ". 
     692     "datePicker.prototype.months[7] = '".html::escapeJS(__('August'))."'; ". 
     693     "datePicker.prototype.months[8] = '".html::escapeJS(__('September'))."'; ". 
     694     "datePicker.prototype.months[9] = '".html::escapeJS(__('October'))."'; ". 
     695     "datePicker.prototype.months[10] = '".html::escapeJS(__('November'))."'; ". 
     696     "datePicker.prototype.months[11] = '".html::escapeJS(__('December'))."'; ". 
     697 
     698     "datePicker.prototype.days[0] = '".html::escapeJS(__('Monday'))."'; ". 
     699     "datePicker.prototype.days[1] = '".html::escapeJS(__('Tuesday'))."'; ". 
     700     "datePicker.prototype.days[2] = '".html::escapeJS(__('Wednesday'))."'; ". 
     701     "datePicker.prototype.days[3] = '".html::escapeJS(__('Thursday'))."'; ". 
     702     "datePicker.prototype.days[4] = '".html::escapeJS(__('Friday'))."'; ". 
     703     "datePicker.prototype.days[5] = '".html::escapeJS(__('Saturday'))."'; ". 
     704     "datePicker.prototype.days[6] = '".html::escapeJS(__('Sunday'))."'; ". 
     705 
     706     "datePicker.prototype.img_src = 'images/date-picker.png'; ". 
     707 
     708     "datePicker.prototype.close_msg = '".html::escapeJS(__('close'))."'; ". 
     709     "datePicker.prototype.now_msg = '".html::escapeJS(__('now'))."'; ". 
     710 
     711     "\n//]]>\n". 
     712     "</script>\n"; 
     713} 
     714 
     715public static function jsToolBar() 
     716{ 
     717     $res = 
     718     '<link rel="stylesheet" type="text/css" href="style/jsToolBar/jsToolBar.css" />'. 
     719     '<script type="text/javascript" src="js/jsToolBar/jsToolBar.js"></script>'; 
     720 
     721     if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) { 
     722          $res .= '<script type="text/javascript" src="js/jsToolBar/jsToolBar.wysiwyg.js"></script>'; 
     723     } 
     724 
     725     $res .= 
     726     '<script type="text/javascript" src="js/jsToolBar/jsToolBar.dotclear.js"></script>'. 
     727     '<script type="text/javascript">'."\n". 
     728     "//<![CDATA[\n". 
     729     "jsToolBar.prototype.dialog_url = 'popup.php'; ". 
     730     "jsToolBar.prototype.iframe_css = '". 
     731     'body{'. 
     732     'font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;'. 
     733     'color : #000;'. 
     734     'background: #f9f9f9;'. 
     735     'margin: 0;'. 
     736     'padding : 2px;'. 
     737     'border: none;'. 
     738     (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl' ? 'direction:rtl;' : ''). 
     739     '}'. 
     740     'pre, code, kbd, samp {'. 
     741     'font-family:"Courier New",Courier,monospace;'. 
     742     'font-size : 1.1em;'. 
     743     '}'. 
     744     'code {'. 
     745     'color : #666;'. 
     746     'font-weight : bold;'. 
     747     '}'. 
     748     'body > p:first-child {'. 
     749     'margin-top: 0;'. 
     750     '}'. 
     751     "'; ". 
     752     "jsToolBar.prototype.base_url = '".html::escapeJS($GLOBALS['core']->blog->host)."'; ". 
     753     "jsToolBar.prototype.switcher_visual_title = '".html::escapeJS(__('visual'))."'; ". 
     754     "jsToolBar.prototype.switcher_source_title = '".html::escapeJS(__('source'))."'; ". 
     755     "jsToolBar.prototype.legend_msg = '". 
     756     html::escapeJS(__('You can use the following shortcuts to format your text.'))."'; ". 
     757     "jsToolBar.prototype.elements.blocks.options.none = '".html::escapeJS(__('-- none --'))."'; ". 
     758     "jsToolBar.prototype.elements.blocks.options.nonebis = '".html::escapeJS(__('-- block format --'))."'; ". 
     759     "jsToolBar.prototype.elements.blocks.options.p = '".html::escapeJS(__('Paragraph'))."'; ". 
     760     "jsToolBar.prototype.elements.blocks.options.h1 = '".html::escapeJS(__('Level 1 header'))."'; ". 
     761     "jsToolBar.prototype.elements.blocks.options.h2 = '".html::escapeJS(__('Level 2 header'))."'; ". 
     762     "jsToolBar.prototype.elements.blocks.options.h3 = '".html::escapeJS(__('Level 3 header'))."'; ". 
     763     "jsToolBar.prototype.elements.blocks.options.h4 = '".html::escapeJS(__('Level 4 header'))."'; ". 
     764     "jsToolBar.prototype.elements.blocks.options.h5 = '".html::escapeJS(__('Level 5 header'))."'; ". 
     765     "jsToolBar.prototype.elements.blocks.options.h6 = '".html::escapeJS(__('Level 6 header'))."'; ". 
     766     "jsToolBar.prototype.elements.strong.title = '".html::escapeJS(__('Strong emphasis'))."'; ". 
     767     "jsToolBar.prototype.elements.em.title = '".html::escapeJS(__('Emphasis'))."'; ". 
     768     "jsToolBar.prototype.elements.ins.title = '".html::escapeJS(__('Inserted'))."'; ". 
     769     "jsToolBar.prototype.elements.del.title = '".html::escapeJS(__('Deleted'))."'; ". 
     770     "jsToolBar.prototype.elements.quote.title = '".html::escapeJS(__('Inline quote'))."'; ". 
     771     "jsToolBar.prototype.elements.code.title = '".html::escapeJS(__('Code'))."'; ". 
     772     "jsToolBar.prototype.elements.br.title = '".html::escapeJS(__('Line break'))."'; ". 
     773     "jsToolBar.prototype.elements.blockquote.title = '".html::escapeJS(__('Blockquote'))."'; ". 
     774     "jsToolBar.prototype.elements.pre.title = '".html::escapeJS(__('Preformated text'))."'; ". 
     775     "jsToolBar.prototype.elements.ul.title = '".html::escapeJS(__('Unordered list'))."'; ". 
     776     "jsToolBar.prototype.elements.ol.title = '".html::escapeJS(__('Ordered list'))."'; ". 
     777 
     778     "jsToolBar.prototype.elements.link.title = '".html::escapeJS(__('Link'))."'; ". 
     779     "jsToolBar.prototype.elements.link.href_prompt = '".html::escapeJS(__('URL?'))."'; ". 
     780     "jsToolBar.prototype.elements.link.hreflang_prompt = '".html::escapeJS(__('Language?'))."'; ". 
     781 
     782     "jsToolBar.prototype.elements.img.title = '".html::escapeJS(__('External image'))."'; ". 
     783     "jsToolBar.prototype.elements.img.src_prompt = '".html::escapeJS(__('URL?'))."'; ". 
     784 
     785     "jsToolBar.prototype.elements.img_select.title = '".html::escapeJS(__('Media chooser'))."'; ". 
     786     "jsToolBar.prototype.elements.post_link.title = '".html::escapeJS(__('Link to an entry'))."'; "; 
     787 
     788     if (!$GLOBALS['core']->auth->check('media,media_admin',$GLOBALS['core']->blog->id)) { 
     789          $res .= "jsToolBar.prototype.elements.img_select.disabled = true;\n"; 
     790     } 
     791 
     792     $res .= 
     793     "\n//]]>\n". 
     794     "</script>\n"; 
     795 
     796     return $res; 
     797} 
     798 
     799public static function jsUpload($params=array(),$base_url=null) 
     800{ 
     801     if (!$base_url) { 
     802          $base_url = path::clean(dirname(preg_replace('/(\?.*$)?/','',$_SERVER['REQUEST_URI']))).'/'; 
     803     } 
     804 
     805     $params = array_merge($params,array( 
     806          'sess_id='.session_id(), 
     807          'sess_uid='.$_SESSION['sess_browser_uid'], 
     808          'xd_check='.$GLOBALS['core']->getNonce() 
    668809          )); 
    669            
    670           return 
    671           '<link rel="stylesheet" type="text/css" href="style/candyUpload/style.css" />'."\n". 
    672           self::jsLoad('js/jquery/jquery.candyUpload.js'). 
    673            
    674           '<script type="text/javascript">'."\n". 
    675           "//<![CDATA[\n". 
    676           "dotclear.candyUpload = {};\n". 
    677           self::jsVar('dotclear.msg.activate_enhanced_uploader',__('Activate enhanced uploader')). 
    678           self::jsVar('dotclear.msg.disable_enhanced_uploader',__('Disable enhanced uploader')). 
    679           self::jsVar('$._candyUpload.prototype.locales.file_uploaded',__('File successfully uploaded.')). 
    680           self::jsVar('$._candyUpload.prototype.locales.max_file_size',__('Maximum file size allowed:')). 
    681           self::jsVar('$._candyUpload.prototype.locales.limit_exceeded',__('Limit exceeded.')). 
    682           self::jsVar('$._candyUpload.prototype.locales.size_limit_exceeded',__('File size exceeds allowed limit.')). 
    683           self::jsVar('$._candyUpload.prototype.locales.canceled',__('Canceled.')). 
    684           self::jsVar('$._candyUpload.prototype.locales.http_error',__('HTTP Error:')). 
    685           self::jsVar('$._candyUpload.prototype.locales.error',__('Error:')). 
    686           self::jsVar('$._candyUpload.prototype.locales.choose_file',__('Choose file')). 
    687           self::jsVar('$._candyUpload.prototype.locales.choose_files',__('Choose files')). 
    688           self::jsVar('$._candyUpload.prototype.locales.cancel',__('Cancel')). 
    689           self::jsVar('$._candyUpload.prototype.locales.clean',__('Clean')). 
    690           self::jsVar('$._candyUpload.prototype.locales.upload',__('Upload')). 
    691           self::jsVar('$._candyUpload.prototype.locales.no_file_in_queue',__('No file in queue.')). 
    692           self::jsVar('$._candyUpload.prototype.locales.file_in_queue',__('1 file in queue.')). 
    693           self::jsVar('$._candyUpload.prototype.locales.files_in_queue',__('%d files in queue.')). 
    694           self::jsVar('$._candyUpload.prototype.locales.queue_error',__('Queue error:')). 
    695           self::jsVar('dotclear.candyUpload.base_url',$base_url). 
    696           self::jsVar('dotclear.candyUpload.movie_url',$base_url.'index.php?pf=swfupload.swf'). 
    697           self::jsVar('dotclear.candyUpload.params',implode('&',$params)). 
    698           "\n//]]>\n". 
    699           "</script>\n"; 
    700      } 
    701       
    702      public static function jsToolMan() 
    703      { 
    704           return 
    705           '<script type="text/javascript" src="js/tool-man/core.js"></script>'. 
    706           '<script type="text/javascript" src="js/tool-man/events.js"></script>'. 
    707           '<script type="text/javascript" src="js/tool-man/css.js"></script>'. 
    708           '<script type="text/javascript" src="js/tool-man/coordinates.js"></script>'. 
    709           '<script type="text/javascript" src="js/tool-man/drag.js"></script>'. 
    710           '<script type="text/javascript" src="js/tool-man/dragsort.js"></script>'. 
    711           '<script type="text/javascript" src="js/dragsort-tablerows.js"></script>'; 
    712      } 
    713       
    714      public static function jsMetaEditor() 
    715      { 
    716           return 
    717           '<script type="text/javascript" src="js/meta-editor.js"></script>'; 
    718      } 
     810 
     811     return 
     812     '<link rel="stylesheet" type="text/css" href="style/jsUpload/style.css" />'."\n". 
     813 
     814     '<script type="text/javascript">'."\n". 
     815     "//<![CDATA[\n". 
     816     "dotclear.jsUpload = {};\n". 
     817     "dotclear.jsUpload.msg = {};\n". 
     818     self::jsVar('dotclear.msg.enhanced_uploader_activate',__('Temporarily activate enhanced uploader')). 
     819     self::jsVar('dotclear.msg.enhanced_uploader_disable',__('Temporarily disable enhanced uploader')). 
     820     self::jsVar('dotclear.jsUpload.msg.limit_exceeded',__('Limit exceeded.')). 
     821     self::jsVar('dotclear.jsUpload.msg.size_limit_exceeded',__('File size exceeds allowed limit.')). 
     822     self::jsVar('dotclear.jsUpload.msg.canceled',__('Canceled.')). 
     823     self::jsVar('dotclear.jsUpload.msg.http_error',__('HTTP Error:')). 
     824     self::jsVar('dotclear.jsUpload.msg.error',__('Error:')). 
     825     self::jsVar('dotclear.jsUpload.msg.choose_file',__('Choose file')). 
     826     self::jsVar('dotclear.jsUpload.msg.choose_files',__('Choose files')). 
     827     self::jsVar('dotclear.jsUpload.msg.cancel',__('Cancel')). 
     828     self::jsVar('dotclear.jsUpload.msg.clean',__('Clean')). 
     829     self::jsVar('dotclear.jsUpload.msg.upload',__('Upload')). 
     830     self::jsVar('dotclear.jsUpload.msg.send',__('Send')). 
     831     self::jsVar('dotclear.jsUpload.msg.file_successfully_uploaded',__('File successfully uploaded.')). 
     832     self::jsVar('dotclear.jsUpload.msg.no_file_in_queue',__('No file in queue.')). 
     833     self::jsVar('dotclear.jsUpload.msg.file_in_queue',__('1 file in queue.')). 
     834     self::jsVar('dotclear.jsUpload.msg.files_in_queue',__('%d files in queue.')). 
     835     self::jsVar('dotclear.jsUpload.msg.queue_error',__('Queue error:')). 
     836     self::jsVar('dotclear.jsUpload.base_url',$base_url). 
     837     "\n//]]>\n". 
     838     "</script>\n". 
     839 
     840     self::jsLoad('js/jsUpload/vendor/jquery.ui.widget.js'). 
     841     self::jsLoad('js/jsUpload/tmpl.js'). 
     842     self::jsLoad('js/jsUpload/template-upload.js'). 
     843     self::jsLoad('js/jsUpload/template-download.js'). 
     844     self::jsLoad('js/jsUpload/load-image.js'). 
     845     self::jsLoad('js/jsUpload/jquery.iframe-transport.js'). 
     846     self::jsLoad('js/jsUpload/jquery.fileupload.js'). 
     847     self::jsLoad('js/jsUpload/jquery.fileupload-process.js'). 
     848     self::jsLoad('js/jsUpload/jquery.fileupload-resize.js'). 
     849     self::jsLoad('js/jsUpload/jquery.fileupload-ui.js'); 
     850} 
     851 
     852public static function jsToolMan() 
     853{ 
     854     return 
     855     '<script type="text/javascript" src="js/tool-man/core.js"></script>'. 
     856     '<script type="text/javascript" src="js/tool-man/events.js"></script>'. 
     857     '<script type="text/javascript" src="js/tool-man/css.js"></script>'. 
     858     '<script type="text/javascript" src="js/tool-man/coordinates.js"></script>'. 
     859     '<script type="text/javascript" src="js/tool-man/drag.js"></script>'. 
     860     '<script type="text/javascript" src="js/tool-man/dragsort.js"></script>'. 
     861     '<script type="text/javascript" src="js/dragsort-tablerows.js"></script>'; 
     862} 
     863 
     864public static function jsMetaEditor() 
     865{ 
     866     return 
     867     '<script type="text/javascript" src="js/meta-editor.js"></script>'; 
     868} 
    719869} 
    720870?> 
  • inc/admin/lib.dc.page.php

    r1778 r1793  
    206206          echo 
    207207          '</div>'."\n".      // End of #main-menu 
    208           '<div id="footer"><a href="http://dotclear.org/" title="'.$text.'"><img src="style/dc_logos/w-dotclear90.png" alt="'.$text.'" /></a></div>'."\n". 
     208          '<div id="footer">'. 
     209          '<span class="helplink"><a href="help.php">'.__('Global help').'</a></span> '. 
     210          '<a href="http://dotclear.org/" title="'.$text.'"><img src="style/dc_logos/w-dotclear90.png" alt="'.$text.'" /></a></div>'."\n". 
    209211          '<!-- '."\n". 
    210212'                  .'."\n". 
     
    434436          '<div id="help"><hr /><div class="help-content clear"><h3>'.__('Help about this page').'</h3>'. 
    435437          $content. 
     438          '</div>'. 
     439          '<div id="helplink"><hr />'. 
     440          '<p>'. 
     441          sprintf(__('See also %s'),sprintf('<a href="help.php">%s</a>',__('the global help'))). 
     442          '</p>'. 
    436443          '</div></div>'; 
    437444     } 
  • inc/admin/prepend.php

    r494 r1793  
    44# This file is part of Dotclear 2. 
    55# 
    6 # Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear 
     6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear 
    77# Licensed under the GPL version 2.0 license. 
    88# See LICENSE file or 
     
    1111# -- END LICENSE BLOCK ----------------------------------------- 
    1212 
     13define('DC_CONTEXT_ADMIN',true); 
     14 
    1315require_once dirname(__FILE__).'/../prepend.php'; 
    1416 
     
    1921// HTTP/1.0 
    2022header("Pragma: no-cache"); 
    21  
    22 define('DC_CONTEXT_ADMIN',true); 
    2323 
    2424function dc_valid_fav($url) { 
     
    3737function dc_prepare_url($url) { 
    3838 
    39      $u = str_replace(array('?','&amp;'),array('\?','&'),$url); 
     39     $u = str_replace(array('?','&amp;','/'),array('\?','&','\\/'),$url); 
    4040     return (!strpos($u,'\?') ?  
    4141          '/'.$u.'$/' : 
     
    5555     } 
    5656     l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/main'); 
     57     l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/public'); 
    5758     l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/plugins'); 
     59} 
     60 
     61function dc_admin_icon_url($img) 
     62{ 
     63     global $core; 
     64      
     65     $core->auth->user_prefs->addWorkspace('interface'); 
     66     $user_ui_iconset = @$core->auth->user_prefs->interface->iconset; 
     67     if (($user_ui_iconset) && ($img)) { 
     68          $icon = false; 
     69          if ((preg_match('/^images\/menu\/(.+)$/',$img,$m)) ||  
     70               (preg_match('/^index\.php\?pf=(.+)$/',$img,$m))) { 
     71               if ($m[1]) { 
     72                    $icon = path::real(dirname(__FILE__).'/../../admin/images/iconset/'.$user_ui_iconset.'/'.$m[1],false); 
     73                    if ($icon !== false) { 
     74                         $allow_types = array('png','jpg','jpeg','gif'); 
     75                         if (is_file($icon) && is_readable($icon) && in_array(files::getExtension($icon),$allow_types)) { 
     76                              return DC_ADMIN_URL.'images/iconset/'.$user_ui_iconset.'/'.$m[1]; 
     77                         } 
     78                    } 
     79               } 
     80          } 
     81     } 
     82     return $img; 
    5883} 
    5984 
     
    191216     } 
    192217     unset($hfiles,$locales_root); 
     218 
     219     $core->auth->user_prefs->addWorkspace('interface'); 
     220     $user_ui_nofavmenu = $core->auth->user_prefs->interface->nofavmenu; 
    193221 
    194222     # Standard favorites 
     
    233261          'images/menu/users.png','images/menu/users-b.png', 
    234262          null,null,null)); 
    235      $_fav['plugins'] = new ArrayObject(array('plugins','Plugins','plugins.php', 
     263     $_fav['plugins'] = new ArrayObject(array('plugins','Plugins management','plugins.php', 
    236264          'images/menu/plugins.png','images/menu/plugins-b.png', 
    237265          null,null,null)); 
     
    246274     # Menus creation 
    247275     $_menu['Dashboard'] = new dcMenu('dashboard-menu',null); 
    248      $_menu['Favorites'] = new dcMenu('favorites-menu','My favorites'); 
     276     if (!$user_ui_nofavmenu) 
     277          $_menu['Favorites'] = new dcMenu('favorites-menu','My favorites'); 
    249278     $_menu['Blog'] = new dcMenu('blog-menu','Blog'); 
    250279     $_menu['System'] = new dcMenu('system-menu','System'); 
     
    259288     # Set menu titles 
    260289      
    261      $_menu['System']->title = __('System'); 
     290     $_menu['System']->title = __('System settings'); 
    262291     $_menu['Blog']->title = __('Blog'); 
    263292     $_menu['Plugins']->title = __('Plugins'); 
    264      $_menu['Favorites']->title = __('My favorites'); 
     293     if (!$user_ui_nofavmenu) 
     294          $_menu['Favorites']->title = __('My favorites'); 
    265295 
    266296/*    
     
    296326          $core->auth->check('usage,contentadmin',$core->blog->id),'menu-new-post'); 
    297327      
    298      $_menu['System']->prependItem(__('Updates'),'update.php','images/menu/update.png', 
     328     $_menu['System']->prependItem(__('Update'),'update.php','images/menu/update.png', 
    299329          preg_match('/update.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
    300330          $core->auth->isSuperAdmin() && is_readable(DC_DIGESTS)); 
     
    302332          preg_match('/langs.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
    303333          $core->auth->isSuperAdmin()); 
    304      $_menu['System']->prependItem(__('Plugins'),'plugins.php','images/menu/plugins.png', 
     334     $_menu['System']->prependItem(__('Plugins management'),'plugins.php','images/menu/plugins.png', 
    305335          preg_match('/plugins.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
    306336          $core->auth->isSuperAdmin()); 
     
    313343          $core->auth->check('usage,contentadmin',$core->blog->id) && $core->auth->blog_count > 1); 
    314344 
    315      // Set favorites menu 
    316      $ws = $core->auth->user_prefs->addWorkspace('favorites'); 
    317      $count = 0; 
    318      foreach ($ws->dumpPrefs() as $k => $v) { 
    319           // User favorites only 
    320           if (!$v['global']) { 
    321                $fav = unserialize($v['value']); 
    322                if (dc_valid_fav($fav['url'])) { 
    323                     $count++; 
    324                     $_menu['Favorites']->addItem(__($fav['title']),$fav['url'],$fav['small-icon'], 
    325                          preg_match(dc_prepare_url($fav['url']),$_SERVER['REQUEST_URI']), 
    326                          (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)),$fav['id'],$fav['class']); 
    327                } 
    328           } 
    329      }     
    330      if (!$count) { 
    331           // Global favorites if any 
     345     if (!$user_ui_nofavmenu) { 
     346          // Set favorites menu 
     347          $ws = $core->auth->user_prefs->addWorkspace('favorites'); 
     348          $count = 0; 
    332349          foreach ($ws->dumpPrefs() as $k => $v) { 
    333                $fav = unserialize($v['value']); 
    334                if (dc_valid_fav($fav['url'])) { 
    335                     $count++; 
    336                     $_menu['Favorites']->addItem(__($fav['title']),$fav['url'],$fav['small-icon'], 
    337                          preg_match(dc_prepare_url($fav['url']),$_SERVER['REQUEST_URI']), 
    338                          (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)),$fav['id'],$fav['class']); 
    339                } 
    340           } 
    341      } 
    342      if (!$count) { 
    343           // No user or global favorites, add "new entry" fav 
    344           $_menu['Favorites']->addItem(__('New entry'),'post.php','images/menu/edit.png', 
    345                preg_match('/post.php$/',$_SERVER['REQUEST_URI']), 
    346                $core->auth->check('usage,contentadmin',$core->blog->id),'menu-new-post',null); 
     350               // User favorites only 
     351               if (!$v['global']) { 
     352                    $fav = unserialize($v['value']); 
     353                    if (dc_valid_fav($fav['url'])) { 
     354                         $count++; 
     355                         $_menu['Favorites']->addItem(__($fav['title']),$fav['url'],$fav['small-icon'], 
     356                              preg_match(dc_prepare_url($fav['url']),$_SERVER['REQUEST_URI']), 
     357                              (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)),$fav['id'],$fav['class']); 
     358                    } 
     359               } 
     360          }     
     361          if (!$count) { 
     362               // Global favorites if any 
     363               foreach ($ws->dumpPrefs() as $k => $v) { 
     364                    $fav = unserialize($v['value']); 
     365                    if (dc_valid_fav($fav['url'])) { 
     366                         $count++; 
     367                         $_menu['Favorites']->addItem(__($fav['title']),$fav['url'],$fav['small-icon'], 
     368                              preg_match(dc_prepare_url($fav['url']),$_SERVER['REQUEST_URI']), 
     369                              (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)),$fav['id'],$fav['class']); 
     370                    } 
     371               } 
     372          } 
     373          if (!$count) { 
     374               // No user or global favorites, add "new entry" fav 
     375               $_menu['Favorites']->addItem(__('New entry'),'post.php','images/menu/edit.png', 
     376                    preg_match('/post.php$/',$_SERVER['REQUEST_URI']), 
     377                    $core->auth->check('usage,contentadmin',$core->blog->id),'menu-new-post',null); 
     378          } 
     379     } 
     380      
     381     if (empty($core->blog->settings->system->jquery_migrate_mute)) { 
     382          $core->blog->settings->system->put('jquery_migrate_mute', true, 'boolean', 'Mute warnings for jquery migrate plugin ?', false); 
    347383     } 
    348384} 
  • inc/admin/prepend.php

    r1771 r1793  
    267267          'images/menu/langs.png','images/menu/langs-b.png', 
    268268          null,null,null)); 
     269 
     270     $_fav['help'] = new ArrayObject(array('help','Global help','help.php', 
     271          'images/menu/help.png','images/menu/help-b.png', 
     272          '*',null,null)); 
    269273      
    270274     # Menus creation 
Note: See TracChangeset for help on using the changeset viewer.

Sites map