Dotclear

Changeset 2911:5434e75ad738 for inc


Ignore:
Timestamp:
01/07/15 12:55:08 (11 years ago)
Author:
Dsls
Branch:
twig
Parents:
2715:a87ddf7dbfb5 (diff), 2910:69efb1571e90 (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 with default

Location:
inc
Files:
13 edited

Legend:

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

    r2650 r2911  
    1717{ 
    1818     private static $loaded_js = array(); 
     19     private static $xframe_loaded = false; 
    1920     private static $N_TYPES = array( 
    2021          "success" => "success",  
     
    5455 
    5556     # Top of admin page 
    56      public static function open($title='',$head='',$breadcrumb='') 
     57     public static function open($title='',$head='',$breadcrumb='',$options=array()) 
    5758     { 
    5859          global $core; 
     
    6667 
    6768               if ($core->auth->getBlogCount() > 20) { 
    68                     $blog_box .= ' - <a href="blogs.php">'.__('Change blog').'</a>'; 
     69                    $blog_box .= ' - <a href="'.$core->adminurl->get("admin.blogs").'">'.__('Change blog').'</a>'; 
    6970               } 
    7071               $blog_box .= '</p>'; 
     
    8990          # Display 
    9091          header('Content-Type: text/html; charset=UTF-8'); 
    91           echo 
    92           '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '. 
    93           ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n". 
    94           '<html xmlns="http://www.w3.org/1999/xhtml" '. 
    95           'xml:lang="'.$core->auth->getInfo('user_lang').'" '. 
    96           'lang="'.$core->auth->getInfo('user_lang').'">'."\n". 
     92 
     93          // Prevents Clickjacking as far as possible 
     94          if (isset($options['x-frame-allow'])) { 
     95               self::setXFrameOptions($options['x-frame-allow']); 
     96          } else { 
     97               self::setXFrameOptions(); 
     98          } 
     99          echo 
     100          '<!DOCTYPE html>'. 
     101          '<html lang="'.$core->auth->getInfo('user_lang').'">'."\n". 
    97102          "<head>\n". 
    98           '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n". 
     103          '  <meta charset="UTF-8" />'."\n". 
    99104          '  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n". 
    100105          '  <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n". 
     
    137142          '<li><a href="#help">'.__('Go to help').'</a></li>'. 
    138143          '</ul>'."\n". 
    139           '<div id="header">'. 
    140           '<h1><a href="index.php"><span class="hidden">'.DC_VENDOR_NAME.'</span></a></h1>'."\n"; 
    141  
    142           echo 
    143           '<form action="index.php" method="post" id="top-info-blog">'. 
     144          '<div id="header" role="banner">'. 
     145          '<h1><a href="'.$core->adminurl->get("admin.home").'"><span class="hidden">'.DC_VENDOR_NAME.'</span></a></h1>'."\n"; 
     146 
     147          echo 
     148          '<form action="'.$core->adminurl->get("admin.home").'" method="post" id="top-info-blog">'. 
    144149          $blog_box. 
    145150          '<p><a href="'.$core->blog->url.'" class="outgoing" title="'.__('Go to site'). 
     
    147152          '</p></form>'. 
    148153          '<ul id="top-info-user">'. 
    149           '<li><a class="'.(preg_match('/index.php$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="index.php">'.__('My dashboard').'</a></li>'. 
    150           '<li><a class="smallscreen'.(preg_match('/preferences.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' active' : ''). 
    151           '" href="preferences.php">'.__('My preferences').'</a></li>'. 
    152           '<li><a href="index.php?logout=1" class="logout"><span class="nomobile">'.sprintf(__('Logout %s'),$core->auth->userID()). 
     154          '<li><a class="'.(preg_match('/'.preg_quote($core->adminurl->get('admin.home')).'$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="'.$core->adminurl->get("admin.home").'">'.__('My dashboard').'</a></li>'. 
     155          '<li><a class="smallscreen'.(preg_match('/'.preg_quote($core->adminurl->get('admin.user.preferences')).'(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' active' : ''). 
     156          '" href="'.$core->adminurl->get("admin.user.preferences").'">'.__('My preferences').'</a></li>'. 
     157          '<li><a href="'.$core->adminurl->get("admin.home",array('logout' => 1)).'" class="logout"><span class="nomobile">'.sprintf(__('Logout %s'),$core->auth->userID()). 
    153158          '</span><img src="images/logout.png" alt="" /></a></li>'. 
    154159          '</ul>'. 
     
    161166          '<img class="expand-mm" src="images/collapser-show.png" alt="'.__('Show main menu').'" />'. 
    162167          '</a></div>'. 
    163           '<div id="main">'."\n". 
     168          '<div id="main" role="main">'."\n". 
    164169          '<div id="content" class="clearfix">'."\n"; 
    165170 
     
    168173          { 
    169174               echo 
    170                '<div class="warning"><h3>'.__('Safe mode').'</h3>'. 
     175               '<div class="warning" role="alert"><h3>'.__('Safe mode').'</h3>'. 
    171176               '<p>'.__('You are in safe mode. All plugins have been temporarily disabled. Remind to log out then log in again normally to get back all functionalities').'</p>'. 
    172177               '</div>'; 
     
    246251               $ts = dt::str(__('[%H:%M:%S]'),$n['ts'],$core->auth->getInfo('user_tz')).' '; 
    247252          } 
    248           $res = '<'.$tag.' class="'.$n['class'].'">'.$ts.$n['text'].'</'.$tag.'>'; 
     253          $res = '<'.$tag.' class="'.$n['class'].'" role="alert">'.$ts.$n['text'].'</'.$tag.'>'; 
    249254          return $res; 
    250255     } 
     
    256261          if (!$GLOBALS['__resources']['ctxhelp']) { 
    257262               echo 
    258                '<p id="help-button"><a href="help.php" class="outgoing" title="'. 
     263               '<p id="help-button"><a href="'.$core->adminurl->get("admin.help").'" class="outgoing" title="'. 
    259264               __('Global help').'">'.__('Global help').'</a></p>'; 
    260265          } 
     
    266271          "</div>\n".         // End of #main 
    267272 
    268           '<div id="main-menu">'."\n". 
    269  
    270           '<form id="search-menu" action="search.php" method="get">'. 
     273          '<div id="main-menu" role="navigation">'."\n". 
     274 
     275          '<form id="search-menu" action="'.$core->adminurl->get("admin.search").'" method="get" role="search">'. 
    271276          '<p><label for="qx" class="hidden">'.__('Search:').' </label>'.form::field('qx',30,255,''). 
    272277          '<input type="submit" value="'.__('OK').'" /></p>'. 
     
    291296 
    292297          echo 
    293           '<div id="footer">'. 
     298          '<div id="footer" role="contentinfo">'. 
    294299          '<a href="http://dotclear.org/" title="'.$text.'">'. 
    295300          '<img src="style/dc_logos/w-dotclear90.png" alt="'.$text.'" /></a></div>'."\n". 
    296         "<!-- \n                  \n               ,;:'`'::\n". 
    297           "            __||\n      _____/LLLL\_\n      \__________\"|\n". 
    298         "    ~^~^~^~^~^~^~^~^~^~\n -->\n"; 
     301          "<!-- "."\n". 
     302          "( \\"."\n". 
     303          " ) )"."\n". 
     304          "( (  .-\"\"-.  A.-.A"."\n". 
     305          " \ \/      \/ , , \\"."\n". 
     306          "  \   \    =;  t  /="."\n". 
     307          "   \   |\"\".  ',--'"."\n". 
     308          "    / //  | ||"."\n". 
     309          "   /_,))  |_,))"."\n". 
     310          " -->"."\n"; 
    299311 
    300312          if (defined('DC_DEV') && DC_DEV === true) { 
     
    312324          # Display 
    313325          header('Content-Type: text/html; charset=UTF-8'); 
    314           echo 
    315           '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '. 
    316           ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n". 
    317           '<html xmlns="http://www.w3.org/1999/xhtml" '. 
    318           'xml:lang="'.$core->auth->getInfo('user_lang').'" '. 
    319           'lang="'.$core->auth->getInfo('user_lang').'">'."\n". 
     326 
     327          // Prevents Clickjacking as far as possible 
     328          header('X-Frame-Options: SAMEORIGIN'); // FF 3.6.9+ Chrome 4.1+ IE 8+ Safari 4+ Opera 10.5+ 
     329 
     330          echo 
     331          '<!DOCTYPE html>'. 
     332          '<html lang="'.$core->auth->getInfo('user_lang').'">'."\n". 
    320333          "<head>\n". 
     334          '  <meta charset="UTF-8" />'."\n". 
    321335          '  <meta name="viewport" content="width=device-width, initial-scale=1.0" />'."\n". 
    322           '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n". 
    323336          '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n". 
    324337 
     
    349362          echo 
    350363          '<div id="wrapper">'."\n". 
    351           '<div id="main">'."\n". 
     364          '<div id="main" role="main">'."\n". 
    352365          '<div id="content">'."\n"; 
    353366 
     
    357370          if ($core->error->flag()) { 
    358371               echo 
    359                '<div class="error"><strong>'.__('Errors:').'</strong>'. 
     372               '<div class="error" role="alert"><strong>'.__('Errors:').'</strong>'. 
    360373               $core->error->toHTML(). 
    361374               '</div>'; 
     
    369382          "</div>\n".         // End of #main 
    370383          "</div>\n".         // End of #wrapper 
    371           '<div id="footer"><p>&nbsp;</p></div>'."\n". 
     384          '<div id="footer" role="contentinfo"><p>&nbsp;</p></div>'."\n". 
    372385          '</body></html>'; 
    373386     } 
     
    375388     public static function breadcrumb($elements=null,$options=array()) 
    376389     { 
     390          global $core; 
    377391          $with_home_link = isset($options['home_link'])?$options['home_link']:true; 
    378392          $hl = isset($options['hl'])?$options['hl']:true; 
     
    380394          // First item of array elements should be blog's name, System or Plugins 
    381395          $res = '<h2>'.($with_home_link ? 
    382                '<a class="go_home" href="index.php"><img src="style/dashboard.png" alt="'.__('Go to dashboard').'" /></a>' : 
     396               '<a class="go_home" href="'.$core->adminurl->get("admin.home").'"><img src="style/dashboard.png" alt="'.__('Go to dashboard').'" /></a>' : 
    383397               '<img src="style/dashboard-alt.png" alt="" />'); 
    384398          $index = 0; 
     
    474488     public static function helpBlock() 
    475489     { 
     490          global $core; 
    476491          $args = func_get_args(); 
    477492 
     
    527542          '<div id="helplink"><hr />'. 
    528543          '<p>'. 
    529           sprintf(__('See also %s'),sprintf('<a href="help.php">%s</a>',__('the global help'))). 
     544          sprintf(__('See also %s'),sprintf('<a href="'.$core->adminurl->get("admin.help").'">%s</a>',__('the global help'))). 
    530545          '.</p>'. 
    531546          '</div></div>'; 
     
    823838 
    824839     "datePicker.prototype.img_src = 'images/date-picker.png'; ". 
     840          "datePicker.prototype.img_alt = '".html::escapeJS(__('Choose date'))."'; ". 
    825841 
    826842     "datePicker.prototype.close_msg = '".html::escapeJS(__('close'))."'; ". 
     
    905921     '<script type="text/javascript" src="js/meta-editor.js"></script>'; 
    906922     } 
     923 
     924     public static function getPF($file) { 
     925          return $GLOBALS['core']->adminurl->get('load.plugin.file',array('pf' => $file)); 
     926     } 
     927 
     928     public static function setXFrameOptions($origin=null) { 
     929          if (self::$xframe_loaded) { 
     930               return; 
     931          } 
     932          if ($origin !== null) { 
     933               $url = parse_url($origin); 
     934               header(sprintf('X-Frame-Options: %s', is_array($url)?($url['scheme'].'://'.$url['host']):'SAMEORIGIN')); 
     935          } else { 
     936               header('X-Frame-Options: SAMEORIGIN'); // FF 3.6.9+ Chrome 4.1+ IE 8+ Safari 4+ Opera 10.5+ 
     937          } 
     938          self::$xframe_loaded = true; 
     939 
     940     } 
    907941} 
  • inc/admin/lib.dc.page.php

    r2909 r2911  
    1919     private static $xframe_loaded = false; 
    2020     private static $N_TYPES = array( 
    21           "success" => "success", 
    22           "warning" => "warning-msg", 
    23           "error" => "error", 
    24           "message" => "message", 
     21          "success" => "success",  
     22          "warning" => "warning-msg",  
     23          "error" => "error",  
     24          "message" => "message",  
    2525          "static" => "static-msg"); 
    2626 
     
    109109 
    110110          self::jsLoadIE7(). 
    111           '  <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 
     111          '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 
    112112          if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { 
    113113               echo 
    114                '  <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 
     114               '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 
    115115          } 
    116116 
     
    118118          $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon; 
    119119          if (!$user_ui_hide_std_favicon) { 
    120                echo 
     120               echo  
    121121               '<link rel="icon" type="image/png" href="images/favicon96-login.png" />'. 
    122122               '<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />'; 
    123123          } 
     124 
    124125          echo 
    125126          self::jsCommon(). 
     
    217218               $notifications = array(); 
    218219          } 
    219  
     220           
    220221          $n = array_merge($options,array('class' => $class,'ts' => time(), 'text' => $message)); 
    221222          if ($type != "static") { 
     
    339340 
    340341          self::jsLoadIE7(). 
    341           '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 
     342          '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 
    342343          if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { 
    343344               echo 
    344                '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 
     345               '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 
    345346          } 
    346347 
     
    580581                    "</script>\n"; 
    581582     } 
    582  
     583      
    583584     public static function jsCommon() 
    584585     { 
     
    606607          'jsToolBar = {}, jsToolBar.prototype = { elements : {} };'."\n". 
    607608          self::jsVar('dotclear.nonce',$GLOBALS['core']->getNonce()). 
     609 
    608610          self::jsVar('dotclear.img_plus_src','images/expand.png'). 
    609611          self::jsVar('dotclear.img_plus_alt',__('uncover')). 
     
    725727          self::jsVar('dotclear.msg.module_tags', 
    726728               __('Tags:')). 
    727                "\n//]]>\n". 
     729          "\n//]]>\n". 
    728730          "</script>\n"; 
    729731     } 
     
    787789     public static function jsModal() 
    788790     { 
    789           return 
    790           '<link rel="stylesheet" type="text/css" href="style/modal/modal.css" />'."\n". 
    791           self::jsLoad('js/jquery/jquery.modal.js'). 
    792           '<script type="text/javascript">'."\n". 
    793           "//<![CDATA[\n". 
    794           self::jsVar('$.modal.prototype.params.loader_img','style/modal/loader.gif'). 
    795           self::jsVar('$.modal.prototype.params.close_img','style/modal/close.png'). 
    796           "\n//]]>\n". 
    797           "</script>\n"; 
     791     return 
     792     '<link rel="stylesheet" type="text/css" href="style/modal/modal.css" />'."\n". 
     793     self::jsLoad('js/jquery/jquery.modal.js'). 
     794     '<script type="text/javascript">'."\n". 
     795     "//<![CDATA[\n". 
     796     self::jsVar('$.modal.prototype.params.loader_img','style/modal/loader.gif'). 
     797     self::jsVar('$.modal.prototype.params.close_img','style/modal/close.png'). 
     798     "\n//]]>\n". 
     799     "</script>\n"; 
    798800     } 
    799801 
    800802     public static function jsColorPicker() 
    801803     { 
    802           return 
    803           '<link rel="stylesheet" type="text/css" href="style/farbtastic/farbtastic.css" />'."\n". 
    804           self::jsLoad('js/jquery/jquery.farbtastic.js'). 
    805           self::jsLoad('js/color-picker.js'); 
     804     return 
     805     '<link rel="stylesheet" type="text/css" href="style/farbtastic/farbtastic.css" />'."\n". 
     806     self::jsLoad('js/jquery/jquery.farbtastic.js'). 
     807     self::jsLoad('js/color-picker.js'); 
    806808     } 
    807809 
    808810     public static function jsDatePicker() 
    809811     { 
    810           return 
    811           '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n". 
    812           self::jsLoad('js/date-picker.js'). 
    813           '<script type="text/javascript">'."\n". 
    814           "//<![CDATA[\n". 
    815  
    816           "datePicker.prototype.months[0] = '".html::escapeJS(__('January'))."'; ". 
    817           "datePicker.prototype.months[1] = '".html::escapeJS(__('February'))."'; ". 
    818           "datePicker.prototype.months[2] = '".html::escapeJS(__('March'))."'; ". 
    819           "datePicker.prototype.months[3] = '".html::escapeJS(__('April'))."'; ". 
    820           "datePicker.prototype.months[4] = '".html::escapeJS(__('May'))."'; ". 
    821           "datePicker.prototype.months[5] = '".html::escapeJS(__('June'))."'; ". 
    822           "datePicker.prototype.months[6] = '".html::escapeJS(__('July'))."'; ". 
    823           "datePicker.prototype.months[7] = '".html::escapeJS(__('August'))."'; ". 
    824           "datePicker.prototype.months[8] = '".html::escapeJS(__('September'))."'; ". 
    825           "datePicker.prototype.months[9] = '".html::escapeJS(__('October'))."'; ". 
    826           "datePicker.prototype.months[10] = '".html::escapeJS(__('November'))."'; ". 
    827           "datePicker.prototype.months[11] = '".html::escapeJS(__('December'))."'; ". 
    828  
    829           "datePicker.prototype.days[0] = '".html::escapeJS(__('Monday'))."'; ". 
    830           "datePicker.prototype.days[1] = '".html::escapeJS(__('Tuesday'))."'; ". 
    831           "datePicker.prototype.days[2] = '".html::escapeJS(__('Wednesday'))."'; ". 
    832           "datePicker.prototype.days[3] = '".html::escapeJS(__('Thursday'))."'; ". 
    833           "datePicker.prototype.days[4] = '".html::escapeJS(__('Friday'))."'; ". 
    834           "datePicker.prototype.days[5] = '".html::escapeJS(__('Saturday'))."'; ". 
    835           "datePicker.prototype.days[6] = '".html::escapeJS(__('Sunday'))."'; ". 
    836  
    837           "datePicker.prototype.img_src = 'images/date-picker.png'; ". 
     812     return 
     813     '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n". 
     814     self::jsLoad('js/date-picker.js'). 
     815     '<script type="text/javascript">'."\n". 
     816     "//<![CDATA[\n". 
     817 
     818     "datePicker.prototype.months[0] = '".html::escapeJS(__('January'))."'; ". 
     819     "datePicker.prototype.months[1] = '".html::escapeJS(__('February'))."'; ". 
     820     "datePicker.prototype.months[2] = '".html::escapeJS(__('March'))."'; ". 
     821     "datePicker.prototype.months[3] = '".html::escapeJS(__('April'))."'; ". 
     822     "datePicker.prototype.months[4] = '".html::escapeJS(__('May'))."'; ". 
     823     "datePicker.prototype.months[5] = '".html::escapeJS(__('June'))."'; ". 
     824     "datePicker.prototype.months[6] = '".html::escapeJS(__('July'))."'; ". 
     825     "datePicker.prototype.months[7] = '".html::escapeJS(__('August'))."'; ". 
     826     "datePicker.prototype.months[8] = '".html::escapeJS(__('September'))."'; ". 
     827     "datePicker.prototype.months[9] = '".html::escapeJS(__('October'))."'; ". 
     828     "datePicker.prototype.months[10] = '".html::escapeJS(__('November'))."'; ". 
     829     "datePicker.prototype.months[11] = '".html::escapeJS(__('December'))."'; ". 
     830 
     831     "datePicker.prototype.days[0] = '".html::escapeJS(__('Monday'))."'; ". 
     832     "datePicker.prototype.days[1] = '".html::escapeJS(__('Tuesday'))."'; ". 
     833     "datePicker.prototype.days[2] = '".html::escapeJS(__('Wednesday'))."'; ". 
     834     "datePicker.prototype.days[3] = '".html::escapeJS(__('Thursday'))."'; ". 
     835     "datePicker.prototype.days[4] = '".html::escapeJS(__('Friday'))."'; ". 
     836     "datePicker.prototype.days[5] = '".html::escapeJS(__('Saturday'))."'; ". 
     837     "datePicker.prototype.days[6] = '".html::escapeJS(__('Sunday'))."'; ". 
     838 
     839     "datePicker.prototype.img_src = 'images/date-picker.png'; ". 
    838840          "datePicker.prototype.img_alt = '".html::escapeJS(__('Choose date'))."'; ". 
    839841 
    840           "datePicker.prototype.close_msg = '".html::escapeJS(__('close'))."'; ". 
    841           "datePicker.prototype.now_msg = '".html::escapeJS(__('now'))."'; ". 
    842  
    843           "\n//]]>\n". 
    844           "</script>\n"; 
    845      } 
    846  
    847  
     842     "datePicker.prototype.close_msg = '".html::escapeJS(__('close'))."'; ". 
     843     "datePicker.prototype.now_msg = '".html::escapeJS(__('now'))."'; ". 
     844 
     845     "\n//]]>\n". 
     846     "</script>\n"; 
     847     } 
     848 
     849      
    848850     public static function jsToolBar() 
    849851     { 
     
    853855     public static function jsUpload($params=array(),$base_url=null) 
    854856     { 
    855           if (!$base_url) { 
    856                $base_url = path::clean(dirname(preg_replace('/(\?.*$)?/','',$_SERVER['REQUEST_URI']))).'/'; 
    857           } 
    858  
    859           $params = array_merge($params,array( 
    860                'sess_id='.session_id(), 
    861                'sess_uid='.$_SESSION['sess_browser_uid'], 
    862                'xd_check='.$GLOBALS['core']->getNonce() 
     857     if (!$base_url) { 
     858          $base_url = path::clean(dirname(preg_replace('/(\?.*$)?/','',$_SERVER['REQUEST_URI']))).'/'; 
     859     } 
     860 
     861     $params = array_merge($params,array( 
     862          'sess_id='.session_id(), 
     863          'sess_uid='.$_SESSION['sess_browser_uid'], 
     864          'xd_check='.$GLOBALS['core']->getNonce() 
    863865          )); 
    864866 
    865           return 
    866           '<script type="text/javascript">'."\n". 
    867           "//<![CDATA[\n". 
    868           "dotclear.jsUpload = {};\n". 
    869           "dotclear.jsUpload.msg = {};\n". 
    870           self::jsVar('dotclear.msg.enhanced_uploader_activate',__('Temporarily activate enhanced uploader')). 
    871           self::jsVar('dotclear.msg.enhanced_uploader_disable',__('Temporarily disable enhanced uploader')). 
    872           self::jsVar('dotclear.jsUpload.msg.limit_exceeded',__('Limit exceeded.')). 
    873           self::jsVar('dotclear.jsUpload.msg.size_limit_exceeded',__('File size exceeds allowed limit.')). 
    874           self::jsVar('dotclear.jsUpload.msg.canceled',__('Canceled.')). 
    875           self::jsVar('dotclear.jsUpload.msg.http_error',__('HTTP Error:')). 
    876           self::jsVar('dotclear.jsUpload.msg.error',__('Error:')). 
    877           self::jsVar('dotclear.jsUpload.msg.choose_file',__('Choose file')). 
    878           self::jsVar('dotclear.jsUpload.msg.choose_files',__('Choose files')). 
    879           self::jsVar('dotclear.jsUpload.msg.cancel',__('Cancel')). 
    880           self::jsVar('dotclear.jsUpload.msg.clean',__('Clean')). 
    881           self::jsVar('dotclear.jsUpload.msg.upload',__('Upload')). 
     867     return 
     868     '<script type="text/javascript">'."\n". 
     869     "//<![CDATA[\n". 
     870     "dotclear.jsUpload = {};\n". 
     871     "dotclear.jsUpload.msg = {};\n". 
     872     self::jsVar('dotclear.msg.enhanced_uploader_activate',__('Temporarily activate enhanced uploader')). 
     873     self::jsVar('dotclear.msg.enhanced_uploader_disable',__('Temporarily disable enhanced uploader')). 
     874     self::jsVar('dotclear.jsUpload.msg.limit_exceeded',__('Limit exceeded.')). 
     875     self::jsVar('dotclear.jsUpload.msg.size_limit_exceeded',__('File size exceeds allowed limit.')). 
     876     self::jsVar('dotclear.jsUpload.msg.canceled',__('Canceled.')). 
     877     self::jsVar('dotclear.jsUpload.msg.http_error',__('HTTP Error:')). 
     878     self::jsVar('dotclear.jsUpload.msg.error',__('Error:')). 
     879     self::jsVar('dotclear.jsUpload.msg.choose_file',__('Choose file')). 
     880     self::jsVar('dotclear.jsUpload.msg.choose_files',__('Choose files')). 
     881     self::jsVar('dotclear.jsUpload.msg.cancel',__('Cancel')). 
     882     self::jsVar('dotclear.jsUpload.msg.clean',__('Clean')). 
     883     self::jsVar('dotclear.jsUpload.msg.upload',__('Upload')). 
    882884          self::jsVar('dotclear.jsUpload.msg.send',__('Send')). 
    883885          self::jsVar('dotclear.jsUpload.msg.file_successfully_uploaded',__('File successfully uploaded.')). 
    884           self::jsVar('dotclear.jsUpload.msg.no_file_in_queue',__('No file in queue.')). 
    885           self::jsVar('dotclear.jsUpload.msg.file_in_queue',__('1 file in queue.')). 
    886           self::jsVar('dotclear.jsUpload.msg.files_in_queue',__('%d files in queue.')). 
    887           self::jsVar('dotclear.jsUpload.msg.queue_error',__('Queue error:')). 
    888           self::jsVar('dotclear.jsUpload.base_url',$base_url). 
    889           "\n//]]>\n". 
     886     self::jsVar('dotclear.jsUpload.msg.no_file_in_queue',__('No file in queue.')). 
     887     self::jsVar('dotclear.jsUpload.msg.file_in_queue',__('1 file in queue.')). 
     888     self::jsVar('dotclear.jsUpload.msg.files_in_queue',__('%d files in queue.')). 
     889     self::jsVar('dotclear.jsUpload.msg.queue_error',__('Queue error:')). 
     890     self::jsVar('dotclear.jsUpload.base_url',$base_url). 
     891     "\n//]]>\n". 
    890892          "</script>\n". 
    891893 
     
    904906     public static function jsToolMan() 
    905907     { 
    906           return 
    907           '<script type="text/javascript" src="js/tool-man/core.js"></script>'. 
    908           '<script type="text/javascript" src="js/tool-man/events.js"></script>'. 
    909           '<script type="text/javascript" src="js/tool-man/css.js"></script>'. 
    910           '<script type="text/javascript" src="js/tool-man/coordinates.js"></script>'. 
    911           '<script type="text/javascript" src="js/tool-man/drag.js"></script>'. 
    912           '<script type="text/javascript" src="js/tool-man/dragsort.js"></script>'. 
    913           '<script type="text/javascript" src="js/dragsort-tablerows.js"></script>'; 
     908     return 
     909     '<script type="text/javascript" src="js/tool-man/core.js"></script>'. 
     910     '<script type="text/javascript" src="js/tool-man/events.js"></script>'. 
     911     '<script type="text/javascript" src="js/tool-man/css.js"></script>'. 
     912     '<script type="text/javascript" src="js/tool-man/coordinates.js"></script>'. 
     913     '<script type="text/javascript" src="js/tool-man/drag.js"></script>'. 
     914     '<script type="text/javascript" src="js/tool-man/dragsort.js"></script>'. 
     915     '<script type="text/javascript" src="js/dragsort-tablerows.js"></script>'; 
    914916     } 
    915917 
    916918     public static function jsMetaEditor() 
    917919     { 
    918           return 
    919           '<script type="text/javascript" src="js/meta-editor.js"></script>'; 
     920     return 
     921     '<script type="text/javascript" src="js/meta-editor.js"></script>'; 
    920922     } 
    921923 
  • inc/admin/prepend.php

    r2715 r2911  
    6161} 
    6262 
     63function addMenuItem($section,$desc,$adminurl,$icon,$perm) 
     64{ 
     65     global $core,$_menu; 
     66 
     67     $url = $core->adminurl->get($adminurl); 
     68     $_menu[$section]->prependItem($desc,$url,$icon,preg_match('/'.preg_quote($url).'(\?.*)?$/',$_SERVER['REQUEST_URI']),$perm); 
     69} 
     70 
    6371if (defined('DC_AUTH_SESS_ID') && defined('DC_AUTH_SESS_UID')) 
    6472{ 
     
    120128     } 
    121129      
    122       
    123130     if (!empty($_REQUEST['switchblog']) 
    124131     && $core->auth->getPermissions($_REQUEST['switchblog']) !== false) 
     
    164171          http::redirect('auth.php'); 
    165172     } 
    166  
    167 /*    
    168      # Check add to my fav fired 
    169      if (!empty($_REQUEST['add-favorite'])) { 
    170           $redir = $_SERVER['REQUEST_URI']; 
    171           # Extract admin page from URI 
    172           # TO BE COMPLETED 
    173      } 
    174 */ 
    175173} 
    176174 
     
    179177$core->adminurl->register('admin.posts','posts.php'); 
    180178$core->adminurl->register('admin.post','post.php'); 
     179$core->adminurl->register('admin.post.media','post_media.php'); 
    181180$core->adminurl->register('admin.blog.theme','blog_theme.php'); 
    182181$core->adminurl->register('admin.blog.pref','blog_pref.php'); 
     182$core->adminurl->register('admin.blog.del','blog_del.php'); 
     183$core->adminurl->register('admin.blog','blog.php'); 
    183184$core->adminurl->register('admin.blogs','blogs.php'); 
    184185$core->adminurl->register('admin.categories','categories.php'); 
    185186$core->adminurl->register('admin.category','category.php'); 
    186187$core->adminurl->register('admin.comments','comments.php'); 
    187 $core->adminurl->register('admin.comments','comment.php'); 
     188$core->adminurl->register('admin.comment','comment.php'); 
    188189$core->adminurl->register('admin.help','help.php'); 
    189190$core->adminurl->register('admin.home','index.php'); 
    190191$core->adminurl->register('admin.langs','langs.php'); 
    191192$core->adminurl->register('admin.media','media.php'); 
    192 $core->adminurl->register('admin.media_item','media_item.php'); 
     193$core->adminurl->register('admin.media.item','media_item.php'); 
    193194$core->adminurl->register('admin.plugins','plugins.php'); 
    194195$core->adminurl->register('admin.plugin','plugin.php'); 
     196$core->adminurl->register('admin.search','search.php'); 
    195197$core->adminurl->register('admin.user.preferences','preferences.php'); 
    196198$core->adminurl->register('admin.user','user.php'); 
     199$core->adminurl->register('admin.user.actions','users_actions.php'); 
    197200$core->adminurl->register('admin.users','users.php'); 
     201$core->adminurl->register('admin.auth','auth.php'); 
     202$core->adminurl->register('admin.help','help.php'); 
     203$core->adminurl->register('admin.update','update.php'); 
     204 
     205$core->adminurl->registercopy('load.plugin.file','admin.home',array('pf' => 'dummy.css')); 
    198206 
    199207if ($core->auth->userID() && $core->blog !== null) 
     
    227235     # [] : Title, URL, small icon, large icon, permissions, id, class 
    228236     # NB : '*' in permissions means any, null means super admin only 
    229       
    230237      
    231238     # Menus creation 
     
    246253     } 
    247254 
    248       
    249255     # Set menu titles 
    250256      
     
    253259     $_menu['Plugins']->title = __('Plugins'); 
    254260 
    255  
    256      $_menu['Blog']->prependItem(__('Blog appearance'),'blog_theme.php','images/menu/themes.png', 
    257           preg_match('/blog_theme.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     261     addMenuItem('Blog',__('Blog appearance'),'admin.blog.theme','images/menu/themes.png', 
    258262          $core->auth->check('admin',$core->blog->id)); 
    259      $_menu['Blog']->prependItem(__('Blog settings'),'blog_pref.php','images/menu/blog-pref.png', 
    260           preg_match('/blog_pref.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     263     addMenuItem('Blog',__('Blog settings'),'admin.blog.pref','images/menu/blog-pref.png', 
    261264          $core->auth->check('admin',$core->blog->id)); 
    262      $_menu['Blog']->prependItem(__('Media manager'),'media.php','images/menu/media.png', 
    263           preg_match('/media(_item)?.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     265     addMenuItem('Blog',__('Media manager'),'admin.media','images/menu/media.png', 
    264266          $core->auth->check('media,media_admin',$core->blog->id)); 
    265      $_menu['Blog']->prependItem(__('Categories'),'categories.php','images/menu/categories.png', 
    266           preg_match('/categories.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     267     addMenuItem('Blog',__('Categories'),'admin.categories','images/menu/categories.png', 
    267268          $core->auth->check('categories',$core->blog->id)); 
    268      $_menu['Blog']->prependItem(__('Search'),'search.php','images/menu/search.png', 
    269           preg_match('/search.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     269     addMenuItem('Blog',__('Search'),'admin.search','images/menu/search.png', 
    270270          $core->auth->check('usage,contentadmin',$core->blog->id)); 
    271      $_menu['Blog']->prependItem(__('Comments'),'comments.php','images/menu/comments.png', 
    272           preg_match('/comments.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     271     addMenuItem('Blog',__('Comments'),'admin.comments','images/menu/comments.png', 
    273272          $core->auth->check('usage,contentadmin',$core->blog->id)); 
    274      $_menu['Blog']->prependItem(__('Entries'),'posts.php','images/menu/entries.png', 
    275           preg_match('/posts.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     273     addMenuItem('Blog',__('Entries'),'admin.posts','images/menu/entries.png', 
    276274          $core->auth->check('usage,contentadmin',$core->blog->id)); 
    277      $_menu['Blog']->prependItem(__('New entry'),'post.php','images/menu/edit.png', 
    278           preg_match('/post.php$/',$_SERVER['REQUEST_URI']), 
     275     addMenuItem('Blog',__('New entry'),'admin.post','images/menu/edit.png', 
    279276          $core->auth->check('usage,contentadmin',$core->blog->id)); 
    280277      
    281      $_menu['System']->prependItem(__('Update'),'update.php','images/menu/update.png', 
    282           preg_match('/update.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     278     addMenuItem('System',__('Update'),'admin.update','images/menu/update.png', 
    283279          $core->auth->isSuperAdmin() && is_readable(DC_DIGESTS)); 
    284      $_menu['System']->prependItem(__('Languages'),'langs.php','images/menu/langs.png', 
    285           preg_match('/langs.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     280     addMenuItem('System',__('Languages'),'admin.langs','images/menu/langs.png', 
    286281          $core->auth->isSuperAdmin()); 
    287      $_menu['System']->prependItem(__('Plugins management'),'plugins.php','images/menu/plugins.png', 
    288           preg_match('/plugins.php(\?.*)?$/',$_SERVER['REQUEST_URI']), 
     282     addMenuItem('System',__('Plugins management'),'admin.plugins','images/menu/plugins.png', 
    289283          $core->auth->isSuperAdmin()); 
    290      $_menu['System']->prependItem(__('Users'),'users.php','images/menu/users.png', 
    291           preg_match('/users.php$/',$_SERVER['REQUEST_URI']), 
     284     addMenuItem('System',__('Users'),'admin.users','images/menu/users.png', 
    292285          $core->auth->isSuperAdmin()); 
    293      $_menu['System']->prependItem(__('Blogs'),'blogs.php','images/menu/blogs.png', 
    294           preg_match('/blogs.php$/',$_SERVER['REQUEST_URI']), 
     286     addMenuItem('System',__('Blogs'),'admin.blogs','images/menu/blogs.png', 
    295287          $core->auth->isSuperAdmin() || 
    296288          $core->auth->check('usage,contentadmin',$core->blog->id) && $core->auth->getBlogCount() > 1); 
  • inc/admin/prepend.php

    r2815 r2911  
    2424function dc_load_locales() { 
    2525     global $_lang, $core; 
    26  
     26      
    2727     $_lang = $core->auth->getInfo('user_lang'); 
    2828     $_lang = preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$_lang) ? $_lang : 'en'; 
    29  
     29      
    3030     l10n::lang($_lang); 
    3131     if (l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/date') === false && $_lang != 'en') { 
     
    4040{ 
    4141     global $core; 
    42  
     42      
    4343     $core->auth->user_prefs->addWorkspace('interface'); 
    4444     $user_ui_iconset = @$core->auth->user_prefs->interface->iconset; 
    4545     if (($user_ui_iconset) && ($img)) { 
    4646          $icon = false; 
    47           if ((preg_match('/^images\/menu\/(.+)$/',$img,$m)) || 
     47          if ((preg_match('/^images\/menu\/(.+)$/',$img,$m)) ||  
    4848               (preg_match('/^index\.php\?pf=(.+)$/',$img,$m))) { 
    4949               if ($m[1]) { 
     
    7373     # We have session information in constants 
    7474     $_COOKIE[DC_SESSION_NAME] = DC_AUTH_SESS_ID; 
    75  
     75      
    7676     if (!$core->auth->checkSession(DC_AUTH_SESS_UID)) { 
    7777          throw new Exception('Invalid session data.'); 
    7878     } 
    79  
     79      
    8080     # Check nonce from POST requests 
    8181     if (!empty($_POST)) 
     
    8585          } 
    8686     } 
    87  
     87      
    8888     if (empty($_SESSION['sess_blog_id'])) { 
    8989          throw new Exception('Permission denied.'); 
    9090     } 
    91  
     91      
    9292     # Loading locales 
    9393     dc_load_locales(); 
    94  
     94      
    9595     $core->setBlog($_SESSION['sess_blog_id']); 
    9696     if (!$core->blog->id) { 
     
    108108               $p[3] = '/'; 
    109109               call_user_func_array('setcookie',$p); 
    110  
     110                
    111111               http::redirect('auth.php'); 
    112112          } 
     
    116116               ,20); 
    117117     } 
    118  
     118      
    119119     # Check nonce from POST requests 
    120120     if (!empty($_POST)) 
     
    127127          } 
    128128     } 
    129  
     129      
    130130     if (!empty($_REQUEST['switchblog']) 
    131131     && $core->auth->getPermissions($_REQUEST['switchblog']) !== false) 
     
    138138               unset($_SESSION['media_manager_page']); 
    139139          } 
    140  
     140           
    141141          # Removing switchblog from URL 
    142142          $redir = $_SERVER['REQUEST_URI']; 
     
    146146          exit; 
    147147     } 
    148  
     148      
    149149     # Check blog to use and log out if no result 
    150150     if (isset($_SESSION['sess_blog_id'])) 
     
    161161          } 
    162162     } 
    163  
     163      
    164164     # Loading locales 
    165165     dc_load_locales(); 
    166  
     166      
    167167     if (isset($_SESSION['sess_blog_id'])) { 
    168168          $core->setBlog($_SESSION['sess_blog_id']); 
     
    214214     } 
    215215     unset($f); 
    216  
     216      
    217217     if (($hfiles = @scandir($locales_root.$_lang.'/help')) !== false) 
    218218     { 
     
    232232     $core->favs = new dcFavorites($core); 
    233233 
     234 
    234235     # [] : Title, URL, small icon, large icon, permissions, id, class 
    235236     # NB : '*' in permissions means any, null means super admin only 
    236  
     237      
    237238     # Menus creation 
    238239     $_menu = new ArrayObject(); 
     
    253254 
    254255     # Set menu titles 
    255  
     256      
    256257     $_menu['System']->title = __('System settings'); 
    257258     $_menu['Blog']->title = __('Blog'); 
     
    274275     addMenuItem('Blog',__('New entry'),'admin.post','images/menu/edit.png', 
    275276          $core->auth->check('usage,contentadmin',$core->blog->id)); 
    276  
     277      
    277278     addMenuItem('System',__('Update'),'admin.update','images/menu/update.png', 
    278279          $core->auth->isSuperAdmin() && is_readable(DC_DIGESTS)); 
     
    292293} 
    293294 
     295# Add admin default templates path 
     296$core->tpl->getLoader()->addPath(dirname(__FILE__).'/default-templates'); 
     297# Set admin context 
     298$_ctx = new dcAdminContext($core); 
     299$core->tpl->addExtension($_ctx); 
     300 
     301# --BEHAVIOR-- adminPrepend 
     302$core->callBehavior('adminPrepend',$core,$_ctx); 
     303?> 
  • inc/core/class.dc.blog.php

    r2655 r2911  
    118118 
    119119          return $this->url; 
     120     } 
     121 
     122     /** 
     123     Reruens jQuery version selected for the blog. 
     124      */ 
     125     public function getJsJQuery() 
     126     { 
     127          $version = $this->settings->system->jquery_version; 
     128          if ($version == '') { 
     129               $version = DC_DEFAULT_JQUERY; // defined in inc/prepend.php 
     130          } 
     131          return 'jquery/'.$version; 
    120132     } 
    121133 
  • inc/core/class.dc.blog.php

    r2800 r2911  
    877877 
    878878          if (!empty($params['user_id'])) { 
    879                $strReq .= "AND U.user_id = '".$this->con->escape($params['user_id'])."' "; 
     879               $not=""; 
     880               if (!empty($params['user_id_not'])) { 
     881                    $not=" not"; 
     882               } 
     883               $strReq .= "AND U.user_id ".$not.$this->con->in($params['user_id'])." "; 
    880884          } 
    881885 
     
    978982 
    979983          if (!$count_only && !empty($params['limit'])) { 
    980                $strReq .= $this->con->limit($params['limit']); 
    981           } 
     984                    $strReq .= $this->con->limit($params['limit']); 
     985               } 
    982986 
    983987          if (!empty($params['sql_only'])) { 
     
    22182222               'UPDATE '.$this->prefix.'comment '. 
    22192223               'SET comment_status = '.$status.' '; 
    2220           $strReq .= 
     2224               $strReq .= 
    22212225               'WHERE comment_id'.$this->con->in($co_ids). 
    22222226               'AND post_id in (SELECT tp.post_id '. 
     
    22752279          } 
    22762280 
    2277           $strReq = 
     2281               $strReq = 
    22782282               'DELETE FROM '.$this->prefix.'comment '. 
    22792283               'WHERE comment_id'.$this->con->in($co_ids).' '. 
     
    22992303          } 
    23002304 
    2301           $strReq = 
     2305               $strReq = 
    23022306               'DELETE FROM '.$this->prefix.'comment '. 
    23032307               'WHERE comment_status = -2 '. 
  • inc/core/class.dc.core.php

    r2715 r2911  
    299299     @return   <b>array</b> An array of formaters names in values. 
    300300 
    301     /** 
    302     if @param editor_id is empty: 
    303     return all formaters sorted by actives editors 
    304      
    305     if @param editor_id is not empty 
    306     return formaters for an editor if editor is active 
    307     return empty() array if editor is not active.  
    308     It can happens when a user choose an editor and admin deactivate that editor later 
     301     /** 
     302     if @param editor_id is empty: 
     303     return all formaters sorted by actives editors 
     304 
     305     if @param editor_id is not empty 
     306     return formaters for an editor if editor is active 
     307     return empty() array if editor is not active. 
     308     It can happens when a user choose an editor and admin deactivate that editor later 
    309309     */ 
    310310     public function getFormaters($editor_id='') 
     
    330330      
    331331     @param    editor_id <b>string</b>  Editor id (dcLegacyEditor, dcCKEditor, ...) 
    332      @param    name      <b>string</b>       Formater name 
    333      @param    str       <b>string</b>       String to transform 
     332     @param    name      <b>string</b>  Formater name 
     333     @param    str            <b>string</b>  String to transform 
    334334     @return   <b>string</b>  String transformed 
    335335     */ 
     
    349349 
    350350     @param    name      <b>string</b>       Formater name 
    351      @param    str       <b>string</b>       String to transform 
     351     @param    str           <b>string</b>        String to transform 
    352352     @return   <b>string</b>  String transformed 
    353353     */ 
     
    901901               'edit_size' => 24, 
    902902               'enable_wysiwyg' => true, 
    903             'editor' => 'dcLegacyEditor', 
     903               'editor' => array('xhtml' => 'dcCKEditor', 'wiki' => 'dcLegacyEditor'), 
    904904               'post_format' => 'wiki' 
    905905          ); 
  • inc/core/class.dc.core.php

    r2753 r2911  
    3939     public $rest;       ///< <b>dcRestServer</b> dcRestServer object 
    4040     public $log;        ///< <b>dcLog</b>             dcLog object 
     41     public $tpl;        ///< <b>Twig_Environment</b>  Twig_Environment object 
    4142     public $stime;      ///< <b>float</b>             starting time 
    42  
     43      
    4344     private $versions = null; 
    4445     private $formaters = array(); 
    4546     private $behaviors = array(); 
    4647     private $post_types = array(); 
    47  
     48      
    4849     /** 
    4950     dcCore constructor inits everything related to Dotclear. It takes arguments 
    5051     to init database connection. 
    51  
     52      
    5253     @param    driver    <b>string</b>  Database driver name 
    5354     @param    host      <b>string</b>  Database hostname 
     
    6768 
    6869          $this->con = dbLayer::init($driver,$host,$db,$user,$password,$persist); 
    69  
     70           
    7071          # define weak_locks for mysql 
    7172          if ($this->con instanceof mysqlConnection) { 
     
    7475               mysqliConnection::$weak_locks = true; 
    7576          } 
    76  
     77           
    7778          # define searchpath for postgresql 
    7879          if ($this->con instanceof pgsqlConnection) 
     
    8687               } 
    8788          } 
    88  
     89           
    8990          $this->prefix = $prefix; 
    90  
     91           
    9192          $this->error = new dcError(); 
    9293          $this->auth = $this->authInstance(); 
    9394          $this->session = new sessionDB($this->con,$this->prefix.'session',DC_SESSION_NAME,'',null,DC_ADMIN_SSL); 
    9495          $this->url = new dcUrlHandlers(); 
    95  
     96           
    9697          $this->plugins = new dcPlugins($this); 
    97  
     98           
    9899          $this->rest = new dcRestServer($this); 
    99  
     100           
    100101          $this->meta = new dcMeta($this); 
    101  
     102           
    102103          $this->log = new dcLog($this); 
    103104     } 
    104  
     105      
    105106     private function authInstance() 
    106107     { 
     
    112113               $c = DC_AUTH_CLASS; 
    113114          } 
    114  
     115           
    115116          if (!class_exists($c)) { 
    116117               throw new Exception('Authentication class '.$c.' does not exist.'); 
    117118          } 
    118  
     119           
    119120          if ($c != 'dcAuth' && !is_subclass_of($c,'dcAuth')) { 
    120121               throw new Exception('Authentication class '.$c.' does not inherit dcAuth.'); 
    121122          } 
    122  
     123           
    123124          return new $c($this); 
    124125     } 
    125  
    126  
     126      
     127     /** 
     128     Create template environment (Twig_Environment instance) 
     129      
     130     default-templates path must be added from admin|public/prepend.php with: 
     131     $core->tpl->getLoader()->addPath('PATH_TO/default-templates'); 
     132     Selected theme path must be added with: 
     133     $core->tpl->getLoader()->prependPath('PATH_TO/MY_THEME'); 
     134     */ 
     135     public function loadTemplateEnvironment() 
     136     { 
     137          $cache_dir = path::real(DC_TPL_CACHE.'/twtpl',false); 
     138          if (!is_dir($cache_dir)) { 
     139               try { 
     140                    files::makeDir($cache_dir); 
     141               } catch (Exception $e) { 
     142                    $cache_dir = false; 
     143               } 
     144          } 
     145           
     146          $this->tpl = new Twig_Environment( 
     147               new Twig_Loader_Filesystem(dirname(__FILE__).'/../swf'), 
     148               array( 
     149                    'auto_reload' => true, 
     150                    'autoescape' => false, 
     151                    'base_template_class' => 'Twig_Template', 
     152                    'cache' => $cache_dir,  
     153                    'charset' => 'UTF-8', 
     154                    'debug' => DC_DEBUG, 
     155                    'optimizations' => -1, 
     156                    'strict_variables' => 0 //DC_DEBUG // Please fix undefined variables! 
     157               ) 
     158          ); 
     159          $this->tpl->addExtension(new dcFormExtension($this)); 
     160          $this->tpl->addExtension(new dcTabExtension($this)); 
     161     } 
     162      
    127163     /// @name Blog init methods 
    128164     //@{ 
    129165     /** 
    130166     Sets a blog to use in <var>blog</var> property. 
    131  
     167      
    132168     @param    id        <b>string</b>       Blog ID 
    133169     */ 
     
    136172          $this->blog = new dcBlog($this, $id); 
    137173     } 
    138  
     174      
    139175     /** 
    140176     Unsets <var>blog</var> property. 
     
    145181     } 
    146182     //@} 
    147  
    148  
     183      
     184      
    149185     /// @name Blog status methods 
    150186     //@{ 
    151187     /** 
    152188     Returns an array of available blog status codes and names. 
    153  
     189      
    154190     @return   <b>array</b> Simple array with codes in keys and names in value 
    155191     */ 
     
    162198          ); 
    163199     } 
    164  
     200      
    165201     /** 
    166202     Returns a blog status name given to a code. This is intended to be 
    167203     human-readable and will be translated, so never use it for tests. 
    168204     If status code does not exist, returns <i>offline</i>. 
    169  
     205      
    170206     @param    s    <b>integer</b> Status code 
    171207     @return   <b>string</b> Blog status name 
     
    180216     } 
    181217     //@} 
    182  
     218      
    183219     /// @name Admin nonce secret methods 
    184220     //@{ 
    185  
     221      
    186222     public function getNonce() 
    187223     { 
    188224          return crypt::hmac(DC_MASTER_KEY,session_id()); 
    189225     } 
    190  
     226      
    191227     public function checkNonce($secret) 
    192228     { 
     
    194230               return false; 
    195231          } 
    196  
     232           
    197233          return $secret == crypt::hmac(DC_MASTER_KEY,session_id()); 
    198234     } 
    199  
     235      
    200236     public function formNonce() 
    201237     { 
     
    203239               return; 
    204240          } 
    205  
     241           
    206242          return form::hidden(array('xd_check'),$this->getNonce()); 
    207243     } 
    208244     //@} 
    209  
     245      
    210246     /// @name Text Formatters methods 
    211247     //@{ 
     
    225261          } 
    226262     } 
    227  
     263      
    228264     /// @name Text Formatters methods 
    229265     //@{ 
     
    232268     transform text. The function must be a valid callback and takes one 
    233269     argument: the string to transform. It returns the transformed string. 
    234  
     270      
    235271     @param    name      <b>string</b>       Formater name 
    236272     @param    func      <b>callback</b>     Function to use, must be a valid and callable callback 
     
    256292          return $editors; 
    257293     } 
    258  
     294      
    259295     /** 
    260296     Returns formaters list by editor 
    261  
     297      
    262298     @param    editor_id <b>string</b>  Editor id (dcLegacyEditor, dcCKEditor, ...) 
    263299     @return   <b>array</b> An array of formaters names in values. 
     
    288324          return $formaters_list; 
    289325     } 
    290  
     326      
    291327     /** 
    292328     If <var>$name</var> is a valid formater, it returns <var>$str</var> 
    293329     transformed using that formater. 
    294  
     330      
    295331     @param    editor_id <b>string</b>  Editor id (dcLegacyEditor, dcCKEditor, ...) 
    296332     @param    name      <b>string</b>  Formater name 
     
    303339               return call_user_func($this->formaters[$editor_id][$name],$str); 
    304340          } 
    305  
     341           
    306342          return $str; 
    307343     } 
    308344     //@} 
    309  
     345      
    310346     /** 
    311347     If <var>$name</var> is a valid formater, it returns <var>$str</var> 
     
    322358     //@} 
    323359 
    324  
     360      
    325361     /// @name Behaviors methods 
    326362     //@{ 
     
    328364     Adds a new behavior to behaviors stack. <var>$func</var> must be a valid 
    329365     and callable callback. 
    330  
     366      
    331367     @param    behavior  <b>string</b>       Behavior name 
    332368     @param    func      <b>callback</b>     Function to call 
     
    338374          } 
    339375     } 
    340  
     376      
    341377     /** 
    342378     Tests if a particular behavior exists in behaviors stack. 
    343  
     379      
    344380     @param    behavior  <b>string</b>  Behavior name 
    345381     @return   <b>boolean</b> 
     
    349385          return isset($this->behaviors[$behavior]); 
    350386     } 
    351  
     387      
    352388     /** 
    353389     Get behaviors stack (or part of). 
    354  
     390      
    355391     @param    behavior  <b>string</b>       Behavior name 
    356392     @return   <b>array</b> 
     
    359395     { 
    360396          if (empty($this->behaviors)) return null; 
    361  
     397           
    362398          if ($behavior == '') { 
    363399               return $this->behaviors; 
     
    365401               return $this->behaviors[$behavior]; 
    366402          } 
    367  
     403           
    368404          return array(); 
    369405     } 
    370  
     406      
    371407     /** 
    372408     Calls every function in behaviors stack for a given behavior and returns 
    373409     concatened result of each function. 
    374  
     410      
    375411     Every parameters added after <var>$behavior</var> will be pass to 
    376412     behavior calls. 
    377  
     413      
    378414     @param    behavior  <b>string</b>  Behavior name 
    379415     @return   <b>string</b> Behavior concatened result 
     
    385421               $args = func_get_args(); 
    386422               array_shift($args); 
    387  
     423                
    388424               $res = ''; 
    389  
     425                
    390426               foreach ($this->behaviors[$behavior] as $f) { 
    391427                    $res .= call_user_func_array($f,$args); 
    392428               } 
    393  
     429                
    394430               return $res; 
    395431          } 
    396432     } 
    397433     //@} 
    398  
     434      
    399435     /// @name Post types URLs management 
    400436     //@{ 
     
    404440               $type = 'post'; 
    405441          } 
    406  
     442           
    407443          $url = sprintf($this->post_types[$type]['admin_url'],$post_id); 
    408444          return $escaped ? html::escapeURL($url) : $url; 
    409445     } 
    410  
     446      
    411447     public function getPostPublicURL($type,$post_url,$escaped=true) 
    412448     { 
     
    414450               $type = 'post'; 
    415451          } 
    416  
     452           
    417453          $url = sprintf($this->post_types[$type]['public_url'],$post_url); 
    418454          return $escaped ? html::escapeURL($url) : $url; 
    419455     } 
    420  
     456      
    421457     public function setPostType($type,$admin_url,$public_url,$label='') 
    422458     { 
     
    427463          ); 
    428464     } 
    429  
     465      
    430466     public function getPostTypes() 
    431467     { 
     
    433469     } 
    434470     //@} 
    435  
     471      
    436472     /// @name Versions management methods 
    437473     //@{ 
    438474     /** 
    439475     Returns a given $module version. 
    440  
     476      
    441477     @param    module    <b>string</b>  Module name 
    442478     @return   <b>string</b>  Module version 
     
    449485               $strReq = 'SELECT module, version FROM '.$this->prefix.'version'; 
    450486               $rs = $this->con->select($strReq); 
    451  
     487                
    452488               while ($rs->fetch()) { 
    453489                    $this->versions[$rs->module] = $rs->version; 
    454490               } 
    455491          } 
    456  
     492           
    457493          if (isset($this->versions[$module])) { 
    458494               return $this->versions[$module]; 
     
    461497          } 
    462498     } 
    463  
     499      
    464500     /** 
    465501     Sets $version to given $module. 
    466  
     502      
    467503     @param    module    <b>string</b>  Module name 
    468504     @param    version   <b>string</b>  Module version 
     
    471507     { 
    472508          $cur_version = $this->getVersion($module); 
    473  
     509           
    474510          $cur = $this->con->openCursor($this->prefix.'version'); 
    475511          $cur->module = (string) $module; 
    476512          $cur->version = (string) $version; 
    477  
     513           
    478514          if ($cur_version === null) { 
    479515               $cur->insert(); 
     
    481517               $cur->update("WHERE module='".$this->con->escape($module)."'"); 
    482518          } 
    483  
     519           
    484520          $this->versions[$module] = $version; 
    485521     } 
    486  
     522      
    487523     /** 
    488524     Removes given $module version entry. 
    489  
     525      
    490526     @param    module    <b>string</b>  Module name 
    491527     */ 
     
    495531          'DELETE FROM '.$this->prefix.'version '. 
    496532          "WHERE module = '".$this->con->escape($module)."' "; 
    497  
     533           
    498534          $this->con->execute($strReq); 
    499  
     535           
    500536          if (is_array($this->versions)) { 
    501537               unset($this->versions[$module]); 
    502538          } 
    503539     } 
    504  
     540      
    505541     //@} 
    506  
     542      
    507543     /// @name Users management methods 
    508544     //@{ 
    509545     /** 
    510546     Returns a user by its ID. 
    511  
     547      
    512548     @param    id        <b>string</b>       User ID 
    513549     @return   <b>record</b> 
     
    516552     { 
    517553          $params['user_id'] = $id; 
    518  
     554           
    519555          return $this->getUsers($params); 
    520556     } 
    521  
     557      
    522558     /** 
    523559     Returns a users list. <b>$params</b> is an array with the following 
    524560     optionnal parameters: 
    525  
     561      
    526562      - <var>q</var>: search string (on user_id, user_name, user_firstname) 
    527563      - <var>user_id</var>: user ID 
    528564      - <var>order</var>: ORDER BY clause (default: user_id ASC) 
    529565      - <var>limit</var>: LIMIT clause (should be an array ![limit,offset]) 
    530  
     566      
    531567     @param    params         <b>array</b>        Parameters 
    532568     @param    count_only     <b>boolean</b>      Only counts results 
     
    553589               'WHERE NULL IS NULL '; 
    554590          } 
    555  
     591           
    556592          if (!empty($params['q'])) { 
    557593               $q = $this->con->escape(str_replace('*','%',strtolower($params['q']))); 
     
    562598                    ') '; 
    563599          } 
    564  
     600           
    565601          if (!empty($params['user_id'])) { 
    566602               $strReq .= "AND U.user_id = '".$this->con->escape($params['user_id'])."' "; 
    567603          } 
    568  
     604           
    569605          if (!$count_only) { 
    570606               $strReq .= 'GROUP BY U.user_id,user_super,user_status,user_pwd,user_change_pwd,'. 
    571607               'user_name,user_firstname,user_displayname,user_email,user_url,'. 
    572608               'user_desc, user_lang,user_tz,user_post_status,user_options '; 
    573  
     609                
    574610               if (!empty($params['order']) && !$count_only) { 
    575611                    $strReq .= 'ORDER BY '.$this->con->escape($params['order']).' '; 
     
    578614               } 
    579615          } 
    580  
     616           
    581617          if (!$count_only && !empty($params['limit'])) { 
    582618               $strReq .= $this->con->limit($params['limit']); 
    583619          } 
    584  
     620           
    585621          $rs = $this->con->select($strReq); 
    586622          $rs->extend('rsExtUser'); 
    587623          return $rs; 
    588624     } 
    589  
     625      
    590626     /** 
    591627     Create a new user. Takes a cursor as input and returns the new user ID. 
    592  
     628      
    593629     @param    cur       <b>cursor</b>       User cursor 
    594630     @return   <b>string</b> 
     
    599635               throw new Exception(__('You are not an administrator')); 
    600636          } 
    601  
     637           
    602638          if ($cur->user_id == '') { 
    603639               throw new Exception(__('No user ID given')); 
    604640          } 
    605  
     641           
    606642          if ($cur->user_pwd == '') { 
    607643               throw new Exception(__('No password given')); 
    608644          } 
    609  
     645           
    610646          $this->getUserCursor($cur); 
    611  
     647           
    612648          if ($cur->user_creadt === null) { 
    613649               $cur->user_creadt = date('Y-m-d H:i:s'); 
    614650          } 
    615  
     651           
    616652          $cur->insert(); 
    617  
     653           
    618654          $this->auth->afterAddUser($cur); 
    619  
     655           
    620656          return $cur->user_id; 
    621657     } 
    622  
     658      
    623659     /** 
    624660     Updates an existing user. Returns the user ID. 
    625  
     661      
    626662     @param    id        <b>string</b>       User ID 
    627663     @param    cur       <b>cursor</b>       User cursor 
     
    631667     { 
    632668          $this->getUserCursor($cur); 
    633  
     669           
    634670          if (($cur->user_id !== null || $id != $this->auth->userID()) && 
    635671          !$this->auth->isSuperAdmin()) { 
    636672               throw new Exception(__('You are not an administrator')); 
    637673          } 
    638  
     674           
    639675          $cur->update("WHERE user_id = '".$this->con->escape($id)."' "); 
    640  
     676           
    641677          $this->auth->afterUpdUser($id,$cur); 
    642  
     678           
    643679          if ($cur->user_id !== null) { 
    644680               $id = $cur->user_id; 
    645681          } 
    646  
     682           
    647683          # Updating all user's blogs 
    648684          $rs = $this->con->select( 
     
    650686               "WHERE user_id = '".$this->con->escape($id)."' " 
    651687               ); 
    652  
     688           
    653689          while ($rs->fetch()) { 
    654690               $b = new dcBlog($this,$rs->blog_id); 
     
    656692               unset($b); 
    657693          } 
    658  
     694           
    659695          return $id; 
    660696     } 
    661  
     697      
    662698     /** 
    663699     Deletes a user. 
    664  
     700      
    665701     @param    id        <b>string</b>       User ID 
    666702     */ 
     
    670706               throw new Exception(__('You are not an administrator')); 
    671707          } 
    672  
     708           
    673709          if ($id == $this->auth->userID()) { 
    674710               return; 
    675711          } 
    676  
     712           
    677713          $rs = $this->getUser($id); 
    678  
     714           
    679715          if ($rs->nb_post > 0) { 
    680716               return; 
    681717          } 
    682  
     718           
    683719          $strReq = 'DELETE FROM '.$this->prefix.'user '. 
    684720                    "WHERE user_id = '".$this->con->escape($id)."' "; 
    685  
     721           
    686722          $this->con->execute($strReq); 
    687  
     723           
    688724          $this->auth->afterDelUser($id); 
    689725     } 
    690  
     726      
    691727     /** 
    692728     Checks whether a user exists. 
    693  
     729      
    694730     @param    id        <b>string</b>       User ID 
    695731     @return   <b>boolean</b> 
     
    700736                    'FROM '.$this->prefix.'user '. 
    701737                    "WHERE user_id = '".$this->con->escape($id)."' "; 
    702  
     738           
    703739          $rs = $this->con->select($strReq); 
    704  
     740           
    705741          return !$rs->isEmpty(); 
    706742     } 
    707  
     743      
    708744     /** 
    709745     Returns all user permissions as an array which looks like: 
    710  
     746      
    711747      - [blog_id] 
    712748        - [name] => Blog name 
    713749        - [url] => Blog URL 
    714750        - [p] 
    715           - [permission] => true 
     751          - [permission] => true 
    716752          - ... 
    717  
     753      
    718754     @param    id        <b>string</b>       User ID 
    719755     @return   <b>array</b> 
     
    725761                    'INNER JOIN '.$this->prefix.'blog B ON P.blog_id = B.blog_id '. 
    726762                    "WHERE user_id = '".$this->con->escape($id)."' "; 
    727  
     763           
    728764          $rs = $this->con->select($strReq); 
    729  
     765           
    730766          $res = array(); 
    731  
     767           
    732768          while ($rs->fetch()) 
    733769          { 
     
    738774               ); 
    739775          } 
    740  
     776           
    741777          return $res; 
    742778     } 
    743  
     779      
    744780     /** 
    745781     Sets user permissions. The <var>$perms</var> array looks like: 
    746  
     782      
    747783      - [blog_id] => '|perm1|perm2|' 
    748784      - ... 
    749  
     785      
    750786     @param    id        <b>string</b>       User ID 
    751787     @param    perms     <b>array</b>        Permissions array 
     
    756792               throw new Exception(__('You are not an administrator')); 
    757793          } 
    758  
     794           
    759795          $strReq = 'DELETE FROM '.$this->prefix.'permissions '. 
    760796                    "WHERE user_id = '".$this->con->escape($id)."' "; 
    761  
     797           
    762798          $this->con->execute($strReq); 
    763  
     799           
    764800          foreach ($perms as $blog_id => $p) { 
    765801               $this->setUserBlogPermissions($id, $blog_id, $p, false); 
    766802          } 
    767803     } 
    768  
     804      
    769805     /** 
    770806     Sets user permissions for a given blog. <var>$perms</var> is an array with 
    771807     permissions in values 
    772  
     808      
    773809     @param    id             <b>string</b>       User ID 
    774810     @param    blog_id        <b>string</b>       Blog ID 
     
    781817               throw new Exception(__('You are not an administrator')); 
    782818          } 
    783  
     819           
    784820          $no_perm = empty($perms); 
    785  
     821           
    786822          $perms = '|'.implode('|',array_keys($perms)).'|'; 
    787  
     823           
    788824          $cur = $this->con->openCursor($this->prefix.'permissions'); 
    789  
     825           
    790826          $cur->user_id = (string) $id; 
    791827          $cur->blog_id = (string) $blog_id; 
    792828          $cur->permissions = $perms; 
    793  
     829           
    794830          if ($delete_first || $no_perm) 
    795831          { 
     
    797833                         "WHERE blog_id = '".$this->con->escape($blog_id)."' ". 
    798834                         "AND user_id = '".$this->con->escape($id)."' "; 
    799  
     835                
    800836               $this->con->execute($strReq); 
    801837          } 
    802  
     838           
    803839          if (!$no_perm) { 
    804840               $cur->insert(); 
    805841          } 
    806842     } 
    807  
     843      
    808844     /** 
    809845     Sets a user default blog. This blog will be selected when user log in. 
    810  
     846      
    811847     @param    id             <b>string</b>       User ID 
    812848     @param    blog_id        <b>string</b>       Blog ID 
     
    815851     { 
    816852          $cur = $this->con->openCursor($this->prefix.'user'); 
    817  
     853           
    818854          $cur->user_default_blog = (string) $blog_id; 
    819  
     855           
    820856          $cur->update("WHERE user_id = '".$this->con->escape($id)."'"); 
    821857     } 
    822  
     858      
    823859     private function getUserCursor($cur) 
    824860     { 
     
    827863               throw new Exception(__('User ID must contain at least 2 characters using letters, numbers or symbols.')); 
    828864          } 
    829  
     865           
    830866          if ($cur->user_url !== null && $cur->user_url != '') { 
    831867               if (!preg_match('|^http(s?)://|',$cur->user_url)) { 
     
    833869               } 
    834870          } 
    835  
     871           
    836872          if ($cur->isField('user_pwd')) { 
    837873               if (strlen($cur->user_pwd) < 6) { 
     
    840876               $cur->user_pwd = crypt::hmac(DC_MASTER_KEY,$cur->user_pwd); 
    841877          } 
    842  
     878           
    843879          if ($cur->user_lang !== null && !preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$cur->user_lang)) { 
    844880               throw new Exception(__('Invalid user language code')); 
    845881          } 
    846  
     882           
    847883          if ($cur->user_upddt === null) { 
    848884               $cur->user_upddt = date('Y-m-d H:i:s'); 
    849885          } 
    850  
     886           
    851887          if ($cur->user_options !== null) { 
    852888               $cur->user_options = serialize((array) $cur->user_options); 
    853889          } 
    854890     } 
    855  
     891      
    856892     /** 
    857893     Returns user default settings in an associative array with setting names in 
    858894     keys. 
    859  
     895      
    860896     @return   <b>array</b> 
    861897     */ 
     
    870906     } 
    871907     //@} 
    872  
     908      
    873909     /// @name Blog management methods 
    874910     //@{ 
    875911     /** 
    876912     Returns all blog permissions (users) as an array which looks like: 
    877  
     913      
    878914      - [user_id] 
    879915        - [name] => User name 
     
    882918        - [super] => (true|false) super admin 
    883919        - [p] 
    884           - [permission] => true 
     920          - [permission] => true 
    885921          - ... 
    886  
     922      
    887923     @param    id             <b>string</b>       Blog ID 
    888924     @param    with_super     <b>boolean</b>      Includes super admins in result 
     
    897933          'JOIN '.$this->prefix.'permissions P ON U.user_id = P.user_id '. 
    898934          "WHERE blog_id = '".$this->con->escape($id)."' "; 
    899  
     935           
    900936          if ($with_super) { 
    901937               $strReq .= 
     
    906942               'WHERE user_super = 1 '; 
    907943          } 
    908  
     944           
    909945          $rs = $this->con->select($strReq); 
    910  
     946           
    911947          $res = array(); 
    912  
     948           
    913949          while ($rs->fetch()) 
    914950          { 
     
    922958               ); 
    923959          } 
    924  
     960           
    925961          return $res; 
    926962     } 
    927  
     963      
    928964     /** 
    929965     Returns a blog of given ID. 
    930  
     966      
    931967     @param    id        <b>string</b>       Blog ID 
    932968     @return   <b>record</b> 
     
    935971     { 
    936972          $blog = $this->getBlogs(array('blog_id'=>$id)); 
    937  
     973           
    938974          if ($blog->isEmpty()) { 
    939975               return false; 
    940976          } 
    941  
     977           
    942978          return $blog; 
    943979     } 
    944  
     980      
    945981     /** 
    946982     Returns a record of blogs. <b>$params</b> is an array with the following 
    947983     optionnal parameters: 
    948  
     984      
    949985      - <var>blog_id</var>: Blog ID 
    950986      - <var>q</var>: Search string on blog_id, blog_name and blog_url 
    951987      - <var>limit</var>: limit results 
    952  
     988      
    953989     @param    params         <b>array</b>        Parameters 
    954990     @param    count_only     <b>boolean</b>      Count only results 
     
    959995          $join = '';    // %1$s 
    960996          $where = '';   // %2$s 
    961  
     997           
    962998          if ($count_only) 
    963999          { 
     
    9771013               'WHERE NULL IS NULL '. 
    9781014               '%2$s '; 
    979  
     1015                
    9801016               if (!empty($params['order'])) { 
    9811017                    $strReq .= 'ORDER BY '.$this->con->escape($params['order']).' '; 
     
    9831019                    $strReq .= 'ORDER BY B.blog_id ASC '; 
    9841020               } 
    985  
     1021                
    9861022               if (!empty($params['limit'])) { 
    9871023                    $strReq .= $this->con->limit($params['limit']); 
    9881024               } 
    9891025          } 
    990  
     1026           
    9911027          if ($this->auth->userID() && !$this->auth->isSuperAdmin()) 
    9921028          { 
     
    9991035               $where = 'AND blog_status IN (1,0) '; 
    10001036          } 
    1001  
     1037           
    10021038          if (!empty($params['blog_id'])) { 
    10031039               $where .= "AND B.blog_id = '".$this->con->escape($params['blog_id'])."' "; 
    10041040          } 
    1005  
     1041           
    10061042          if (!empty($params['q'])) { 
    10071043               $params['q'] = strtolower(str_replace('*','%',$params['q'])); 
     
    10131049               ') '; 
    10141050          } 
    1015  
     1051           
    10161052          $strReq = sprintf($strReq,$join,$where); 
    10171053          return $this->con->select($strReq); 
    10181054     } 
    1019  
     1055      
    10201056     /** 
    10211057     Creates a new blog. 
    1022  
     1058      
    10231059     @param    cur            <b>cursor</b>       Blog cursor 
    10241060     */ 
     
    10281064               throw new Exception(__('You are not an administrator')); 
    10291065          } 
    1030  
     1066           
    10311067          $this->getBlogCursor($cur); 
    1032  
     1068           
    10331069          $cur->blog_creadt = date('Y-m-d H:i:s'); 
    10341070          $cur->blog_upddt = date('Y-m-d H:i:s'); 
    10351071          $cur->blog_uid = md5(uniqid()); 
    1036  
     1072           
    10371073          $cur->insert(); 
    10381074     } 
    1039  
     1075      
    10401076     /** 
    10411077     Updates a given blog. 
    1042  
     1078      
    10431079     @param    id        <b>string</b>       Blog ID 
    10441080     @param    cur       <b>cursor</b>       Blog cursor 
     
    10471083     { 
    10481084          $this->getBlogCursor($cur); 
    1049  
     1085           
    10501086          $cur->blog_upddt = date('Y-m-d H:i:s'); 
    1051  
     1087           
    10521088          $cur->update("WHERE blog_id = '".$this->con->escape($id)."'"); 
    10531089     } 
    1054  
     1090      
    10551091     private function getBlogCursor($cur) 
    10561092     { 
     
    10581094               && !preg_match('/^[A-Za-z0-9._-]{2,}$/',$cur->blog_id)) || 
    10591095               (!$cur->blog_id)) { 
    1060                throw new Exception(__('Blog ID must contain at least 2 characters using letters, numbers or symbols.')); 
    1061           } 
    1062  
     1096               throw new Exception(__('Blog ID must contain at least 2 characters using letters, numbers or symbols.'));  
     1097          } 
     1098           
    10631099          if (($cur->blog_name !== null && $cur->blog_name == '') || 
    10641100               (!$cur->blog_name)) { 
    10651101               throw new Exception(__('No blog name')); 
    10661102          } 
    1067  
     1103           
    10681104          if (($cur->blog_url !== null && $cur->blog_url == '') || 
    10691105               (!$cur->blog_url)) { 
    10701106               throw new Exception(__('No blog URL')); 
    10711107          } 
    1072  
     1108           
    10731109          if ($cur->blog_desc !== null) { 
    10741110               $cur->blog_desc = html::clean($cur->blog_desc); 
    10751111          } 
    10761112     } 
    1077  
     1113      
    10781114     /** 
    10791115     Removes a given blog. 
    10801116     @warning This will remove everything related to the blog (posts, 
    10811117     categories, comments, links...) 
    1082  
     1118      
    10831119     @param    id        <b>string</b>       Blog ID 
    10841120     */ 
     
    10881124               throw new Exception(__('You are not an administrator')); 
    10891125          } 
    1090  
     1126           
    10911127          $strReq = 'DELETE FROM '.$this->prefix.'blog '. 
    10921128                    "WHERE blog_id = '".$this->con->escape($id)."' "; 
    1093  
     1129           
    10941130          $this->con->execute($strReq); 
    10951131     } 
    1096  
     1132      
    10971133     /** 
    10981134     Checks if a blog exist. 
    1099  
     1135      
    11001136     @param    id        <b>string</b>       Blog ID 
    11011137     @return   <b>boolean</b> 
     
    11061142                    'FROM '.$this->prefix.'blog '. 
    11071143                    "WHERE blog_id = '".$this->con->escape($id)."' "; 
    1108  
     1144           
    11091145          $rs = $this->con->select($strReq); 
    1110  
     1146           
    11111147          return !$rs->isEmpty(); 
    11121148     } 
    1113  
     1149      
    11141150     /** 
    11151151     Count posts on a blog 
    1116  
     1152      
    11171153     @param    id        <b>string</b>       Blog ID 
    11181154     @param    type      <b>string</b>       Post type 
     
    11241160                    'FROM '.$this->prefix.'post '. 
    11251161                    "WHERE blog_id = '".$this->con->escape($id)."' "; 
    1126  
     1162           
    11271163          if ($type) { 
    11281164               $strReq .= "AND post_type = '".$this->con->escape($type)."' "; 
    11291165          } 
    1130  
     1166           
    11311167          return $this->con->select($strReq)->f(0); 
    11321168     } 
    11331169     //@} 
    1134  
     1170      
    11351171     /// @name HTML Filter methods 
    11361172     //@{ 
     
    11391175     tidy extension is present). If <b>enable_html_filter</b> blog setting is 
    11401176     false, returns not filtered string. 
    1141  
     1177      
    11421178     @param    str  <b>string</b>       String to filter 
    11431179     @return   <b>string</b> Filtered string. 
     
    11481184               return $str; 
    11491185          } 
    1150  
     1186           
    11511187          $filter = new htmlFilter; 
    11521188          $str = trim($filter->apply($str)); 
     
    11541190     } 
    11551191     //@} 
    1156  
     1192      
    11571193     /// @name wiki2xhtml methods 
    11581194     //@{ 
     
    11611197          $this->wiki2xhtml = new wiki2xhtml; 
    11621198     } 
    1163  
     1199      
    11641200     /** 
    11651201     Returns a transformed string with wiki2xhtml. 
    1166  
     1202      
    11671203     @param    str       <b>string</b>       String to transform 
    11681204     @return   <b>string</b>  Transformed string 
     
    11751211          return $this->wiki2xhtml->transform($str); 
    11761212     } 
    1177  
     1213      
    11781214     /** 
    11791215     Inits <var>wiki2xhtml</var> property for blog post. 
     
    11821218     { 
    11831219          $this->initWiki(); 
    1184  
     1220           
    11851221          $this->wiki2xhtml->setOpts(array( 
    11861222               'active_title' => 1, 
     
    12141250               'note_str' => '<div class="footnotes"><h4>Notes</h4>%s</div>' 
    12151251          )); 
    1216  
     1252           
    12171253          $this->wiki2xhtml->registerFunction('url:post',array($this,'wikiPostLink')); 
    1218  
     1254           
    12191255          # --BEHAVIOR-- coreWikiPostInit 
    12201256          $this->callBehavior('coreInitWikiPost',$this->wiki2xhtml); 
    12211257     } 
    1222  
     1258      
    12231259     /** 
    12241260     Inits <var>wiki2xhtml</var> property for simple blog comment (basic syntax). 
     
    12271263     { 
    12281264          $this->initWiki(); 
    1229  
     1265           
    12301266          $this->wiki2xhtml->setOpts(array( 
    12311267               'active_title' => 0, 
     
    12561292               'active_fr_syntax' => 0 
    12571293          )); 
    1258  
     1294           
    12591295          # --BEHAVIOR-- coreInitWikiSimpleComment 
    12601296          $this->callBehavior('coreInitWikiSimpleComment',$this->wiki2xhtml); 
    12611297     } 
    1262  
     1298      
    12631299     /** 
    12641300     Inits <var>wiki2xhtml</var> property for blog comment. 
     
    12671303     { 
    12681304          $this->initWiki(); 
    1269  
     1305           
    12701306          $this->wiki2xhtml->setOpts(array( 
    12711307               'active_title' => 0, 
     
    12961332               'active_fr_syntax' => 0 
    12971333          )); 
    1298  
     1334           
    12991335          # --BEHAVIOR-- coreInitWikiComment 
    13001336          $this->callBehavior('coreInitWikiComment',$this->wiki2xhtml); 
    13011337     } 
    1302  
     1338      
    13031339     public function wikiPostLink($url,$content) 
    13041340     { 
    1305           if (!($this->blog instanceof dcBlog)) { 
     1341          if (!($this->blog instanceof dcBlog)) {  
    13061342               return array(); 
    13071343          } 
    1308  
     1344           
    13091345          $post_id = abs((integer) substr($url,5)); 
    13101346          if (!$post_id) { 
    13111347               return array(); 
    13121348          } 
    1313  
     1349           
    13141350          $post = $this->blog->getPosts(array('post_id'=>$post_id)); 
    13151351          if ($post->isEmpty()) { 
    13161352               return array(); 
    13171353          } 
    1318  
     1354           
    13191355          $res = array('url' => $post->getURL()); 
    13201356          $post_title = $post->post_title; 
    1321  
     1357           
    13221358          if ($content != $url) { 
    13231359               $res['title'] = html::escapeHTML($post->post_title); 
    13241360          } 
    1325  
     1361           
    13261362          if ($content == '' || $content == $url) { 
    13271363               $res['content'] = html::escapeHTML($post->post_title); 
    13281364          } 
    1329  
     1365           
    13301366          if ($post->post_lang) { 
    13311367               $res['lang'] = $post->post_lang; 
    13321368          } 
    1333  
     1369           
    13341370          return $res; 
    13351371     } 
    13361372     //@} 
    1337  
     1373      
    13381374     /// @name Maintenance methods 
    13391375     //@{ 
     
    13411377     Creates default settings for active blog. Optionnal parameter 
    13421378     <var>defaults</var> replaces default params while needed. 
    1343  
     1379      
    13441380     @param    defaults       <b>array</b>   Default parameters 
    13451381     */ 
     
    14261462               ); 
    14271463          } 
    1428  
     1464           
    14291465          $settings = new dcSettings($this,null); 
    14301466          $settings->addNamespace('system'); 
    1431  
     1467           
    14321468          foreach ($defaults as $v) { 
    14331469               $settings->system->put($v[0],$v[2],$v[1],$v[3],false,true); 
    14341470          } 
    14351471     } 
    1436  
     1472      
    14371473     /** 
    14381474     Recreates entries search engine index. 
    1439  
     1475      
    14401476     @param    start     <b>integer</b>      Start entry index 
    14411477     @param    limit     <b>integer</b>      Number of entry to index 
    1442  
     1478      
    14431479     @return   <b>integer</b>      <var>$start</var> and <var>$limit</var> sum 
    14441480     */ 
     
    14491485          $rs = $this->con->select($strReq); 
    14501486          $count = $rs->f(0); 
    1451  
     1487           
    14521488          $strReq = 'SELECT post_id, post_title, post_excerpt_xhtml, post_content_xhtml '. 
    14531489                    'FROM '.$this->prefix.'post '; 
    1454  
     1490           
    14551491          if ($start !== null && $limit !== null) { 
    14561492               $strReq .= $this->con->limit($start,$limit); 
    14571493          } 
    1458  
     1494           
    14591495          $rs = $this->con->select($strReq,true); 
    1460  
     1496           
    14611497          $cur = $this->con->openCursor($this->prefix.'post'); 
    1462  
     1498           
    14631499          while ($rs->fetch()) 
    14641500          { 
    14651501               $words = $rs->post_title.' '. $rs->post_excerpt_xhtml.' '. 
    14661502               $rs->post_content_xhtml; 
    1467  
     1503                
    14681504               $cur->post_words = implode(' ',text::splitWords($words)); 
    14691505               $cur->update('WHERE post_id = '.(integer) $rs->post_id); 
    14701506               $cur->clean(); 
    14711507          } 
    1472  
     1508           
    14731509          if ($start+$limit > $count) { 
    14741510               return null; 
     
    14761512          return $start+$limit; 
    14771513     } 
    1478  
     1514      
    14791515     /** 
    14801516     Recreates comments search engine index. 
    1481  
     1517      
    14821518     @param    start     <b>integer</b>      Start comment index 
    14831519     @param    limit     <b>integer</b>      Number of comments to index 
    1484  
     1520      
    14851521     @return   <b>integer</b>      <var>$start</var> and <var>$limit</var> sum 
    14861522     */ 
     
    14911527          $rs = $this->con->select($strReq); 
    14921528          $count = $rs->f(0); 
    1493  
     1529           
    14941530          $strReq = 'SELECT comment_id, comment_content '. 
    14951531                    'FROM '.$this->prefix.'comment '; 
    1496  
     1532           
    14971533          if ($start !== null && $limit !== null) { 
    14981534               $strReq .= $this->con->limit($start,$limit); 
    14991535          } 
    1500  
     1536           
    15011537          $rs = $this->con->select($strReq); 
    1502  
     1538           
    15031539          $cur = $this->con->openCursor($this->prefix.'comment'); 
    1504  
     1540           
    15051541          while ($rs->fetch()) 
    15061542          { 
     
    15091545               $cur->clean(); 
    15101546          } 
    1511  
     1547           
    15121548          if ($start+$limit > $count) { 
    15131549               return null; 
     
    15151551          return $start+$limit; 
    15161552     } 
    1517  
     1553      
    15181554     /** 
    15191555     Reinits nb_comment and nb_trackback in post table. 
     
    15211557     public function countAllComments() 
    15221558     { 
    1523  
     1559      
    15241560          $updCommentReq = 'UPDATE '.$this->prefix.'post P '. 
    15251561               'SET nb_comment = ('. 
     
    15371573          $this->con->execute($updTrackbackReq); 
    15381574     } 
    1539  
     1575      
    15401576     /** 
    15411577     Empty templates cache directory 
     
    15501586     /** 
    15511587      Return elapsed time since script has been started 
    1552       @param     $mtime <b>float</b> timestamp (microtime format) to evaluate delta from 
    1553                                           current time is taken if null 
    1554       @return <b>float</b>          elapsed time 
     1588      @param   $mtime <b>float</b> timestamp (microtime format) to evaluate delta from 
     1589                                     current time is taken if null 
     1590      @return <b>float</b>        elapsed time 
    15551591      */ 
    15561592     public function getElapsedTime ($mtime=null) { 
  • inc/load_plugin_file.php

    r2655 r2911  
    6161$paths = array_reverse(explode(PATH_SEPARATOR,DC_PLUGINS_ROOT)); 
    6262 
    63 # Adding admin/res folder here to load some stuff 
     63# Adding some folders here to load some stuff 
    6464$paths[] = dirname(__FILE__).'/swf'; 
     65$paths[] = dirname(__FILE__).'/js'; 
     66$paths[] = dirname(__FILE__).'/css'; 
    6567 
    6668foreach ($paths as $m) 
  • inc/load_plugin_file.php

    r2804 r2911  
    1414if (@is_dir('/usr/lib/clearbricks')) { 
    1515     define('CLEARBRICKS_PATH','/usr/lib/clearbricks'); 
    16 } elseif (is_dir(dirname(__FILE__).'/libs/clearbricks')) { 
    17      define('CLEARBRICKS_PATH',dirname(__FILE__).'/libs/clearbricks'); 
     16} elseif (is_dir(dirname(__FILE__).'/../vendor/dotclear/clearbricks')) { 
     17     define('CLEARBRICKS_PATH',dirname(__FILE__).'/../vendor/dotclear/clearbricks'); 
    1818} elseif (isset($_SERVER['CLEARBRICKS_PATH']) && is_dir($_SERVER['CLEARBRICKS_PATH'])) { 
    1919     define('CLEARBRICKS_PATH',$_SERVER['CLEARBRICKS_PATH']); 
  • inc/prepend.php

    r2715 r2911  
    170170define('DC_L10N_ROOT',dirname(__FILE__).'/../locales'); 
    171171define('DC_L10N_UPDATE_URL','http://services.dotclear.net/dc2.l10n/?version=%s'); 
    172 define('DC_DISTRIB_PLUGINS','aboutConfig,akismet,antispam,attachments,blogroll,blowupConfig,dclegacy,fairTrackbacks,importExport,maintenance,pages,pings,simpleMenu,tags,themeEditor,userPref,widgets,dcLegacyEditor'); 
     172define('DC_DISTRIB_PLUGINS','aboutConfig,akismet,antispam,attachments,blogroll,blowupConfig,dclegacy,fairTrackbacks,importExport,maintenance,pages,pings,simpleMenu,tags,themeEditor,userPref,widgets,dcLegacyEditor,dcCKEditor'); 
    173173define('DC_DISTRIB_THEMES','berlin,blueSilence,blowupConfig,customCSS,default,ductile'); 
    174174define('DC_DEFAULT_TPLSET','mustek'); 
     175define('DC_DEFAULT_JQUERY','1.4.2'); 
    175176 
    176177if (!defined('DC_VENDOR_NAME')) { 
     
    270271$core->url->register('xmlrpc','xmlrpc','^xmlrpc/(.+)$',array('dcUrlHandlers','xmlrpc')); 
    271272 
     273// Should use dcAdminURL class, but only in admin -> to be moved to public/prepend.php and admin/prepend.php ? 
    272274$core->setPostType('post','post.php?id=%d',$core->url->getURLFor('post','%s'),'Posts'); 
    273275 
     
    280282define('DC_MAX_UPLOAD_SIZE',$u_max_size); 
    281283unset($u_max_size); unset($p_max_size); 
     284 
     285# Register supplemental mime types 
     286files::registerMimeTypes(array( 
     287     // Audio 
     288     'aac'     => 'audio/aac', 
     289     'ogg'     => 'audio/ogg', 
     290     'weba'    => 'audio/webm', 
     291     'm4a'     => 'audio/mp4', 
     292     // Video 
     293     'mp4'     => 'video/mp4', 
     294     'm4p'     => 'video/mp4', 
     295     'webm'    => 'video/webm' 
     296     )); 
    282297 
    283298# Shutdown 
  • inc/prepend.php

    r2903 r2911  
    1515 
    1616/* ------------------------------------------------------------------------------------------- */ 
    17 #  ClearBricks, DotClear classes auto-loader 
     17#  ClearBricks, Twig, DotClear classes auto-loader 
    1818if (@is_dir('/usr/lib/clearbricks')) { 
    1919     define('CLEARBRICKS_PATH','/usr/lib/clearbricks'); 
    20 } elseif (is_dir(dirname(__FILE__).'/libs/clearbricks')) { 
    21      define('CLEARBRICKS_PATH',dirname(__FILE__).'/libs/clearbricks'); 
     20} elseif (is_dir(dirname(__FILE__).'/../vendor/dotclear/clearbricks')) { 
     21     define('CLEARBRICKS_PATH',dirname(__FILE__).'/../vendor/dotclear/clearbricks'); 
    2222} elseif (isset($_SERVER['CLEARBRICKS_PATH']) && is_dir($_SERVER['CLEARBRICKS_PATH'])) { 
    2323     define('CLEARBRICKS_PATH',$_SERVER['CLEARBRICKS_PATH']); 
     
    2929 
    3030require CLEARBRICKS_PATH.'/_common.php'; 
    31 $__autoload['dcCore']        = dirname(__FILE__).'/core/class.dc.core.php'; 
    32 $__autoload['dcAuth']        = dirname(__FILE__).'/core/class.dc.auth.php'; 
    33 $__autoload['dcBlog']        = dirname(__FILE__).'/core/class.dc.blog.php'; 
    34 $__autoload['dcCategories']  = dirname(__FILE__).'/core/class.dc.categories.php'; 
    35 $__autoload['dcError']       = dirname(__FILE__).'/core/class.dc.error.php'; 
    36 $__autoload['dcMeta']        = dirname(__FILE__).'/core/class.dc.meta.php'; 
    37 $__autoload['dcMedia']       = dirname(__FILE__).'/core/class.dc.media.php'; 
    38 $__autoload['dcPostMedia']   = dirname(__FILE__).'/core/class.dc.postmedia.php'; 
    39 $__autoload['dcModules']     = dirname(__FILE__).'/core/class.dc.modules.php'; 
    40 $__autoload['dcPlugins']     = dirname(__FILE__).'/core/class.dc.plugins.php'; 
    41 $__autoload['dcThemes']      = dirname(__FILE__).'/core/class.dc.themes.php'; 
    42 $__autoload['dcRestServer']  = dirname(__FILE__).'/core/class.dc.rest.php'; 
    43 $__autoload['dcNamespace']   = dirname(__FILE__).'/core/class.dc.namespace.php'; 
    44 $__autoload['dcSettings']    = dirname(__FILE__).'/core/class.dc.settings.php'; 
    45 $__autoload['dcTrackback']   = dirname(__FILE__).'/core/class.dc.trackback.php'; 
    46 $__autoload['dcUpdate']      = dirname(__FILE__).'/core/class.dc.update.php'; 
    47 $__autoload['dcUtils']       = dirname(__FILE__).'/core/class.dc.utils.php'; 
    48 $__autoload['dcXmlRpc']      = dirname(__FILE__).'/core/class.dc.xmlrpc.php'; 
    49 $__autoload['dcLog']         = dirname(__FILE__).'/core/class.dc.log.php'; 
    50 $__autoload['dcWorkspace']   = dirname(__FILE__).'/core/class.dc.workspace.php'; 
    51 $__autoload['dcPrefs']       = dirname(__FILE__).'/core/class.dc.prefs.php'; 
    52 $__autoload['dcStore']       = dirname(__FILE__).'/core/class.dc.store.php'; 
    53 $__autoload['dcStoreReader'] = dirname(__FILE__).'/core/class.dc.store.reader.php'; 
    54 $__autoload['dcStoreParser'] = dirname(__FILE__).'/core/class.dc.store.parser.php'; 
    55 $__autoload['dcFavorites']   = dirname(__FILE__).'/admin/class.dc.favorites.php'; 
    56  
    57 $__autoload['rsExtPost']    = dirname(__FILE__).'/core/class.dc.rs.extensions.php'; 
    58 $__autoload['rsExtComment'] = dirname(__FILE__).'/core/class.dc.rs.extensions.php'; 
    59 $__autoload['rsExtDates']   = dirname(__FILE__).'/core/class.dc.rs.extensions.php'; 
    60 $__autoload['rsExtUser']    = dirname(__FILE__).'/core/class.dc.rs.extensions.php'; 
    61  
    62 $__autoload['dcMenu']            = dirname(__FILE__).'/admin/class.dc.menu.php'; 
    63 $__autoload['dcPage']            = dirname(__FILE__).'/admin/lib.dc.page.php'; 
    64 $__autoload['adminGenericList']  = dirname(__FILE__).'/admin/lib.pager.php'; 
    65 $__autoload['adminPostList']     = dirname(__FILE__).'/admin/lib.pager.php'; 
    66 $__autoload['adminPostMiniList'] = dirname(__FILE__).'/admin/lib.pager.php'; 
    67 $__autoload['adminCommentList']  = dirname(__FILE__).'/admin/lib.pager.php'; 
    68 $__autoload['adminUserList']     = dirname(__FILE__).'/admin/lib.pager.php'; 
    69 $__autoload['dcPager']           = dirname(__FILE__).'/admin/lib.pager.php'; 
    70 $__autoload['dcAdminCombos']     = dirname(__FILE__).'/admin/lib.admincombos.php'; 
    71 $__autoload['adminModulesList']  = dirname(__FILE__).'/admin/lib.moduleslist.php'; 
    72 $__autoload['adminThemesList']   = dirname(__FILE__).'/admin/lib.moduleslist.php'; 
     31$__autoload['dcCore']                   = dirname(__FILE__).'/core/class.dc.core.php'; 
     32$__autoload['dcAuth']                   = dirname(__FILE__).'/core/class.dc.auth.php'; 
     33$__autoload['dcBlog']                   = dirname(__FILE__).'/core/class.dc.blog.php'; 
     34$__autoload['dcCategories']             = dirname(__FILE__).'/core/class.dc.categories.php'; 
     35$__autoload['dcError']                  = dirname(__FILE__).'/core/class.dc.error.php'; 
     36$__autoload['dcMeta']                   = dirname(__FILE__).'/core/class.dc.meta.php'; 
     37$__autoload['dcMedia']                  = dirname(__FILE__).'/core/class.dc.media.php'; 
     38$__autoload['dcPostMedia']                   = dirname(__FILE__).'/core/class.dc.postmedia.php'; 
     39$__autoload['dcModules']                = dirname(__FILE__).'/core/class.dc.modules.php'; 
     40$__autoload['dcPlugins']                = dirname(__FILE__).'/core/class.dc.plugins.php'; 
     41$__autoload['dcThemes']                 = dirname(__FILE__).'/core/class.dc.themes.php'; 
     42$__autoload['dcRestServer']             = dirname(__FILE__).'/core/class.dc.rest.php'; 
     43$__autoload['dcNamespace']              = dirname(__FILE__).'/core/class.dc.namespace.php'; 
     44$__autoload['dcSettings']               = dirname(__FILE__).'/core/class.dc.settings.php'; 
     45$__autoload['dcTrackback']              = dirname(__FILE__).'/core/class.dc.trackback.php'; 
     46$__autoload['dcUpdate']                 = dirname(__FILE__).'/core/class.dc.update.php'; 
     47$__autoload['dcUtils']                  = dirname(__FILE__).'/core/class.dc.utils.php'; 
     48$__autoload['dcXmlRpc']                 = dirname(__FILE__).'/core/class.dc.xmlrpc.php'; 
     49$__autoload['dcLog']                    = dirname(__FILE__).'/core/class.dc.log.php'; 
     50$__autoload['dcWorkspace']              = dirname(__FILE__).'/core/class.dc.workspace.php'; 
     51$__autoload['dcPrefs']                  = dirname(__FILE__).'/core/class.dc.prefs.php'; 
     52$__autoload['dcTwigPage']               = dirname(__FILE__).'/core/class.dc.twig.page.php'; 
     53$__autoload['dcStore']             = dirname(__FILE__).'/core/class.dc.store.php'; 
     54$__autoload['dcStoreReader']       = dirname(__FILE__).'/core/class.dc.store.reader.php'; 
     55$__autoload['dcStoreParser']       = dirname(__FILE__).'/core/class.dc.store.parser.php'; 
     56$__autoload['dcFavorites']              = dirname(__FILE__).'/admin/class.dc.favorites.php'; 
     57 
     58$__autoload['rsExtPost']                = dirname(__FILE__).'/core/class.dc.rs.extensions.php'; 
     59$__autoload['rsExtComment']             = dirname(__FILE__).'/core/class.dc.rs.extensions.php'; 
     60$__autoload['rsExtDates']               = dirname(__FILE__).'/core/class.dc.rs.extensions.php'; 
     61$__autoload['rsExtUser']                = dirname(__FILE__).'/core/class.dc.rs.extensions.php'; 
     62 
     63$__autoload['dcAdminContext']                = dirname(__FILE__).'/admin/class.dc.admincontext.php'; 
     64$__autoload['dcMenu']                   = dirname(__FILE__).'/admin/class.dc.menu.php'; 
     65$__autoload['dcPage']                   = dirname(__FILE__).'/admin/lib.dc.page.php'; 
     66$__autoload['adminGenericList']         = dirname(__FILE__).'/admin/lib.pager.php'; 
     67$__autoload['adminPostList']            = dirname(__FILE__).'/admin/lib.pager.php'; 
     68$__autoload['adminPostMiniList']        = dirname(__FILE__).'/admin/lib.pager.php'; 
     69$__autoload['adminCommentList']         = dirname(__FILE__).'/admin/lib.pager.php'; 
     70$__autoload['adminUserList']            = dirname(__FILE__).'/admin/lib.pager.php'; 
     71$__autoload['dcPager']        = dirname(__FILE__).'/admin/lib.pager.php'; 
     72$__autoload['dcAdminCombos']            = dirname(__FILE__).'/admin/lib.admincombos.php'; 
     73$__autoload['adminModulesList']              = dirname(__FILE__).'/admin/lib.moduleslist.php'; 
     74$__autoload['adminThemesList']               = dirname(__FILE__).'/admin/lib.moduleslist.php'; 
    7375$__autoload['dcThemeConfig']     = dirname(__FILE__).'/admin/lib.themeconfig.php'; 
    7476 
    75 $__autoload['dcTemplate']            = dirname(__FILE__).'/public/class.dc.template.php'; 
    76 $__autoload['context']               = dirname(__FILE__).'/public/lib.tpl.context.php'; 
    77 $__autoload['dcUrlHandlers']         = dirname(__FILE__).'/public/lib.urlhandlers.php'; 
     77$__autoload['dcTemplate']               = dirname(__FILE__).'/public/class.dc.template.php'; 
     78$__autoload['context']                  = dirname(__FILE__).'/public/lib.tpl.context.php'; 
     79$__autoload['dcUrlHandlers']            = dirname(__FILE__).'/public/lib.urlhandlers.php'; 
    7880$__autoload['dcAdminURL']            = dirname(__FILE__).'/admin/lib.dc.adminurl.php'; 
    79 $__autoload['dcPostsActionsPage']    = dirname(__FILE__).'/admin/actions/class.dcactionposts.php'; 
    80 $__autoload['dcCommentsActionsPage'] = dirname(__FILE__).'/admin/actions/class.dcactioncomments.php'; 
    81 $__autoload['dcActionsPage']         = dirname(__FILE__).'/admin/actions/class.dcaction.php'; 
     81$__autoload['dcPostsActionsPage']            = dirname(__FILE__).'/admin/actions/class.dcactionposts.php'; 
     82$__autoload['dcCommentsActionsPage']              = dirname(__FILE__).'/admin/actions/class.dcactioncomments.php'; 
     83$__autoload['dcActionsPage']            = dirname(__FILE__).'/admin/actions/class.dcaction.php'; 
     84$__autoload['dcForm']              = dirname(__FILE__).'/admin/class.dc.form.php'; 
     85$__autoload['dcFormExtension']               = dirname(__FILE__).'/admin/class.dc.form.php'; 
     86$__autoload['dcTabExtension']           = dirname(__FILE__).'/admin/class.dc.tab.php'; 
     87$__autoload['dcItemList']               = dirname(__FILE__).'/admin/class.dc.list.php'; 
     88$__autoload['dcListFetcher']            = dirname(__FILE__).'/admin/class.dc.list.php'; 
     89 
     90foreach (array('dcFilterSet', 'dcFilter','dcFilterCombo','dcFilterText','dcFilterBoolean') as $c) { 
     91     $__autoload[$c] = dirname(__FILE__).'/admin/class.dc.filter.php'; 
     92} 
    8293 
    8394# Clearbricks extensions 
    8495html::$absolute_regs[] = '/(<param\s+name="movie"\s+value=")(.*?)(")/msu'; 
    8596html::$absolute_regs[] = '/(<param\s+name="FlashVars"\s+value=".*?(?:mp3|flv)=)(.*?)(&|")/msu'; 
     97 
     98if (@is_dir('/usr/lib/twig')) { 
     99     define('TWIG_PATH','/usr/lib/Twig'); 
     100} elseif (is_dir(dirname(__FILE__).'/../vendor/twig/twig/lib/Twig')) { 
     101     define('TWIG_PATH',dirname(__FILE__).'/../vendor/twig/twig/lib/Twig'); 
     102} elseif (isset($_SERVER['TWIG_PATH']) && is_dir($_SERVER['TWIG_PATH'])) { 
     103     define('TWIG_PATH',$_SERVER['TWIG_PATH']); 
     104} 
     105 
     106if (!defined('TWIG_PATH') || !is_dir(TWIG_PATH)) { 
     107     exit('No Twig path defined'); 
     108} 
     109require TWIG_PATH.'/Autoloader.php'; 
     110Twig_Autoloader::register(); 
     111 
    86112/* ------------------------------------------------------------------------------------------- */ 
    87113 
     
    140166# Constants 
    141167define('DC_ROOT',path::real(dirname(__FILE__).'/..')); 
    142 define('DC_VERSION','2.8-dev'); 
     168define('DC_VERSION','2.99-dev'); 
    143169define('DC_DIGESTS',dirname(__FILE__).'/digests'); 
    144170define('DC_L10N_ROOT',dirname(__FILE__).'/../locales'); 
  • inc/public/lib.urlhandlers.php

    r2650 r2911  
    110110 
    111111          header('Content-Type: '.$_ctx->content_type.'; charset=UTF-8'); 
     112 
     113          if ($core->blog->settings->system->prevents_clickjacking) { 
     114               // Prevents Clickjacking as far as possible 
     115               header('X-Frame-Options: SAMEORIGIN'); // FF 3.6.9+ Chrome 4.1+ IE 8+ Safari 4+ Opera 10.5+ 
     116          } 
     117 
    112118          $result['content'] = $core->tpl->getData($_ctx->current_tpl); 
    113119          $result['content_type'] = $_ctx->content_type; 
     
    385391 
    386392                         # Check for match 
     393                         # Note: We must prefix post_id key with '#'' in pwd_cookie array in order to avoid integer conversion 
     394                         # because MyArray["12345"] is treated as MyArray[12345] 
    387395                         if ((!empty($_POST['password']) && $_POST['password'] == $post_password) 
    388                          || (isset($pwd_cookie[$post_id]) && $pwd_cookie[$post_id] == $post_password)) 
     396                         || (isset($pwd_cookie['#'.$post_id]) && $pwd_cookie['#'.$post_id] == $post_password)) 
    389397                         { 
    390                               $pwd_cookie[$post_id] = $post_password; 
     398                              $pwd_cookie['#'.$post_id] = $post_password; 
    391399                              setcookie('dc_passwd',json_encode($pwd_cookie),0,'/'); 
    392400                         } 
Note: See TracChangeset for help on using the changeset viewer.

Sites map