Dotclear


Ignore:
Timestamp:
02/23/16 16:58:19 (9 years ago)
Author:
franck <carnet.franck.paul@…>
Branch:
default
Children:
3189:0965daf0bac6, 3190:8e3696c934c1
Message:

Make growing up from older version more easier for external code (plugin)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • inc/dbschema/upgrade.php

    r3164 r3188  
    4040                    /* Some other upgrades 
    4141                    ------------------------------------ */ 
    42                     # Populate media_dir field (since 2.0-beta3.3) 
    43                     if (version_compare($version,'2.0-beta3.3','<')) 
    44                     { 
    45                          $strReq = 'SELECT media_id, media_file FROM '.$core->prefix.'media '; 
    46                          $rs_m = $core->con->select($strReq); 
    47                          while($rs_m->fetch()) { 
    48                               $cur = $core->con->openCursor($core->prefix.'media'); 
    49                               $cur->media_dir = dirname($rs_m->media_file); 
    50                               $cur->update('WHERE media_id = '.(integer) $rs_m->media_id); 
    51                          } 
    52                     } 
    53  
    54                     if (version_compare($version,'2.0-beta7.3','<')) 
    55                     { 
    56                          # Blowup becomes default theme 
    57                          $strReq = 'UPDATE '.$core->prefix.'setting '. 
    58                                    "SET setting_value = '%s' ". 
    59                                    "WHERE setting_id = 'theme' ". 
    60                                    "AND setting_value = '%s' ". 
    61                                    'AND blog_id IS NOT NULL '; 
    62                          $core->con->execute(sprintf($strReq,'blueSilence','default')); 
    63                          $core->con->execute(sprintf($strReq,'default','blowup')); 
    64                     } 
    65  
    66                     if (version_compare($version,'2.1-alpha2-r2383','<')) 
    67                     { 
    68                          $schema = dbSchema::init($core->con); 
    69                          $schema->dropUnique($core->prefix.'category',$core->prefix.'uk_cat_title'); 
    70  
    71                          # Reindex categories 
    72                          $rs = $core->con->select( 
    73                               'SELECT cat_id, cat_title, blog_id '. 
    74                               'FROM '.$core->prefix.'category '. 
    75                               'ORDER BY blog_id ASC , cat_position ASC ' 
    76                          ); 
    77                          $cat_blog = $rs->blog_id; 
    78                          $i = 2; 
    79                          while ($rs->fetch()) { 
    80                               if ($cat_blog != $rs->blog_id) { 
    81                                    $i = 2; 
    82                               } 
    83                               $core->con->execute( 
    84                                    'UPDATE '.$core->prefix.'category SET ' 
    85                                    .'cat_lft = '.($i++).', cat_rgt = '.($i++).' '. 
    86                                    'WHERE cat_id = '.(integer) $rs->cat_id 
    87                               ); 
    88                               $cat_blog = $rs->blog_id; 
    89                          } 
    90                     } 
    91  
    92                     if (version_compare($version,'2.1.6','<=')) 
    93                     { 
    94                          # ie7js has been upgraded 
    95                          $ie7files = array ( 
    96                               'ie7-base64.php ', 
    97                               'ie7-content.htc', 
    98                               'ie7-core.js', 
    99                               'ie7-css2-selectors.js', 
    100                               'ie7-css3-selectors.js', 
    101                               'ie7-css-strict.js', 
    102                               'ie7-dhtml.js', 
    103                               'ie7-dynamic-attributes.js', 
    104                               'ie7-fixed.js', 
    105                               'ie7-graphics.js', 
    106                               'ie7-html4.js', 
    107                               'ie7-ie5.js', 
    108                               'ie7-layout.js', 
    109                               'ie7-load.htc', 
    110                               'ie7-object.htc', 
    111                               'ie7-overflow.js', 
    112                               'ie7-quirks.js', 
    113                               'ie7-server.css', 
    114                               'ie7-standard-p.js', 
    115                               'ie7-xml-extras.js' 
    116                               ); 
    117                          foreach ($ie7files as $f) { 
    118                               @unlink(DC_ROOT.'/admin/js/ie7/'.$f); 
    119                          } 
    120                     } 
    121  
    122                     if (version_compare($version,'2.2-alpha1-r3043','<')) 
    123                     { 
    124                          # metadata has been integrated to the core. 
    125                          $core->plugins->loadModules(DC_PLUGINS_ROOT); 
    126                          if ($core->plugins->moduleExists('metadata')) { 
    127                               $core->plugins->deleteModule('metadata'); 
    128                          } 
    129  
    130                          # Tags template class has been renamed 
    131                          $sqlstr = 
    132                               'SELECT blog_id, setting_id, setting_value '. 
    133                               'FROM '.$core->prefix.'setting '. 
    134                               'WHERE (setting_id = \'widgets_nav\' OR setting_id = \'widgets_extra\') '. 
    135                               'AND setting_ns = \'widgets\';'; 
    136                          $rs = $core->con->select($sqlstr); 
    137                          while ($rs->fetch()) { 
    138                               $widgetsettings = base64_decode($rs->setting_value); 
    139                               $widgetsettings = str_replace ('s:11:"tplMetadata"','s:7:"tplTags"',$widgetsettings); 
    140                               $cur = $core->con->openCursor($core->prefix.'setting'); 
    141                               $cur->setting_value = base64_encode($widgetsettings); 
    142                               $sqlstr = 'WHERE setting_id = \''.$rs->setting_id.'\' AND setting_ns = \'widgets\' '. 
    143                               'AND blog_id ' . 
    144                               ($rs->blog_id == NULL ? 'is NULL' : '= \''.$core->con->escape($rs->blog_id).'\''); 
    145                               $cur->update($sqlstr); 
    146                          } 
    147                     } 
    148  
    149                     if (version_compare($version,'2.3','<')) 
    150                     { 
    151                          # Add global favorites 
    152                          $init_fav = array(); 
    153  
    154                          $init_fav['new_post'] = array('new_post','New entry','post.php', 
    155                               'images/menu/edit.png','images/menu/edit-b.png', 
    156                               'usage,contentadmin',null,null); 
    157                          $init_fav['newpage'] = array('newpage','New page','plugin.php?p=pages&amp;act=page', 
    158                               'index.php?pf=pages/icon-np.png','index.php?pf=pages/icon-np-big.png', 
    159                               'contentadmin,pages',null,null); 
    160                          $init_fav['media'] = array('media','Media manager','media.php', 
    161                               'images/menu/media.png','images/menu/media-b.png', 
    162                               'media,media_admin',null,null); 
    163                          $init_fav['widgets'] = array('widgets','Presentation widgets','plugin.php?p=widgets', 
    164                               'index.php?pf=widgets/icon.png','index.php?pf=widgets/icon-big.png', 
    165                               'admin',null,null); 
    166                          $init_fav['blog_theme'] = array('blog_theme','Blog appearance','blog_theme.php', 
    167                               'images/menu/themes.png','images/menu/blog-theme-b.png', 
    168                               'admin',null,null); 
    169  
    170                          $count = 0; 
    171                          foreach ($init_fav as $k => $f) { 
    172                               $t = array('name' => $f[0],'title' => $f[1],'url' => $f[2], 'small-icon' => $f[3], 
    173                                    'large-icon' => $f[4],'permissions' => $f[5],'id' => $f[6],'class' => $f[7]); 
    174                               $sqlstr = 'INSERT INTO '.$core->prefix.'pref (pref_id, user_id, pref_ws, pref_value, pref_type, pref_label) VALUES ('. 
    175                                    '\''.sprintf("g%03s",$count).'\',NULL,\'favorites\',\''.serialize($t).'\',\'string\',NULL);'; 
    176                               $core->con->execute($sqlstr); 
    177                               $count++; 
    178                          } 
    179  
    180                          # A bit of housecleaning for no longer needed files 
    181                          $remfiles = array ( 
    182                               'admin/style/cat-bg.png', 
    183                               'admin/style/footer-bg.png', 
    184                               'admin/style/head-logo.png', 
    185                               'admin/style/tab-bg.png', 
    186                               'admin/style/tab-c-l.png', 
    187                               'admin/style/tab-c-r.png', 
    188                               'admin/style/tab-l-l.png', 
    189                               'admin/style/tab-l-r.png', 
    190                               'admin/style/tab-n-l.png', 
    191                               'admin/style/tab-n-r.png', 
    192                               'inc/clearbricks/_common.php', 
    193                               'inc/clearbricks/common/lib.crypt.php', 
    194                               'inc/clearbricks/common/lib.date.php', 
    195                               'inc/clearbricks/common/lib.files.php', 
    196                               'inc/clearbricks/common/lib.form.php', 
    197                               'inc/clearbricks/common/lib.html.php', 
    198                               'inc/clearbricks/common/lib.http.php', 
    199                               'inc/clearbricks/common/lib.l10n.php', 
    200                               'inc/clearbricks/common/lib.text.php', 
    201                               'inc/clearbricks/common/tz.dat', 
    202                               'inc/clearbricks/common/_main.php', 
    203                               'inc/clearbricks/dblayer/class.cursor.php', 
    204                               'inc/clearbricks/dblayer/class.mysql.php', 
    205                               'inc/clearbricks/dblayer/class.pgsql.php', 
    206                               'inc/clearbricks/dblayer/class.sqlite.php', 
    207                               'inc/clearbricks/dblayer/dblayer.php', 
    208                               'inc/clearbricks/dbschema/class.dbschema.php', 
    209                               'inc/clearbricks/dbschema/class.dbstruct.php', 
    210                               'inc/clearbricks/dbschema/class.mysql.dbschema.php', 
    211                               'inc/clearbricks/dbschema/class.pgsql.dbschema.php', 
    212                               'inc/clearbricks/dbschema/class.sqlite.dbschema.php', 
    213                               'inc/clearbricks/diff/lib.diff.php', 
    214                               'inc/clearbricks/diff/lib.unified.diff.php', 
    215                               'inc/clearbricks/filemanager/class.filemanager.php', 
    216                               'inc/clearbricks/html.filter/class.html.filter.php', 
    217                               'inc/clearbricks/html.validator/class.html.validator.php', 
    218                               'inc/clearbricks/image/class.image.meta.php', 
    219                               'inc/clearbricks/image/class.image.tools.php', 
    220                               'inc/clearbricks/mail/class.mail.php', 
    221                               'inc/clearbricks/mail/class.socket.mail.php', 
    222                               'inc/clearbricks/net/class.net.socket.php', 
    223                               'inc/clearbricks/net.http/class.net.http.php', 
    224                               'inc/clearbricks/net.http.feed/class.feed.parser.php', 
    225                               'inc/clearbricks/net.http.feed/class.feed.reader.php', 
    226                               'inc/clearbricks/net.xmlrpc/class.net.xmlrpc.php', 
    227                               'inc/clearbricks/pager/class.pager.php', 
    228                               'inc/clearbricks/rest/class.rest.php', 
    229                               'inc/clearbricks/session.db/class.session.db.php', 
    230                               'inc/clearbricks/template/class.template.php', 
    231                               'inc/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php', 
    232                               'inc/clearbricks/url.handler/class.url.handler.php', 
    233                               'inc/clearbricks/zip/class.unzip.php', 
    234                               'inc/clearbricks/zip/class.zip.php', 
    235                               'themes/default/tpl/.htaccess', 
    236                               'themes/default/tpl/404.html', 
    237                               'themes/default/tpl/archive.html', 
    238                               'themes/default/tpl/archive_month.html', 
    239                               'themes/default/tpl/category.html', 
    240                               'themes/default/tpl/home.html', 
    241                               'themes/default/tpl/post.html', 
    242                               'themes/default/tpl/search.html', 
    243                               'themes/default/tpl/tag.html', 
    244                               'themes/default/tpl/tags.html', 
    245                               'themes/default/tpl/user_head.html', 
    246                               'themes/default/tpl/_flv_player.html', 
    247                               'themes/default/tpl/_footer.html', 
    248                               'themes/default/tpl/_head.html', 
    249                               'themes/default/tpl/_mp3_player.html', 
    250                               'themes/default/tpl/_top.html' 
    251                          ); 
    252                          $remfolders = array ( 
    253                               'inc/clearbricks/common', 
    254                               'inc/clearbricks/dblayer', 
    255                               'inc/clearbricks/dbschema', 
    256                               'inc/clearbricks/diff', 
    257                               'inc/clearbricks/filemanager', 
    258                               'inc/clearbricks/html.filter', 
    259                               'inc/clearbricks/html.validator', 
    260                               'inc/clearbricks/image', 
    261                               'inc/clearbricks/mail', 
    262                               'inc/clearbricks/net', 
    263                               'inc/clearbricks/net.http', 
    264                               'inc/clearbricks/net.http.feed', 
    265                               'inc/clearbricks/net.xmlrpc', 
    266                               'inc/clearbricks/pager', 
    267                               'inc/clearbricks/rest', 
    268                               'inc/clearbricks/session.db', 
    269                               'inc/clearbricks/template', 
    270                               'inc/clearbricks/text.wiki2xhtml', 
    271                               'inc/clearbricks/url.handler', 
    272                               'inc/clearbricks/zip', 
    273                               'inc/clearbricks', 
    274                               'themes/default/tpl' 
    275                          ); 
    276  
    277                          foreach ($remfiles as $f) { 
    278                               @unlink(DC_ROOT.'/'.$f); 
    279                          } 
    280                          foreach ($remfolders as $f) { 
    281                               @rmdir(DC_ROOT.'/'.$f); 
    282                          } 
    283                     } 
    284  
    285                     if (version_compare($version,'2.3.1','<')) 
    286                     { 
    287                          # Remove unecessary file 
    288                          @unlink(DC_ROOT.'/'.'inc/libs/clearbricks/.hgignore'); 
    289                     } 
    290  
    291                     if (version_compare($version,'2.4.0','<=')) 
    292                     { 
    293                          # setup media_exclusion 
    294                          $strReq = 'UPDATE '.$core->prefix.'setting '. 
    295                                    "SET setting_value = '/\\.php\$/i' ". 
    296                                    "WHERE setting_id = 'media_exclusion' ". 
    297                                    "AND setting_value = '' "; 
    298                          $core->con->execute($strReq); 
    299                     } 
    300  
    301                     if (version_compare($version,'2.5','<=')) 
    302                     { 
    303                          # Try to disable daInstaller plugin if it has been installed outside the default plugins directory 
    304                          $path = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); 
    305                          $default = path::real(dirname(__FILE__).'/../../plugins/'); 
    306                          foreach ($path as $root) 
    307                          { 
    308                               if (!is_dir($root) || !is_readable($root)) { 
    309                                    continue; 
    310                               } 
    311                               if (substr($root,-1) != '/') { 
    312                                    $root .= '/'; 
    313                               } 
    314                               if (($p = @dir($root)) === false) { 
    315                                    continue; 
    316                               } 
    317                               if(path::real($root) == $default) { 
    318                                    continue; 
    319                               } 
    320                               if (($d = @dir($root.'daInstaller')) === false) { 
    321                                    continue; 
    322                               } 
    323                               $f = $root.'/daInstaller/_disabled'; 
    324                               if (!file_exists($f)) 
    325                               { 
    326                                    @file_put_contents($f,''); 
    327                               } 
    328                          } 
    329                     } 
    330  
    331                     if (version_compare($version,'2.5.1','<=')) 
    332                     { 
    333                          // Flash enhanced upload no longer needed 
    334                          @unlink(DC_ROOT.'/'.'inc/swf/swfupload.swf'); 
    335                     } 
    336  
    337                     if (version_compare($version,'2.6','<=')) 
    338                     { 
    339                          // README has been replaced by README.md and CONTRIBUTING.md 
    340                          @unlink(DC_ROOT.'/'.'README'); 
    341  
    342                          // trackbacks are now merged into posts 
    343                          @unlink(DC_ROOT.'/'.'admin/trackbacks.php'); 
    344  
    345                          # daInstaller has been integrated to the core. 
    346                          # Try to remove it 
    347                          $path = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); 
    348                          foreach ($path as $root) 
    349                          { 
    350                               if (!is_dir($root) || !is_readable($root)) { 
    351                                    continue; 
    352                               } 
    353                               if (substr($root,-1) != '/') { 
    354                                    $root .= '/'; 
    355                               } 
    356                               if (($p = @dir($root)) === false) { 
    357                                    continue; 
    358                               } 
    359                               if (($d = @dir($root.'daInstaller')) === false) { 
    360                                    continue; 
    361                               } 
    362                               files::deltree($root.'/daInstaller'); 
    363                          } 
    364  
    365                          # Some settings change, prepare db queries 
    366                          $strReqFormat = 'INSERT INTO '.$core->prefix.'setting'; 
    367                          $strReqFormat .= ' (setting_id,setting_ns,setting_value,setting_type,setting_label)'; 
    368                          $strReqFormat .= ' VALUES(\'%s\',\'system\',\'%s\',\'string\',\'%s\')'; 
    369  
    370                          $strReqSelect = 'SELECT count(1) FROM '.$core->prefix.'setting'; 
    371                          $strReqSelect .= ' WHERE setting_id = \'%s\''; 
    372                          $strReqSelect .= ' AND setting_ns = \'system\''; 
    373                          $strReqSelect .= ' AND blog_id IS NULL'; 
    374  
    375                          # Add date and time formats 
    376                          $date_formats = array('%Y-%m-%d','%m/%d/%Y','%d/%m/%Y','%Y/%m/%d','%d.%m.%Y','%b %e %Y','%e %b %Y','%Y %b %e', 
    377                          '%a, %Y-%m-%d','%a, %m/%d/%Y','%a, %d/%m/%Y','%a, %Y/%m/%d','%B %e, %Y','%e %B, %Y','%Y, %B %e','%e. %B %Y', 
    378                          '%A, %B %e, %Y','%A, %e %B, %Y','%A, %Y, %B %e','%A, %Y, %B %e','%A, %e. %B %Y'); 
    379                          $time_formats = array('%H:%M','%I:%M','%l:%M','%Hh%M','%Ih%M','%lh%M'); 
    380                          if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { 
    381                               $date_formats = array_map(create_function('$f', 
    382                                                               'return str_replace(\'%e\',\'%#d\',$f);' 
    383                                                               ),$date_formats); 
    384                          } 
    385  
    386                          $rs = $core->con->select(sprintf($strReqSelect,'date_formats')); 
    387                          if ($rs->f(0)==0) { 
    388                               $strReq = sprintf($strReqFormat,'date_formats',serialize($date_formats),'Date formats examples'); 
    389                               $core->con->execute($strReq); 
    390                          } 
    391                          $rs = $core->con->select(sprintf($strReqSelect,'time_formats')); 
    392                          if ($rs->f(0)==0) { 
    393                               $strReq = sprintf($strReqFormat,'time_formats',serialize($time_formats),'Time formats examples'); 
    394                               $core->con->execute($strReq); 
    395                          } 
    396  
    397                          # Add repository URL for themes and plugins as daInstaller move to core 
    398                          $rs = $core->con->select(sprintf($strReqSelect,'store_plugin_url')); 
    399                          if ($rs->f(0)==0) { 
    400                               $strReq = sprintf($strReqFormat,'store_plugin_url','http://update.dotaddict.org/dc2/plugins.xml','Plugins XML feed location'); 
    401                               $core->con->execute($strReq); 
    402                          } 
    403                          $rs = $core->con->select(sprintf($strReqSelect,'store_theme_url')); 
    404                          if ($rs->f(0)==0) { 
    405                               $strReq = sprintf($strReqFormat,'store_theme_url','http://update.dotaddict.org/dc2/themes.xml','Themes XML feed location'); 
    406                               $core->con->execute($strReq); 
    407                          } 
    408                     } 
    409  
    410                     if (version_compare($version,'2.7','<=')) 
    411                     { 
    412                          # Some new settings should be initialized, prepare db queries 
    413                          $strReqFormat = 'INSERT INTO '.$core->prefix.'setting'; 
    414                          $strReqFormat .= ' (setting_id,setting_ns,setting_value,setting_type,setting_label)'; 
    415                          $strReqFormat .= ' VALUES(\'%s\',\'system\',\'%s\',\'string\',\'%s\')'; 
    416  
    417                          $strReqCount = 'SELECT count(1) FROM '.$core->prefix.'setting'; 
    418                          $strReqCount .= ' WHERE setting_id = \'%s\''; 
    419                          $strReqCount .= ' AND setting_ns = \'system\''; 
    420                          $strReqCount .= ' AND blog_id IS NULL'; 
    421  
    422                          $strReqSelect = 'SELECT setting_value FROM '.$core->prefix.'setting'; 
    423                          $strReqSelect .= ' WHERE setting_id = \'%s\''; 
    424                          $strReqSelect .= ' AND setting_ns = \'system\''; 
    425                          $strReqSelect .= ' AND blog_id IS NULL'; 
    426  
    427                          # Add nb of posts for home (first page), copying nb of posts on every page 
    428                          $rs = $core->con->select(sprintf($strReqCount,'nb_post_for_home')); 
    429                          if ($rs->f(0)==0) { 
    430                               $rs = $core->con->select(sprintf($strReqSelect,'nb_post_per_page')); 
    431                               $strReq = sprintf($strReqFormat,'nb_post_for_home',$rs->f(0),'Nb of posts on home (first page only)'); 
    432                               $core->con->execute($strReq); 
    433                          } 
    434                     } 
    435  
    436                     if (version_compare($version,'2.8.1','<=')) 
    437                     { 
    438                          # switch from jQuery 1.11.1 to 1.11.2 
    439                          $strReq = 'UPDATE '.$core->prefix.'setting '. 
    440                                    " SET setting_value = '1.11.3' ". 
    441                                    " WHERE setting_id = 'jquery_version' ". 
    442                                    " AND setting_ns = 'system' ". 
    443                                    " AND setting_value = '1.11.1' "; 
    444                          $core->con->execute($strReq); 
    445                          # setup media_exclusion (cope with php, php5, php7, … rather than only .php) 
    446                          $strReq = 'UPDATE '.$core->prefix.'setting '. 
    447                                    " SET setting_value = '/\\.php[0-9]*\$/i' ". 
    448                                    " WHERE setting_id = 'media_exclusion' ". 
    449                                    " AND setting_ns = 'system' ". 
    450                                    " AND setting_value = '/\\.php\$/i' "; 
    451                          $core->con->execute($strReq); 
    452                          # Some new settings should be initialized, prepare db queries 
    453                          $strReq = 'INSERT INTO '.$core->prefix.'setting'. 
    454                                    ' (setting_id,setting_ns,setting_value,setting_type,setting_label)'. 
    455                                    ' VALUES(\'%s\',\'system\',\'%s\',\'boolean\',\'%s\')'; 
    456                          $core->con->execute(sprintf($strReq,'no_search','0','Disable internal search system')); 
    457                     } 
    458  
    459                     if (version_compare($version,'2.8.2','<=')) 
    460                     { 
    461                          # Update flie exclusion upload regex 
    462                          $strReq = 'UPDATE '.$core->prefix.'setting '. 
    463                                    " SET setting_value = '/\\.(phps?|pht(ml)?|phl)[0-9]*\$/i' ". 
    464                                    " WHERE setting_id = 'media_exclusion' ". 
    465                                    " AND setting_ns = 'system' ". 
    466                                    " AND (setting_value = '/\\.php[0-9]*\$/i' ". 
    467                                    "   OR setting_value = '/\\.php\$/i') "; 
    468                          $core->con->execute($strReq); 
    469                     } 
    470  
    471                     if (version_compare($version,'2.9','<=')) 
    472                     { 
    473                          # Some new settings should be initialized, prepare db queries 
    474                          $strReq = 'INSERT INTO '.$core->prefix.'setting'. 
    475                                    ' (setting_id,setting_ns,setting_value,setting_type,setting_label)'. 
    476                                    ' VALUES(\'%s\',\'system\',\'%s\',\'%s\',\'%s\')'; 
    477                          $core->con->execute( 
    478                               sprintf($strReq,'media_video_width','400','integer','Media video insertion width')); 
    479                          $core->con->execute( 
    480                               sprintf($strReq,'media_video_height','300','integer','Media video insertion height')); 
    481                          $core->con->execute( 
    482                               sprintf($strReq,'media_flash_fallback','1','boolean','Flash player fallback for audio and video media')); 
    483  
    484                          # Some settings and prefs should be moved from string to array 
    485                          self::settings2array('system','date_formats'); 
    486                          self::settings2array('system','time_formats'); 
    487                          self::settings2array('antispam','antispam_filters'); 
    488                          self::settings2array('pings','pings_uris'); 
    489                          self::settings2array('system','simpleMenu'); 
    490                          self::prefs2array('dashboard','favorites'); 
    491                          self::prefs2array('interface','media_last_dirs'); 
    492                     } 
    493  
    494                     $core->setVersion('core',DC_VERSION); 
    495                     $core->blogDefaults(); 
     42                    self::growUp($core,$version); 
    49643 
    49744                    # Drop content from session table if changes or if needed 
     
    51663          # No upgrade? 
    51764          return false; 
     65     } 
     66 
     67     public static function growUp($core,$version) 
     68     { 
     69          if ($version === null) { 
     70               return false; 
     71          } 
     72 
     73          # Populate media_dir field (since 2.0-beta3.3) 
     74          if (version_compare($version,'2.0-beta3.3','<')) 
     75          { 
     76               $strReq = 'SELECT media_id, media_file FROM '.$core->prefix.'media '; 
     77               $rs_m = $core->con->select($strReq); 
     78               while($rs_m->fetch()) { 
     79                    $cur = $core->con->openCursor($core->prefix.'media'); 
     80                    $cur->media_dir = dirname($rs_m->media_file); 
     81                    $cur->update('WHERE media_id = '.(integer) $rs_m->media_id); 
     82               } 
     83          } 
     84 
     85          if (version_compare($version,'2.0-beta7.3','<')) 
     86          { 
     87               # Blowup becomes default theme 
     88               $strReq = 'UPDATE '.$core->prefix.'setting '. 
     89                         "SET setting_value = '%s' ". 
     90                         "WHERE setting_id = 'theme' ". 
     91                         "AND setting_value = '%s' ". 
     92                         'AND blog_id IS NOT NULL '; 
     93               $core->con->execute(sprintf($strReq,'blueSilence','default')); 
     94               $core->con->execute(sprintf($strReq,'default','blowup')); 
     95          } 
     96 
     97          if (version_compare($version,'2.1-alpha2-r2383','<')) 
     98          { 
     99               $schema = dbSchema::init($core->con); 
     100               $schema->dropUnique($core->prefix.'category',$core->prefix.'uk_cat_title'); 
     101 
     102               # Reindex categories 
     103               $rs = $core->con->select( 
     104                    'SELECT cat_id, cat_title, blog_id '. 
     105                    'FROM '.$core->prefix.'category '. 
     106                    'ORDER BY blog_id ASC , cat_position ASC ' 
     107               ); 
     108               $cat_blog = $rs->blog_id; 
     109               $i = 2; 
     110               while ($rs->fetch()) { 
     111                    if ($cat_blog != $rs->blog_id) { 
     112                         $i = 2; 
     113                    } 
     114                    $core->con->execute( 
     115                         'UPDATE '.$core->prefix.'category SET ' 
     116                         .'cat_lft = '.($i++).', cat_rgt = '.($i++).' '. 
     117                         'WHERE cat_id = '.(integer) $rs->cat_id 
     118                    ); 
     119                    $cat_blog = $rs->blog_id; 
     120               } 
     121          } 
     122 
     123          if (version_compare($version,'2.1.6','<=')) 
     124          { 
     125               # ie7js has been upgraded 
     126               $ie7files = array ( 
     127                    'ie7-base64.php ', 
     128                    'ie7-content.htc', 
     129                    'ie7-core.js', 
     130                    'ie7-css2-selectors.js', 
     131                    'ie7-css3-selectors.js', 
     132                    'ie7-css-strict.js', 
     133                    'ie7-dhtml.js', 
     134                    'ie7-dynamic-attributes.js', 
     135                    'ie7-fixed.js', 
     136                    'ie7-graphics.js', 
     137                    'ie7-html4.js', 
     138                    'ie7-ie5.js', 
     139                    'ie7-layout.js', 
     140                    'ie7-load.htc', 
     141                    'ie7-object.htc', 
     142                    'ie7-overflow.js', 
     143                    'ie7-quirks.js', 
     144                    'ie7-server.css', 
     145                    'ie7-standard-p.js', 
     146                    'ie7-xml-extras.js' 
     147                    ); 
     148               foreach ($ie7files as $f) { 
     149                    @unlink(DC_ROOT.'/admin/js/ie7/'.$f); 
     150               } 
     151          } 
     152 
     153          if (version_compare($version,'2.2-alpha1-r3043','<')) 
     154          { 
     155               # metadata has been integrated to the core. 
     156               $core->plugins->loadModules(DC_PLUGINS_ROOT); 
     157               if ($core->plugins->moduleExists('metadata')) { 
     158                    $core->plugins->deleteModule('metadata'); 
     159               } 
     160 
     161               # Tags template class has been renamed 
     162               $sqlstr = 
     163                    'SELECT blog_id, setting_id, setting_value '. 
     164                    'FROM '.$core->prefix.'setting '. 
     165                    'WHERE (setting_id = \'widgets_nav\' OR setting_id = \'widgets_extra\') '. 
     166                    'AND setting_ns = \'widgets\';'; 
     167               $rs = $core->con->select($sqlstr); 
     168               while ($rs->fetch()) { 
     169                    $widgetsettings = base64_decode($rs->setting_value); 
     170                    $widgetsettings = str_replace ('s:11:"tplMetadata"','s:7:"tplTags"',$widgetsettings); 
     171                    $cur = $core->con->openCursor($core->prefix.'setting'); 
     172                    $cur->setting_value = base64_encode($widgetsettings); 
     173                    $sqlstr = 'WHERE setting_id = \''.$rs->setting_id.'\' AND setting_ns = \'widgets\' '. 
     174                    'AND blog_id ' . 
     175                    ($rs->blog_id == NULL ? 'is NULL' : '= \''.$core->con->escape($rs->blog_id).'\''); 
     176                    $cur->update($sqlstr); 
     177               } 
     178          } 
     179 
     180          if (version_compare($version,'2.3','<')) 
     181          { 
     182               # Add global favorites 
     183               $init_fav = array(); 
     184 
     185               $init_fav['new_post'] = array('new_post','New entry','post.php', 
     186                    'images/menu/edit.png','images/menu/edit-b.png', 
     187                    'usage,contentadmin',null,null); 
     188               $init_fav['newpage'] = array('newpage','New page','plugin.php?p=pages&amp;act=page', 
     189                    'index.php?pf=pages/icon-np.png','index.php?pf=pages/icon-np-big.png', 
     190                    'contentadmin,pages',null,null); 
     191               $init_fav['media'] = array('media','Media manager','media.php', 
     192                    'images/menu/media.png','images/menu/media-b.png', 
     193                    'media,media_admin',null,null); 
     194               $init_fav['widgets'] = array('widgets','Presentation widgets','plugin.php?p=widgets', 
     195                    'index.php?pf=widgets/icon.png','index.php?pf=widgets/icon-big.png', 
     196                    'admin',null,null); 
     197               $init_fav['blog_theme'] = array('blog_theme','Blog appearance','blog_theme.php', 
     198                    'images/menu/themes.png','images/menu/blog-theme-b.png', 
     199                    'admin',null,null); 
     200 
     201               $count = 0; 
     202               foreach ($init_fav as $k => $f) { 
     203                    $t = array('name' => $f[0],'title' => $f[1],'url' => $f[2], 'small-icon' => $f[3], 
     204                         'large-icon' => $f[4],'permissions' => $f[5],'id' => $f[6],'class' => $f[7]); 
     205                    $sqlstr = 'INSERT INTO '.$core->prefix.'pref (pref_id, user_id, pref_ws, pref_value, pref_type, pref_label) VALUES ('. 
     206                         '\''.sprintf("g%03s",$count).'\',NULL,\'favorites\',\''.serialize($t).'\',\'string\',NULL);'; 
     207                    $core->con->execute($sqlstr); 
     208                    $count++; 
     209               } 
     210 
     211               # A bit of housecleaning for no longer needed files 
     212               $remfiles = array ( 
     213                    'admin/style/cat-bg.png', 
     214                    'admin/style/footer-bg.png', 
     215                    'admin/style/head-logo.png', 
     216                    'admin/style/tab-bg.png', 
     217                    'admin/style/tab-c-l.png', 
     218                    'admin/style/tab-c-r.png', 
     219                    'admin/style/tab-l-l.png', 
     220                    'admin/style/tab-l-r.png', 
     221                    'admin/style/tab-n-l.png', 
     222                    'admin/style/tab-n-r.png', 
     223                    'inc/clearbricks/_common.php', 
     224                    'inc/clearbricks/common/lib.crypt.php', 
     225                    'inc/clearbricks/common/lib.date.php', 
     226                    'inc/clearbricks/common/lib.files.php', 
     227                    'inc/clearbricks/common/lib.form.php', 
     228                    'inc/clearbricks/common/lib.html.php', 
     229                    'inc/clearbricks/common/lib.http.php', 
     230                    'inc/clearbricks/common/lib.l10n.php', 
     231                    'inc/clearbricks/common/lib.text.php', 
     232                    'inc/clearbricks/common/tz.dat', 
     233                    'inc/clearbricks/common/_main.php', 
     234                    'inc/clearbricks/dblayer/class.cursor.php', 
     235                    'inc/clearbricks/dblayer/class.mysql.php', 
     236                    'inc/clearbricks/dblayer/class.pgsql.php', 
     237                    'inc/clearbricks/dblayer/class.sqlite.php', 
     238                    'inc/clearbricks/dblayer/dblayer.php', 
     239                    'inc/clearbricks/dbschema/class.dbschema.php', 
     240                    'inc/clearbricks/dbschema/class.dbstruct.php', 
     241                    'inc/clearbricks/dbschema/class.mysql.dbschema.php', 
     242                    'inc/clearbricks/dbschema/class.pgsql.dbschema.php', 
     243                    'inc/clearbricks/dbschema/class.sqlite.dbschema.php', 
     244                    'inc/clearbricks/diff/lib.diff.php', 
     245                    'inc/clearbricks/diff/lib.unified.diff.php', 
     246                    'inc/clearbricks/filemanager/class.filemanager.php', 
     247                    'inc/clearbricks/html.filter/class.html.filter.php', 
     248                    'inc/clearbricks/html.validator/class.html.validator.php', 
     249                    'inc/clearbricks/image/class.image.meta.php', 
     250                    'inc/clearbricks/image/class.image.tools.php', 
     251                    'inc/clearbricks/mail/class.mail.php', 
     252                    'inc/clearbricks/mail/class.socket.mail.php', 
     253                    'inc/clearbricks/net/class.net.socket.php', 
     254                    'inc/clearbricks/net.http/class.net.http.php', 
     255                    'inc/clearbricks/net.http.feed/class.feed.parser.php', 
     256                    'inc/clearbricks/net.http.feed/class.feed.reader.php', 
     257                    'inc/clearbricks/net.xmlrpc/class.net.xmlrpc.php', 
     258                    'inc/clearbricks/pager/class.pager.php', 
     259                    'inc/clearbricks/rest/class.rest.php', 
     260                    'inc/clearbricks/session.db/class.session.db.php', 
     261                    'inc/clearbricks/template/class.template.php', 
     262                    'inc/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php', 
     263                    'inc/clearbricks/url.handler/class.url.handler.php', 
     264                    'inc/clearbricks/zip/class.unzip.php', 
     265                    'inc/clearbricks/zip/class.zip.php', 
     266                    'themes/default/tpl/.htaccess', 
     267                    'themes/default/tpl/404.html', 
     268                    'themes/default/tpl/archive.html', 
     269                    'themes/default/tpl/archive_month.html', 
     270                    'themes/default/tpl/category.html', 
     271                    'themes/default/tpl/home.html', 
     272                    'themes/default/tpl/post.html', 
     273                    'themes/default/tpl/search.html', 
     274                    'themes/default/tpl/tag.html', 
     275                    'themes/default/tpl/tags.html', 
     276                    'themes/default/tpl/user_head.html', 
     277                    'themes/default/tpl/_flv_player.html', 
     278                    'themes/default/tpl/_footer.html', 
     279                    'themes/default/tpl/_head.html', 
     280                    'themes/default/tpl/_mp3_player.html', 
     281                    'themes/default/tpl/_top.html' 
     282               ); 
     283               $remfolders = array ( 
     284                    'inc/clearbricks/common', 
     285                    'inc/clearbricks/dblayer', 
     286                    'inc/clearbricks/dbschema', 
     287                    'inc/clearbricks/diff', 
     288                    'inc/clearbricks/filemanager', 
     289                    'inc/clearbricks/html.filter', 
     290                    'inc/clearbricks/html.validator', 
     291                    'inc/clearbricks/image', 
     292                    'inc/clearbricks/mail', 
     293                    'inc/clearbricks/net', 
     294                    'inc/clearbricks/net.http', 
     295                    'inc/clearbricks/net.http.feed', 
     296                    'inc/clearbricks/net.xmlrpc', 
     297                    'inc/clearbricks/pager', 
     298                    'inc/clearbricks/rest', 
     299                    'inc/clearbricks/session.db', 
     300                    'inc/clearbricks/template', 
     301                    'inc/clearbricks/text.wiki2xhtml', 
     302                    'inc/clearbricks/url.handler', 
     303                    'inc/clearbricks/zip', 
     304                    'inc/clearbricks', 
     305                    'themes/default/tpl' 
     306               ); 
     307 
     308               foreach ($remfiles as $f) { 
     309                    @unlink(DC_ROOT.'/'.$f); 
     310               } 
     311               foreach ($remfolders as $f) { 
     312                    @rmdir(DC_ROOT.'/'.$f); 
     313               } 
     314          } 
     315 
     316          if (version_compare($version,'2.3.1','<')) 
     317          { 
     318               # Remove unecessary file 
     319               @unlink(DC_ROOT.'/'.'inc/libs/clearbricks/.hgignore'); 
     320          } 
     321 
     322          if (version_compare($version,'2.4.0','<=')) 
     323          { 
     324               # setup media_exclusion 
     325               $strReq = 'UPDATE '.$core->prefix.'setting '. 
     326                         "SET setting_value = '/\\.php\$/i' ". 
     327                         "WHERE setting_id = 'media_exclusion' ". 
     328                         "AND setting_value = '' "; 
     329               $core->con->execute($strReq); 
     330          } 
     331 
     332          if (version_compare($version,'2.5','<=')) 
     333          { 
     334               # Try to disable daInstaller plugin if it has been installed outside the default plugins directory 
     335               $path = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); 
     336               $default = path::real(dirname(__FILE__).'/../../plugins/'); 
     337               foreach ($path as $root) 
     338               { 
     339                    if (!is_dir($root) || !is_readable($root)) { 
     340                         continue; 
     341                    } 
     342                    if (substr($root,-1) != '/') { 
     343                         $root .= '/'; 
     344                    } 
     345                    if (($p = @dir($root)) === false) { 
     346                         continue; 
     347                    } 
     348                    if(path::real($root) == $default) { 
     349                         continue; 
     350                    } 
     351                    if (($d = @dir($root.'daInstaller')) === false) { 
     352                         continue; 
     353                    } 
     354                    $f = $root.'/daInstaller/_disabled'; 
     355                    if (!file_exists($f)) 
     356                    { 
     357                         @file_put_contents($f,''); 
     358                    } 
     359               } 
     360          } 
     361 
     362          if (version_compare($version,'2.5.1','<=')) 
     363          { 
     364               // Flash enhanced upload no longer needed 
     365               @unlink(DC_ROOT.'/'.'inc/swf/swfupload.swf'); 
     366          } 
     367 
     368          if (version_compare($version,'2.6','<=')) 
     369          { 
     370               // README has been replaced by README.md and CONTRIBUTING.md 
     371               @unlink(DC_ROOT.'/'.'README'); 
     372 
     373               // trackbacks are now merged into posts 
     374               @unlink(DC_ROOT.'/'.'admin/trackbacks.php'); 
     375 
     376               # daInstaller has been integrated to the core. 
     377               # Try to remove it 
     378               $path = explode(PATH_SEPARATOR,DC_PLUGINS_ROOT); 
     379               foreach ($path as $root) 
     380               { 
     381                    if (!is_dir($root) || !is_readable($root)) { 
     382                         continue; 
     383                    } 
     384                    if (substr($root,-1) != '/') { 
     385                         $root .= '/'; 
     386                    } 
     387                    if (($p = @dir($root)) === false) { 
     388                         continue; 
     389                    } 
     390                    if (($d = @dir($root.'daInstaller')) === false) { 
     391                         continue; 
     392                    } 
     393                    files::deltree($root.'/daInstaller'); 
     394               } 
     395 
     396               # Some settings change, prepare db queries 
     397               $strReqFormat = 'INSERT INTO '.$core->prefix.'setting'; 
     398               $strReqFormat .= ' (setting_id,setting_ns,setting_value,setting_type,setting_label)'; 
     399               $strReqFormat .= ' VALUES(\'%s\',\'system\',\'%s\',\'string\',\'%s\')'; 
     400 
     401               $strReqSelect = 'SELECT count(1) FROM '.$core->prefix.'setting'; 
     402               $strReqSelect .= ' WHERE setting_id = \'%s\''; 
     403               $strReqSelect .= ' AND setting_ns = \'system\''; 
     404               $strReqSelect .= ' AND blog_id IS NULL'; 
     405 
     406               # Add date and time formats 
     407               $date_formats = array('%Y-%m-%d','%m/%d/%Y','%d/%m/%Y','%Y/%m/%d','%d.%m.%Y','%b %e %Y','%e %b %Y','%Y %b %e', 
     408               '%a, %Y-%m-%d','%a, %m/%d/%Y','%a, %d/%m/%Y','%a, %Y/%m/%d','%B %e, %Y','%e %B, %Y','%Y, %B %e','%e. %B %Y', 
     409               '%A, %B %e, %Y','%A, %e %B, %Y','%A, %Y, %B %e','%A, %Y, %B %e','%A, %e. %B %Y'); 
     410               $time_formats = array('%H:%M','%I:%M','%l:%M','%Hh%M','%Ih%M','%lh%M'); 
     411               if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { 
     412                    $date_formats = array_map(create_function('$f', 
     413                                                    'return str_replace(\'%e\',\'%#d\',$f);' 
     414                                                    ),$date_formats); 
     415               } 
     416 
     417               $rs = $core->con->select(sprintf($strReqSelect,'date_formats')); 
     418               if ($rs->f(0)==0) { 
     419                    $strReq = sprintf($strReqFormat,'date_formats',serialize($date_formats),'Date formats examples'); 
     420                    $core->con->execute($strReq); 
     421               } 
     422               $rs = $core->con->select(sprintf($strReqSelect,'time_formats')); 
     423               if ($rs->f(0)==0) { 
     424                    $strReq = sprintf($strReqFormat,'time_formats',serialize($time_formats),'Time formats examples'); 
     425                    $core->con->execute($strReq); 
     426               } 
     427 
     428               # Add repository URL for themes and plugins as daInstaller move to core 
     429               $rs = $core->con->select(sprintf($strReqSelect,'store_plugin_url')); 
     430               if ($rs->f(0)==0) { 
     431                    $strReq = sprintf($strReqFormat,'store_plugin_url','http://update.dotaddict.org/dc2/plugins.xml','Plugins XML feed location'); 
     432                    $core->con->execute($strReq); 
     433               } 
     434               $rs = $core->con->select(sprintf($strReqSelect,'store_theme_url')); 
     435               if ($rs->f(0)==0) { 
     436                    $strReq = sprintf($strReqFormat,'store_theme_url','http://update.dotaddict.org/dc2/themes.xml','Themes XML feed location'); 
     437                    $core->con->execute($strReq); 
     438               } 
     439          } 
     440 
     441          if (version_compare($version,'2.7','<=')) 
     442          { 
     443               # Some new settings should be initialized, prepare db queries 
     444               $strReqFormat = 'INSERT INTO '.$core->prefix.'setting'; 
     445               $strReqFormat .= ' (setting_id,setting_ns,setting_value,setting_type,setting_label)'; 
     446               $strReqFormat .= ' VALUES(\'%s\',\'system\',\'%s\',\'string\',\'%s\')'; 
     447 
     448               $strReqCount = 'SELECT count(1) FROM '.$core->prefix.'setting'; 
     449               $strReqCount .= ' WHERE setting_id = \'%s\''; 
     450               $strReqCount .= ' AND setting_ns = \'system\''; 
     451               $strReqCount .= ' AND blog_id IS NULL'; 
     452 
     453               $strReqSelect = 'SELECT setting_value FROM '.$core->prefix.'setting'; 
     454               $strReqSelect .= ' WHERE setting_id = \'%s\''; 
     455               $strReqSelect .= ' AND setting_ns = \'system\''; 
     456               $strReqSelect .= ' AND blog_id IS NULL'; 
     457 
     458               # Add nb of posts for home (first page), copying nb of posts on every page 
     459               $rs = $core->con->select(sprintf($strReqCount,'nb_post_for_home')); 
     460               if ($rs->f(0)==0) { 
     461                    $rs = $core->con->select(sprintf($strReqSelect,'nb_post_per_page')); 
     462                    $strReq = sprintf($strReqFormat,'nb_post_for_home',$rs->f(0),'Nb of posts on home (first page only)'); 
     463                    $core->con->execute($strReq); 
     464               } 
     465          } 
     466 
     467          if (version_compare($version,'2.8.1','<=')) 
     468          { 
     469               # switch from jQuery 1.11.1 to 1.11.2 
     470               $strReq = 'UPDATE '.$core->prefix.'setting '. 
     471                         " SET setting_value = '1.11.3' ". 
     472                         " WHERE setting_id = 'jquery_version' ". 
     473                         " AND setting_ns = 'system' ". 
     474                         " AND setting_value = '1.11.1' "; 
     475               $core->con->execute($strReq); 
     476               # setup media_exclusion (cope with php, php5, php7, … rather than only .php) 
     477               $strReq = 'UPDATE '.$core->prefix.'setting '. 
     478                         " SET setting_value = '/\\.php[0-9]*\$/i' ". 
     479                         " WHERE setting_id = 'media_exclusion' ". 
     480                         " AND setting_ns = 'system' ". 
     481                         " AND setting_value = '/\\.php\$/i' "; 
     482               $core->con->execute($strReq); 
     483               # Some new settings should be initialized, prepare db queries 
     484               $strReq = 'INSERT INTO '.$core->prefix.'setting'. 
     485                         ' (setting_id,setting_ns,setting_value,setting_type,setting_label)'. 
     486                         ' VALUES(\'%s\',\'system\',\'%s\',\'boolean\',\'%s\')'; 
     487               $core->con->execute(sprintf($strReq,'no_search','0','Disable internal search system')); 
     488          } 
     489 
     490          if (version_compare($version,'2.8.2','<=')) 
     491          { 
     492               # Update flie exclusion upload regex 
     493               $strReq = 'UPDATE '.$core->prefix.'setting '. 
     494                         " SET setting_value = '/\\.(phps?|pht(ml)?|phl)[0-9]*\$/i' ". 
     495                         " WHERE setting_id = 'media_exclusion' ". 
     496                         " AND setting_ns = 'system' ". 
     497                         " AND (setting_value = '/\\.php[0-9]*\$/i' ". 
     498                         "   OR setting_value = '/\\.php\$/i') "; 
     499               $core->con->execute($strReq); 
     500          } 
     501 
     502          if (version_compare($version,'2.9','<=')) 
     503          { 
     504               # Some new settings should be initialized, prepare db queries 
     505               $strReq = 'INSERT INTO '.$core->prefix.'setting'. 
     506                         ' (setting_id,setting_ns,setting_value,setting_type,setting_label)'. 
     507                         ' VALUES(\'%s\',\'system\',\'%s\',\'%s\',\'%s\')'; 
     508               $core->con->execute( 
     509                    sprintf($strReq,'media_video_width','400','integer','Media video insertion width')); 
     510               $core->con->execute( 
     511                    sprintf($strReq,'media_video_height','300','integer','Media video insertion height')); 
     512               $core->con->execute( 
     513                    sprintf($strReq,'media_flash_fallback','1','boolean','Flash player fallback for audio and video media')); 
     514 
     515               # Some settings and prefs should be moved from string to array 
     516               self::settings2array('system','date_formats'); 
     517               self::settings2array('system','time_formats'); 
     518               self::settings2array('antispam','antispam_filters'); 
     519               self::settings2array('pings','pings_uris'); 
     520               self::settings2array('system','simpleMenu'); 
     521               self::prefs2array('dashboard','favorites'); 
     522               self::prefs2array('interface','media_last_dirs'); 
     523          } 
     524 
     525          $core->setVersion('core',DC_VERSION); 
     526          $core->blogDefaults(); 
     527 
     528          return true; 
    518529     } 
    519530 
Note: See TracChangeset for help on using the changeset viewer.

Sites map