WordPress.org

Make WordPress Core

Ticket #3155: hotfix-20060921-2009.diff

File hotfix-20060921-2009.diff, 42.4 KB (added by quix0r, 12 years ago)

sql cacher, element cacher and notice-fixes

  • var/www/wp-dev/trunk/wp-includes/post-template.php

    Property changes on: /var/www/wp-dev/trunk
    ___________________________________________________________________
    Name: svn:ignore
       + wp-patch.zip
    wp-config.php
    .htaccess
    
     
    3232       $post = &get_post($id);
    3333
    3434       $title = $post->post_title;
    35        if ( !empty($post->post_password) )
     35       if ( !empty($post->post_password) ) {
    3636              $title = sprintf(__('Protected: %s'), $title);
    37        else if ( 'private' == $post->post_status )
    38               $title = sprintf(__('Private: %s'), $title);
    39 
     37       } else if (isset($post->post_status)) {
     38              if ( 'private' == $post->post_status ) {
     39                     $title = sprintf(__('Private: %s'), $title);
     40              }
     41       }
    4042       return $title;
    4143}
    4244
  • var/www/wp-dev/trunk/wp-includes/bookmark.php

     
    9797              $recently_updated_test = '';
    9898       }
    9999
     100       $get_updated = '';
    100101       if ($show_updated) {
    101102              $get_updated = ", UNIX_TIMESTAMP(link_updated) AS link_updated_f ";
    102103       }
  • var/www/wp-dev/trunk/wp-includes/query.php

     
    347347                     return;
    348348              }
    349349
    350               if ('404' == $qv['error']) {
    351                      $this->is_404 = true;
    352                      if ( !empty($query) ) {
    353                             do_action_ref_array('parse_query', array(&$this));
     350              if (isset($qv['error'])) {
     351                     if ('404' == $qv['error']) {
     352                            $this->is_404 = true;
     353                            if ( !empty($query) ) {
     354                                   do_action_ref_array('parse_query', array(&$this));
     355                            }
     356                            return;
    354357                     }
    355                      return;
    356358              }
    357359
    358               $qv['m'] =  (int) $qv['m'];
    359               $qv['p'] =  (int) $qv['p'];
     360              if (isset($qv['m'])) {
     361                     $qv['m'] =  (int) $qv['m'];
     362              } else {
     363                     $qv['m'] = 0;
     364              }
     365              if (isset($qv['p'])) {
     366                     $qv['p'] =  (int) $qv['p'];
     367              } else {
     368                     $qv['p'] = 0;
     369              }
    360370
    361371              // Compat.  Map subpost to attachment.
    362               if ( '' != $qv['subpost'] )
    363                      $qv['attachment'] = $qv['subpost'];
    364               if ( '' != $qv['subpost_id'] )
    365                      $qv['attachment_id'] = $qv['subpost_id'];
     372              if (isset($qv['subpost'])) {
     373                     if ( '' != $qv['subpost'] )
     374                            $qv['attachment'] = $qv['subpost'];
     375              }
     376              if (isset($qv['subpost_id'])) {
     377                     if ( '' != $qv['subpost_id'] )
     378                            $qv['attachment_id'] = $qv['subpost_id'];
     379              }
    366380
     381              // Fixes a lot warnings
     382              if (!isset($qv['attachment_id'])) $qv['attachment_id'] = '';
     383              if (!isset($qv['attachment']))    $qv['attachment']    = '';
     384              if (!isset($qv['name']))          $qv['name']          = '';
     385              if (!isset($qv['hour']))          $qv['hour']          = '';
     386              if (!isset($qv['static']))        $qv['static']        = '';
     387              if (!isset($qv['pagename']))      $qv['pagename']      = '';
     388              if (!isset($qv['page_id']))       $qv['page_id']       = '';
     389
    367390              if ( ('' != $qv['attachment']) || (int) $qv['attachment_id'] ) {
    368391                     $this->is_single = true;
    369392                     $this->is_attachment = true;
     
    381404              } elseif (!empty($qv['s'])) {
    382405                     $this->is_search = true;
    383406              } else {
    384               // Look for archive queries.  Dates, categories, authors.
     407                     // Look for archive queries.  Dates, categories, authors.
    385408
     409                     // Fixes a lot warnings
     410                     if (!isset($qv['second']))         $qv['second']         = '';
     411                     if (!isset($qv['minute']))         $qv['minute']         = '';
     412                     if (!isset($qv['day']))            $qv['day']            = '';
     413                     if (!isset($qv['monthnum']))       $qv['monthnum']       = '';
     414                     if (!isset($qv['year']))           $qv['year']           = '';
     415                     if (!isset($qv['w']))              $qv['w']              = '';
     416                     if (!isset($qv['category_name']))  $qv['category_name']  = '';
     417                     if (!isset($qv['author_name']))    $qv['author_name']    = '';
     418                     if (!isset($qv['show_post_type'])) $qv['show_post_type'] = '';
     419
    386420                     if ( (int) $qv['second']) {
    387421                            $this->is_time = true;
    388422                            $this->is_date = true;
     
    465499                     }
    466500              }
    467501
     502              // Fixes some warnings
     503              if (!isset($qv['feed']))           $qv['feed']           = '';
     504              if (!isset($qv['tb']))             $qv['tb']             = '';
     505              if (!isset($qv['paged']))          $qv['paged']          = '';
     506              if (!isset($qv['comments_popup'])) $qv['comments_popup'] = '';
     507              if (!isset($qv['preview']))        $qv['preview']        = '';
     508
    468509              if ('' != $qv['feed']) {
    469510                     $this->is_feed = true;
    470511              }
     
    587628              $add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours));
    588629              $wp_posts_post_date_field = "post_date"; // "DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)";
    589630
     631              // Fixes a lot warnings
     632              if (!isset($q['m']))              $q['m']              = '';
     633              if (!isset($q['w']))              $q['w']              = '';
     634              if (!isset($q['p']))              $q['p']              = '';
     635              if (!isset($q['hour']))           $q['hour']           = '';
     636              if (!isset($q['minute']))         $q['minute']         = '';
     637              if (!isset($q['second']))         $q['second']         = '';
     638              if (!isset($q['year']))           $q['year']           = '';
     639              if (!isset($q['monthnum']))       $q['monthnum']       = '';
     640              if (!isset($q['day']))            $q['day']            = '';
     641              if (!isset($q['subpost']))        $q['subpost']        = '';
     642              if (!isset($q['subpost_id']))     $q['subpost_id']     = '';
     643              if (!isset($q['name']))           $q['name']           = '';
     644              if (!isset($q['pagename']))       $q['pagename']       = '';
     645              if (!isset($q['attachment']))     $q['attachment']     = '';
     646              if (!isset($q['comments_popup'])) $q['comments_popup'] = '';
     647              if (!isset($q['attachment_id']))  $q['attachment_id']  = '';
     648              if (!isset($q['page_id']))        $q['page_id']        = '';
     649              if (!isset($q['category_name']))  $q['category_name']  = '';
     650              if (!isset($q['author_name']))    $q['author_name']    = '';
     651
    590652              // If a month is specified in the querystring, load that month
    591653              if ( (int) $q['m'] ) {
    592654                     $q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']);
     
    725787                     }
    726788              }
    727789
     790              // Fixes a warning
     791              if (!isset($search)) $search = '';
     792
    728793              // Category stuff
    729794
    730795              if ((empty($q['cat'])) || ($q['cat'] == '0') ||
     
    903968
    904969              // Paging
    905970              if (empty($q['nopaging']) && ! $this->is_single && ! $this->is_page) {
    906                      $page = abs(intval($q['paged']));
    907                      if (empty($page)) {
     971                     // Fixes a warning
     972                     if (!isset($q['paged'])) {
    908973                            $page = 1;
     974                     } else {
     975                            $page = abs(intval($q['paged']));
     976                            if (empty($page)) {
     977                                   $page = 1;
     978                            }
    909979                     }
    910980
    911981                     if (($q['what_to_show'] == 'posts')) {
     982                            // Fixes a notice
     983                            if (!isset($q['offset'])) $q['offset'] = '';
     984
    912985                            $q['offset'] = abs(intval($q['offset']));
    913986                            if ( empty($q['offset']) ) {
    914987                                   $pgstrt = '';
  • var/www/wp-dev/trunk/wp-includes/link-template.php

     
    235235
    236236function edit_comment_link($link = 'Edit This', $before = '', $after = '') {
    237237       global $post, $comment;
    238 
     238       if (!isset($post->post_type)) $post->post_type = '';
     239       if (!isset($post->ID)) $post->ID = 0;
    239240       if( $post->post_type == 'page' ){
    240241              if ( ! current_user_can('edit_page', $post->ID) )
    241242                     return;
  • var/www/wp-dev/trunk/wp-includes/wp-db.php

     
    215215                     $this->query($query);
    216216
    217217              if ( $output == OBJECT ) {
    218                      return $this->last_result[$y] ? $this->last_result[$y] : null;
     218                     if (isset($this->last_result[$y])) {
     219                            return $this->last_result[$y];
     220                     } else {
     221                            return null;
     222                     }
    219223              } elseif ( $output == ARRAY_A ) {
    220224                     return $this->last_result[$y] ? get_object_vars($this->last_result[$y]) : null;
    221225              } elseif ( $output == ARRAY_N ) {
     
    289293              }
    290294       }
    291295
     296       // ==================================================================
     297       // Function to close the database connection (really simple one)
     298       function close() {
     299              if ($this->dbh !== false) {
     300                     if (@mysql_close($this->dbh) === false) {
     301                            // Something has failed
     302                            die("Failed closing connection to database!");
     303                     } else {
     304                            // Remove the link resource
     305                            unset($this->dbh);
     306                     }
     307              }
     308       }
     309
     310       // Simple getter function
     311       function getNumQueries() {
     312              return $this->num_queries;
     313       }
     314
    292315       function timer_start() {
    293316              $mtime = microtime();
    294317              $mtime = explode(' ', $mtime);
     
    363386       }
    364387}
    365388
    366 if ( ! isset($wpdb) )
    367        $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
    368 ?>
    369  No newline at end of file
     389if ( ! isset($wpdb) ) {
     390       if (defined('ENABLE_SQL_CACHE')) {
     391              require_once(ABSPATH . WPINC . "/wp-db_cache.php");
     392              $wpdb = new wpdb_cache(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
     393       } else {
     394              $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
     395       }
     396}
     397?>
  • var/www/wp-dev/trunk/wp-includes/formatting.php

     
    11<?php
    22
    33function wptexturize($text) {
     4       // Check file cache
     5       global $elCache;
     6       $cacheThis = false;
     7       if (isset($elCache)) {
     8              // Check the cache
     9              $cacheThis = $elCache->isElementCached('wptexturize', $text);
     10              if ($cacheThis) {
     11                     // Get the current stored element
     12                     return $elCache->getCurrentElement();
     13              }
     14       }
     15
    416       $output = '';
    517       // Capture tags and everything inside them
    618       $textarr = preg_split("/(<.*>)/Us", $text, -1, PREG_SPLIT_DELIM_CAPTURE);
     
    4456              $curl = preg_replace('/&([^#])(?![a-zA-Z1-4]{1,8};)/', '&#038;$1', $curl);
    4557              $output .= $curl;
    4658       }
     59
     60       // Add to cache
     61       if (isset($elCache) && (!$cacheThis)) {
     62              $elCache->addElement('wptexturize', $text, $output);
     63       }
     64
    4765       return $output;
    4866}
    4967
     
    5472       return $text;
    5573}
    5674
    57 function wpautop($pee, $br = 1) {
    58        $pee = $pee . "\n"; // just to make things a little easier, pad the end
     75function wpautop($peePara, $br = 1) {
     76       // Check file cache
     77       global $elCache;
     78       $cacheThis = false;
     79       if (isset($elCache)) {
     80              // Check the cache
     81              $cacheThis = $elCache->isElementCached('wpautop', $peePara.$br);
     82              if ($cacheThis) {
     83                     // Get the current stored element
     84                     return $elCache->getCurrentElement();
     85              }
     86       }
     87
     88       $pee = $peePara . "\n"; // just to make things a little easier, pad the end
    5989       $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
    6090       // Space things out a little
    6191       $pee = preg_replace('!(<(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "\n$1", $pee);
     
    79109       $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
    80110       $pee = preg_replace('!(<pre.*?>)(.*?)</pre>!ise', " stripslashes('$1') .  stripslashes(clean_pre('$2'))  . '</pre>' ", $pee);
    81111
     112       // Add to cache
     113       if (isset($elCache) && (!$cacheThis)) {
     114              $elCache->addElement('wpautop', $peePara.$br, $pee);
     115       }
     116
    82117       return $pee;
    83118}
    84119
     
    277312}
    278313
    279314function sanitize_user( $username, $strict = false ) {
     315       $s = "N";
     316       if ($strict) $s = "Y";
     317       // Check file cache
     318       global $elCache;
     319       $cacheThis = false;
     320       if (isset($elCache)) {
     321              // Check the cache
     322              $cacheThis = $elCache->isElementCached('sanitize_user', $username.$s);
     323              if ($cacheThis) {
     324                     // Get the current stored element
     325                     return $elCache->getCurrentElement();
     326              }
     327       }
     328
    280329       $raw_username = $username;
    281330       $username = strip_tags($username);
    282331       // Kill octets
     
    287336       if ( $strict )
    288337              $username = preg_replace('|[^a-z0-9 _.\-@]|i', '', $username);
    289338
    290        return apply_filters('sanitize_user', $username, $raw_username, $strict);
     339       // Apply all filters
     340       $filtered = apply_filters('sanitize_user', $username, $raw_username, $strict);
     341
     342       // Add to cache
     343       if (isset($elCache) && (!$cacheThis)) {
     344              $elCache->addElement('sanitize_user', $username.$s, $filtered);
     345       }
     346
     347       return $filtered;
    291348}
    292349
    293350function sanitize_title($title, $fallback_title = '') {
     
    301358       return $title;
    302359}
    303360
    304 function sanitize_title_with_dashes($title) {
    305        $title = strip_tags($title);
     361function sanitize_title_with_dashes($titlePara) {
     362       // Check file cache
     363       global $elCache;
     364       $cacheThis = false;
     365       if (isset($elCache)) {
     366              // Check the cache
     367              $cacheThis = $elCache->isElementCached('sanitize_title', $titlePara);
     368              if ($cacheThis) {
     369                     // Get the current stored element
     370                     return $elCache->getCurrentElement();
     371              }
     372       }
     373
     374       // Remove tags
     375       $title = strip_tags($titlePara);
     376
    306377       // Preserve escaped octets.
    307378       $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
    308379       // Remove percent signs that are not part of an octet.
     
    325396       $title = preg_replace('|-+|', '-', $title);
    326397       $title = trim($title, '-');
    327398
     399       // Add to cache
     400       if (isset($elCache) && (!$cacheThis)) {
     401              $elCache->addElement('sanitize_title', $titlePara, $title);
     402       }
     403
     404       // Return title
    328405       return $title;
    329406}
    330407
  • var/www/wp-dev/trunk/wp-includes/category.php

     
    119119       }
    120120       reset ( $categories );
    121121
    122        return apply_filters('get_categories', $categories, $r);
     122       // Apply all filters
     123       $category = apply_filters('get_categories', $categories, $r);
     124       return $category;
    123125}
    124126
    125127// Retrieves category data given a category ID or category object.
  • var/www/wp-dev/trunk/wp-includes/rewrite.php

     
    6161// examine a url (supposedly from this blog) and try to
    6262// determine the post ID it represents.
    6363function url_to_postid($url) {
    64        global $wp_rewrite;
     64       global $wp_rewrite, $elCache;
    6565
     66       $cacheThis = false;
     67       if (isset($elCache)) {
     68              // Check the cache
     69              $cacheThis = $elCache->isElementCached('url_to_postid', $url);
     70              if ($cacheThis) {
     71                     // Get the current stored element
     72                     return $elCache->getCurrentElement();
     73              }
     74       }
     75
     76
    6677       // First, check to see if there is a 'p=N' or 'page_id=N' to match against
    6778       preg_match('#[?&](p|page_id)=(\d+)#', $url, $values);
    6879       $id = intval($values[2]);
     
    119130
    120131       // Look for matches.
    121132       $request_match = $request;
     133       $id = 0;
    122134       foreach ($rewrite as $match => $query) {
    123135              // If the requesting file is the anchor of the match, prepend it
    124136              // to the path info.
     
    134146                     // Substitute the substring matches into the query.
    135147                     eval("\$query = \"$query\";");
    136148                     $query = new WP_Query($query);
    137                      if ( $query->is_single || $query->is_page )
    138                             return $query->post->ID;
    139                      else
    140                             return 0;
     149                     if ( $query->is_single || $query->is_page ) {
     150                            $id = $query->post->ID;
     151                     }
    141152              }
    142153       }
    143        return 0;
     154
     155       // Shall I flush it to disc?
     156       if (isset($elCache) && (!$cacheThis)) {
     157              $elCache->addElement('url_to_postid', $url, $id);
     158       }
     159       return $id;
    144160}
    145161
    146162/* WP_Rewrite class
     
    888904       }
    889905}
    890906
    891 ?>
    892  No newline at end of file
     907?>
  • var/www/wp-dev/trunk/wp-includes/general-template.php

     
    199199       $prefix = '';
    200200       if ( isset($title) )
    201201              $prefix = " $sep ";
     202       else
     203              $title = '';
    202204
    203205       $title = $prefix . $title;
    204206       $title = apply_filters('wp_title', $title, $sep);
  • var/www/wp-dev/trunk/wp-includes/capabilities.php

     
    354354                     $args = array_merge(array('edit_page', $user_id), $args);
    355355                     return call_user_func_array('map_meta_cap', $args);   
    356356              }
    357               $post_author_data = get_userdata($post->post_author);
     357              if (isset($post->post_author)) {
     358                     $post_author_data = get_userdata($post->post_author);
     359              } else {
     360                     // Does this really fix the notice?
     361                     return $caps;
     362              }
    358363              //echo "current user id : $user_id, post author id: " . $post_author_data->ID . "<br/>";
    359364              // If the user is the author...
    360365              if ($user_id == $post_author_data->ID) {
  • var/www/wp-dev/trunk/wp-includes/wp-db_cache.php

     
     1<?php
     2
     3// SQL query caching system
     4// WARNING: This code has developer status and will (currently) not work!
     5
     6class wpdb_cache extends wpdb {
     7       //***** Local variables *****
     8       // The relative path for all cache files with trailing slash
     9       var $cache_dir = "wp-content/cache/sql/";
     10
     11       // The array for all cache firectories we want to create
     12       var $cache_dirs = array('a' => "arrays", 'o' => "objects", 's' => "single");
     13
     14       // Number of rows while the query
     15       var $query_nums = 0;
     16
     17       // All cached tables
     18       var $hashList = array();
     19
     20       // Tables which needs fetching from cache/database
     21       var $waitingList = array();
     22
     23       // Current extracted tables from query string
     24       var $currTables = array();
     25
     26       // Counter for all cache hits
     27       var $cache_hits = 0;
     28
     29       // Here is the usage of all directories
     30       //   arrays  - For caching simple arrays (indexed and asosiative; incl. multi-dimension arrays)
     31       //   objects - For caching whole objects (e.g. from mysql_fetch_object() )
     32       //   single  - For caching single data (one column or result of COUNT/SUM() )
     33
     34       // Cache initialization part
     35       function wpdb_cache ($dbuser, $dbpassword, $dbname, $dbhost) {
     36              // Make the cache dir absolute
     37              $this->cache_dir = ABSPATH . $this->cache_dir;
     38
     39              // Make all paths absolute
     40              foreach ($this->cache_dirs as $type=>$dir) {
     41                     $this->cache_dirs[$type] = $this->cache_dir . $dir . "/";
     42              }
     43
     44              // Check if the main directory does exist
     45              if (!is_dir($this->cache_dir)) {
     46                     // Try to create it
     47                     @mkdir($this->cache_dir);
     48                     @chmod($this->cache_dir, 0777);
     49
     50                     // Re-check it
     51                     if (!is_dir($this->cache_dir)) {
     52                            // Please create it on your own
     53                            die("Cannot create SQL cache directory (default: wp-content/cache/sql/)! Please create and CHMOD it to 0777.");
     54                     } else {
     55                            // Create more directories...
     56                            foreach ($this->cache_dirs as $dir) {
     57                                   @mkdir($this->cache_dir. $dir);  @chmod($this->cache_dir . $dir , 0777);
     58                            }
     59
     60                            // Create the missing .htaccess file
     61                            $this->create_htaccess();
     62                     }
     63              } elseif (!file_exists($this->cache_dir . ".htaccess")) {
     64                     // Create missing .htaccess file
     65                     $this->create_htaccess();
     66              }
     67
     68              // Initialize the database layer
     69              parent::wpdb($dbuser, $dbpassword, $dbname, $dbhost);
     70              // When you remove the line above the database will no longer be accessible
     71              // and the sky turns pitch dark! ;-)
     72       }
     73
     74       // private: create .htaccess files for securing the directories against direct calls
     75       function create_htaccess() {
     76              $checkDirs = $this->cache_dirs;
     77              $checkDirs[] = $this->cache_dir;
     78              foreach ($checkDirs as $dir) {
     79                     $fp = @fopen($dir . ".htaccess", 'w') or die("SQL-CACHE: Cannot create .htaccess file in $dir.");
     80                     fwrite($fp, "Deny from all\n");
     81                     fclose($fp);
     82              }
     83       }
     84
     85       // Query the database or cache file
     86       // returns number of entries
     87       function query ($qstring) {
     88              global $table_prefix;
     89
     90              // Initialize counter
     91              $this->query_nums = 0;
     92
     93              // Create MD5 checksum of current query + WP_SECRET (we will later use this)
     94              if (defined('WP_SECRET')) {
     95                     // WP_SECRET adds some more security to it. :-)
     96                     $this->currQueryHash = md5(WP_SECRET.":".$qstring);
     97              } else {
     98                     // Bad, when WP_SECRET is not defined!
     99                     $this->currQueryHash = md5($qstring);
     100              }
     101
     102              // Extract all tables from the string. The ?: is for "non-capturing subpatterns"
     103              // Thanx to Hinrich Sager <hinrich [DOT] sager [AT] web [DOT] de> from the PHPUG-Hamburg
     104              // to help me here. :-)
     105              preg_match_all(sprintf('/(?:FROM|JOIN|,)[\s](%s[\d\w]+)/i', $table_prefix), $qstring, $this->currTables);
     106
     107              // Take the 2nd array, so now we have all tables together :-)
     108              $this->currTables = $this->currTables[1];
     109
     110              // Do we have a SELECT command where we can take the cache?
     111              $test = trim(strtoupper($qstring));
     112              if (substr($test, 0, 6) == "SELECT") {
     113                     // A SELECT query was send. Check if every table is cached
     114                     // We need $this->hashList for deleting cache files when UPDATE, INSERT et cetera is queried
     115                     foreach ($this->currTables as $table) {
     116                            if (!isset($this->hashList[$table])) {
     117                                   // The table was not found in the hash list so we add it + the query
     118                                   $this->hashList[$table] = array($this->currQueryHash);
     119                            } elseif (!in_array($this->currQueryHash, $this->hashList[$table])) {
     120                                   // The table was been added to the hash list before but not this query string
     121                                   $this->hashList[$table][] = $this->currQueryHash;
     122                            } else {
     123                                   // Count the cache hit
     124                                   $this->cache_hits++;
     125                            }
     126                     }
     127              } else {
     128                     // Check for existing cahes by analyzing the query string
     129                     //die("OK");
     130                     //$this->query_nums = $this->cache_flush_by_query($qstring);
     131              }
     132
     133              // Dummy:
     134              return parent::query($qstring);
     135       }
     136
     137       // Shuts the caching system down
     138       function close() {
     139              // Shall we output debugging info? (useful for development)
     140              if (defined('DEBUG_SQL_CACHE')) {
     141                     // Output cache debug informations
     142                     $this->cache_debug_output();
     143              }
     144
     145              // Close the database connection
     146              parent::close();
     147       }
     148
     149       // Debug informations for the cache
     150       function cache_debug_output() {
     151              echo "Cache hits: <strong>".$this->cache_hits."</strong><br />
     152Database queries: <strong>".wpdb::getNumQueries()."</strong><br />
     153<br />
     154<pre>".print_r($this->hashList, true)."</pre>";
     155       }
     156}
     157
     158?>
  • var/www/wp-dev/trunk/wp-includes/classes.php

     
    401401       
    402402                            continue;     
    403403                     }
    404        
     404
     405                     // Fixes two notices
     406                     if (!isset($previous_element->$parent_field)) $previous_element->$parent_field = 0;
     407                     if (!isset($previous_element->$id_field))     $previous_element->$id_field     = 0;
     408
    405409                     // Walk the tree.
    406410                     if ( !empty($previous_element) && ($element->$parent_field == $previous_element->$id_field) ) {
    407411                            // Previous element is my parent. Descend a level.
     
    446450       
    447451                     // Start the element.
    448452                     if ( !$to_depth || ($depth <= $to_depth) ) {
     453                            // Fixes a notice
     454                            if (!isset($element->$id_field)) $element->$id_field = 0;
    449455                            if ( $element->$id_field != 0 ) {
    450456                                   $cb_args = array_merge( array($output, $element, $depth - 1), $args);
    451457                                   $output = call_user_func_array(array(&$this, 'start_el'), $cb_args);
  • var/www/wp-dev/trunk/wp-includes/rss.php

     
    376376require_once( dirname(__FILE__) . '/class-snoopy.php');
    377377
    378378function fetch_rss ($url) {
     379       // Check if disabled
     380       if (defined('__DISABLE_RSS')) return false;
     381
    379382       // initialize constants
    380383       init();
    381384
  • var/www/wp-dev/trunk/wp-includes/functions.php

     
    33require_once(dirname(__FILE__).'/compat.php');
    44
    55function mysql2date($dateformatstring, $mysqlstring, $translate = true) {
     6       global $elCache;
     7       $cacheThis = false;
     8       if (isset($elCache)) {
     9              // Check the cache
     10              $cacheThis = $elCache->isElementCached('datestrings', $dateformatstring.$mysqlstring);
     11              if ($cacheThis) {
     12                     // Get the current stored element
     13                     return $elCache->getCurrentElement();
     14              }
     15       }
    616       global $wp_locale;
    717       $m = $mysqlstring;
    818       if ( empty($m) ) {
     
    3444              $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring)-1);
    3545       }
    3646       $j = @date($dateformatstring, $i);
     47
     48       // Add to cache
     49       if (isset($elCache) && (!$cacheThis)) {
     50              $elCache->addElement('datestrings', $dateformatstring.$mysqlstring, $j);
     51       }
    3752       if ( !$j ) {
    3853       // for debug purposes
    3954       //     echo $i." ".$mysqlstring;
     
    163178}
    164179
    165180/* Options functions */
    166 
    167181function get_option($setting) {
    168        global $wpdb;
     182       global $wpdb, $elCache;
    169183
     184       $cacheThis = false;
     185       if (isset($elCache)) {
     186              // Check the cache
     187              $cacheThis = $elCache->isElementCached('get_option', $setting);
     188              if ($cacheThis) {
     189                     // Get the current stored element
     190                     return $elCache->getCurrentElement();
     191              }
     192       }
     193
    170194       $value = wp_cache_get($setting, 'options');
    171195
    172196       if ( false === $value ) {
     
    191215       if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting )
    192216              $value = preg_replace('|/+$|', '', $value);
    193217
    194        return apply_filters( 'option_' . $setting, maybe_unserialize($value) );
     218       // Apply all filters
     219       $value = apply_filters( 'option_' . $setting, maybe_unserialize($value) );
     220
     221       // Shall I flush it to disc?
     222       if (isset($elCache) && (!$cacheThis)) {
     223              $elCache->addElement('get_option', $setting, $value);
     224       }
     225
     226       return $value;
    195227}
    196228
    197229function form_option($option) {
     
    11501182       </style>
    11511183</head>
    11521184<body>
    1153        <h1 id="logo"><img alt="WordPress" src="<?php echo $logo_src; ?>" /></h1>
     1185       <h1 id="logo"><img alt="WordPress" src="<?php echo $logo_src."\""; ?> /></h1>
    11541186       <p><?php echo $message; ?></p>
    11551187</body>
    11561188</html>
  • var/www/wp-dev/trunk/wp-includes/script-loader.php

     
    9292                     if ( isset($handle[1]) )
    9393                            $this->args[$handle[0]] = $handle[1];
    9494                     $handle = $handle[0];
     95                     if (!isset($return[$handle])) $return[$handle] = true;
    9596                     if ( is_null($return[$handle]) ) // Prime the return array with $handles
    9697                            $return[$handle] = true;
    9798                     if ( $this->scripts[$handle]->deps ) {
  • var/www/wp-dev/trunk/wp-includes/bookmark-template.php

     
    251251       $r = array_merge($defaults, $r);
    252252       extract($r);
    253253
     254       $output = '';
    254255       foreach ( (array) $bookmarks as $bookmark ) {
    255256              if ( !isset($bookmark->recently_updated) )
    256257                     $bookmark->recently_updated = false;
  • var/www/wp-dev/trunk/wp-content/element-cache.php

    Property changes on: /var/www/wp-dev/trunk/wp-content
    ___________________________________________________________________
    Name: svn:ignore
       + cache
    
     
     1<?php
     2// Caches small elements from many core functions
     3class Element_Cache {
     4       // The big cache array for all elements
     5       var $elementCache = array();
     6
     7       // Current loaded element
     8       var $currentElement = false;
     9       var $currentGroup = false;
     10
     11       // The cache directory
     12       var $cache_dir = "wp-content/cache/element/";
     13
     14       // Flush these caches to disc
     15       var $flushThis = array();
     16
     17       // Do some (maybe) initialization work
     18       // public
     19       function Element_Cache($newCacheDir = "") {
     20              // Is a new relative paht name set?
     21              if (!empty($newCacheDir)) $this->cache_dir = $newCacheDir;
     22
     23              // Generate full-qualified path name
     24              $this->cache_dir = sprintf("%s%s", ABSPATH, $this->cache_dir);
     25
     26              // Is our working directory up?
     27              if (!is_dir($this->cache_dir)) {
     28                     // Try to create it
     29                     @mkdir($this->cache_dir);
     30                     @chmod($this->cache_dir, 0777);
     31
     32                     // Re-check it
     33                     if (!is_dir($this->cache_dir)) {
     34                            // FATAL ERROR!
     35                            die("ELEMENT-CACHE: Cannot create my directory ".$this->cache_dir.". Please do so and CHMOD it to 0777.");
     36                     } else {
     37                            // Create .htaccess file
     38                            $fp = @fopen($this->cache_dir . ".htaccess", 'w') or die("Cannot create .htaccess file!");
     39                            fwrite($fp, "Deny from all\n");
     40                            fclose($fp);
     41                     }
     42              }
     43       }
     44
     45       // Check if element is in the array
     46       // private
     47       function isHashInArray ($elgroup, $hash) {
     48              if (isset($this->elementCache[$elgroup][$hash])) {
     49                     // Element is already cached!
     50                     $this->currentElement = $this->elementCache[$elgroup][$hash];
     51                     $this->currentGroup   = $elgroup;
     52                     $this->currentHash    = $hash;
     53                     return true;
     54              }
     55              return false;
     56       }
     57
     58       // Generate a hash useable for all elements
     59       // private
     60       function hash($element) {
     61              if (defined('WP_SECRET')) {
     62                     // Generate hash with WP_SECRET
     63                     return md5(WP_SECRET.$element);
     64              } else {
     65                     // INSECURE: without WP_SECRET
     66                     return md5($element);
     67              }
     68       }
     69
     70       // Check if element is cached or not and gets the requested element
     71       // public
     72       function isElementCached ($elgroup, $element) {
     73              // Generate hash
     74              $this->currentHash = $this->hash($element);
     75
     76              // Do we have it in cache?
     77              $status = $this->isHashInArray($elgroup, $this->currentHash);
     78              if (!$status) {
     79                     // Generate filename
     80                     $name = sprintf("%s%s.cache", $this->cache_dir, $elgroup);
     81                     if (file_exists($name)) {
     82                            // Load the cache file
     83                            $this->elementCache[$elgroup] = unserialize(file_get_contents($name));
     84
     85                            // Check again...
     86                            $status = $this->isHashInArray($elgroup, $this->currentHash);
     87                     }
     88              }
     89
     90              // If file exists or not makes no difference the element must be inside
     91              return $status;
     92       }
     93
     94       // Add an element to the cache (does not write it to disc!)
     95       // public
     96       function addElement($elgroup, $element, $data) {
     97              // Is the element already added?
     98              if (isset($this->elementCache[$elgroup][$this->currentHash])) return;
     99
     100              // Do we need to flush this group to disc?
     101              if (!isset($this->flushThis[$elgroup])) $this->flushThis[$elgroup] = 1;
     102
     103              // Add it to the memory cache
     104              $this->elementCache[$elgroup][$this->currentHash] = $data;
     105       }
     106
     107       // Get the current loaded element
     108       // public
     109       function getCurrentElement() {
     110              // Do we have it?
     111              if (!$this->currentElement) return false; // Not set!
     112
     113              // Okay, look it up in our array...
     114              $element = false;
     115              if (isset($this->elementCache[$this->currentGroup][$this->currentHash])) {
     116                     // Load the element
     117                     $element = $this->elementCache[$this->currentGroup][$this->currentHash];
     118
     119                     // And remove the current element
     120                     $this->currentElement = false;
     121                     $this->currentHash = false;
     122              }
     123
     124              // Return fetched element
     125              return $element;
     126       }
     127
     128       // Flush all changed/new caches to disc
     129       function flushCache() {
     130              foreach ($this->flushThis as $cache=>$dummy) {
     131                     // Serialize the cache
     132                     $output = serialize($this->elementCache[$cache]);
     133                     // Generate file name
     134                     $cacheFile = sprintf("%s%s.cache", $this->cache_dir, $cache);
     135                     // And put it out to the file
     136                     file_put_contents($cacheFile, $output);
     137              }
     138       }
     139}
     140
     141// The initializer function
     142function element_cache_init() {
     143       global $elCache;
     144       $elCache = new Element_Cache();
     145
     146       // Shutdown function
     147       register_shutdown_function('element_cache_shutdown');
     148}
     149
     150// Shutdown function
     151function element_cache_shutdown() {
     152       global $elCache;
     153       // Flush (maybe) added/changed caches
     154       $elCache->flushCache();
     155       // Do something more...
     156}
     157
     158?>
  • var/www/wp-dev/trunk/wp-content/themes/default/functions.php

     
    7373add_action('admin_menu', 'kubrick_add_theme_page');
    7474 
    7575function kubrick_add_theme_page() {
     76       if (!isset($_GET['page'])) $_GET['page'] = "";
    7677       if ( $_GET['page'] == basename(__FILE__) ) {
    7778              if ( 'save' == $_REQUEST['action'] ) {
    7879                     if ( isset($_REQUEST['njform']) ) {
  • var/www/wp-dev/trunk/wp-settings.php

     
    7474timer_start();
    7575
    7676// Change to E_ALL for development/debugging
    77 error_reporting(E_ALL ^ E_NOTICE);
     77error_reporting(E_ALL);
    7878
    7979// For an advanced caching plugin to use, static because you would only want one
    8080if ( defined('WP_CACHE') )
     
    109109// To be removed in 2.2
    110110$tableposts = $tableusers = $tablecategories = $tablepost2cat = $tablecomments = $tablelink2cat = $tablelinks = $tablelinkcategories = $tableoptions = $tablepostmeta = '';
    111111
    112 if ( file_exists(ABSPATH . 'wp-content/object-cache.php') )
     112if ( file_exists(ABSPATH . 'wp-content/object-cache.php') ) {
    113113       require (ABSPATH . 'wp-content/object-cache.php');
    114 else
     114} else {
    115115       require (ABSPATH . WPINC . '/cache.php');
     116       // You have to define ENABLE_ELEMENT_CACHE in your wp-config.php to get the element cacher working:
     117       // define('ENABLE_ELEMENT_CACHE', true);
     118       if ( file_exists(ABSPATH . 'wp-content/element-cache.php') && defined('ENABLE_ELEMENT_CACHE') ) {
     119              require (ABSPATH . 'wp-content/element-cache.php');
     120              element_cache_init();
     121       }
     122}     
    116123
     124// Initialize WordPress' cache
    117125wp_cache_init();
    118126
    119127require (ABSPATH . WPINC . '/functions.php');
     
    239247}
    240248register_shutdown_function('shutdown_action_hook');
    241249
     250function shutdown_database_connection() {
     251       global $wpdb;
     252       $wpdb->close();
     253}
     254
     255// Add a shutdown function for the database connection
     256register_shutdown_function('shutdown_database_connection');
     257
    242258// Everything is loaded and initialized.
    243259do_action('init');
    244260