Skip to content
Snippets Groups Projects
Select Git revision
  • master default
1 result

blogs.php

Blame
  • blogs.php 3.03 KiB
    <?php
    
    
    // Return a list of all blog IDs.
    // (Does not include deleted and archived blogs).
    function noblogs_get_blogs() {
      global $wpdb;
      $sql = "SELECT blog_id FROM $wpdb->blogs WHERE deleted = 0 AND archived = '0'";
      $result = $wpdb->get_results($sql);
      return ($result);
    }
    
    // Find a blog by its name or ID.
    function noblogs_get_blog($blogname) {
      global $wpdb;
      if (preg_match('/^\d+$/', $blogname)) {
        $sql = "SELECT * FROM $wpdb->blogs WHERE blog_id='" . $blogname . "'";
      } else {
        if (!preg_match('/\.noblogs\.org$/', $blogname)) {
          $blogname = $blogname . '.noblogs.org';
        }
        $sql = "SELECT * FROM $wpdb->blogs WHERE domain = '" . $blogname . "'";
      }
      $result = $wpdb->get_results($sql);
      return $result[0];
    }
    
    // Return the database connection information associated with a blog.
    function noblogs_get_backend_for_blog($blog_id) {
      global $wpdb;
    
      // Create a temporary hash object just to load the backends
      // (we cannot use the map in $wpdb because it doesn't have the
      // backend array anymore).
      $hashmap = new Flexihash(null, R2DB_FLEXIHASH_REPLICAS);
      $reversemap = noblogs_load_backends($hashmap);
    
      // Lookup the blog ID using the $wpdb hash just to be safe (though
      // we should get an identical result using $hashmap).
      $lookup = $wpdb->hash_map->lookup($blog_id);
      $backend = $reversemap[$lookup];
    
      // Be nice and split the database host into 'host' and 'port' elements.
      $result = array();
      if (preg_match('/^(.*):([0-9]*)$/', $backend['host'], $matches)) {
        $result['host'] = $matches[1];
        $result['port'] = $matches[2];
      } else {
        $result['host'] = $backend['host'];
      }
      $result['user'] = $backend['user'];
      $result['password'] = $backend['password'];
      $result['db'] = $backend['name'];
      return $result;
    }
    
    // Return the full backend -> blogs map.
    function noblogs_get_backend_map() {
      global $wpdb;
      $wpdb_hash = &$wpdb->hash_map;
    
      $blogs = noblogs_get_blogs();
      $backend_map = array();
    
      foreach ($blogs as $blog) {
        $blog_id = $blog->blog_id;
        $backend_id = $wpdb_hash->lookup($blog_id);
        if (!array_key_exists($backend_id, $backend_map)) {
          $backend_map[$backend_id] = array();
        }
        array_push($backend_map[$backend_id], (int)$blog_id);
      }
    
      return $backend_map;
    }
    
    // Return the backend ID for the local host.
    function noblogs_get_local_backend_id() {
      global $noblogs_config;
      return $noblogs_config['local_backend_name'];
    }
    
    // Return a list of blogs that are local to this server.
    function noblogs_get_local_blogs() {
      $backend_map = noblogs_get_backend_map();
      $local_id = noblogs_get_local_backend_id();
      return $backend_map[$local_id];
    }
    
    // Return true if the blog has not been updated in some time.
    function noblogs_is_stale($days = 180) {
        global $wpdb;
        $recent = new WP_Query("showposts=1&orderby=modified&post_status=publish");
        if ($recent->have_posts()) {
            $recent->the_post();
            $last_update = get_the_modified_time('U');
            $now = time();
            if ( ($now - $last_update) > 86400*$days )
                return true;
        }
        return false;
    }