[ Index ]

PHP Cross Reference of BackPress

title

Body

[close]

/includes/ -> functions.core.php (source)

   1  <?php
   2  // Last sync [WP11544]
   3  
   4  /**
   5   * From WP wp-includes/functions.php
   6   *
   7   * Missing functions are indicated in comments
   8   */
   9  
  10  /**
  11   * Main BackPress API
  12   *
  13   * @package BackPress
  14   */
  15  
  16  // ! function mysql2date()
  17  
  18  if ( !function_exists('current_time') ) :
  19  /**
  20   * Retrieve the current time based on specified type.
  21   *
  22   * The 'mysql' type will return the time in the format for MySQL DATETIME field.
  23   * The 'timestamp' type will return the current timestamp.
  24   *
  25   * If $gmt is set to either '1' or 'true', then both types will use GMT time.
  26   * if $gmt is false, the output is adjusted with the GMT offset in the WordPress option.
  27   *
  28   * @since 1.0.0
  29   *
  30   * @param string $type Either 'mysql' or 'timestamp'.
  31   * @param int|bool $gmt Optional. Whether to use GMT timezone. Default is false.
  32   * @return int|string String if $type is 'gmt', int if $type is 'timestamp'.
  33   */
  34  function current_time( $type, $gmt = 0 ) {
  35      switch ( $type ) {
  36          case 'mysql':
  37              return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( backpress_get_option( 'gmt_offset' ) * 3600 ) ) );
  38              break;
  39          case 'timestamp':
  40              return ( $gmt ) ? time() : time() + ( backpress_get_option( 'gmt_offset' ) * 3600 );
  41              break;
  42      }
  43  }
  44  endif;
  45  
  46  // ! function date_i18n()
  47  // ! function number_format_i18n()
  48  // ! function size_format()
  49  // ! function get_weekstartend()
  50  
  51  if ( !function_exists('maybe_unserialize') ) :
  52  /**
  53   * Unserialize value only if it was serialized.
  54   *
  55   * @since 2.0.0
  56   *
  57   * @param string $original Maybe unserialized original, if is needed.
  58   * @return mixed Unserialized data can be any type.
  59   */
  60  function maybe_unserialize( $original ) {
  61      if ( is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in
  62          return @unserialize( $original );
  63      return $original;
  64  }
  65  endif;
  66  
  67  if ( !function_exists('is_serialized') ) :
  68  /**
  69   * Check value to find if it was serialized.
  70   *
  71   * If $data is not an string, then returned value will always be false.
  72   * Serialized data is always a string.
  73   *
  74   * @since 2.0.5
  75   *
  76   * @param mixed $data Value to check to see if was serialized.
  77   * @return bool False if not serialized and true if it was.
  78   */
  79  function is_serialized( $data ) {
  80      // if it isn't a string, it isn't serialized
  81      if ( !is_string( $data ) )
  82          return false;
  83      $data = trim( $data );
  84      if ( 'N;' == $data )
  85          return true;
  86      if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
  87          return false;
  88      switch ( $badions[1] ) {
  89          case 'a' :
  90          case 'O' :
  91          case 's' :
  92              if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
  93                  return true;
  94              break;
  95          case 'b' :
  96          case 'i' :
  97          case 'd' :
  98              if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
  99                  return true;
 100              break;
 101      }
 102      return false;
 103  }
 104  endif;
 105  
 106  if ( !function_exists('is_serialized_string') ) :
 107  /**
 108   * Check whether serialized data is of string type.
 109   *
 110   * @since 2.0.5
 111   *
 112   * @param mixed $data Serialized data
 113   * @return bool False if not a serialized string, true if it is.
 114   */
 115  function is_serialized_string( $data ) {
 116      // if it isn't a string, it isn't a serialized string
 117      if ( !is_string( $data ) )
 118          return false;
 119      $data = trim( $data );
 120      if ( preg_match( '/^s:[0-9]+:.*;$/s', $data ) ) // this should fetch all serialized strings
 121          return true;
 122      return false;
 123  }
 124  endif;
 125  
 126  // ! function get_option()
 127  // ! function wp_protect_special_option()
 128  // ! function form_option()
 129  // ! function get_alloptions()
 130  // ! function wp_load_alloptions()
 131  // ! function update_option()
 132  // ! function add_option()
 133  // ! function delete_option()
 134  // ! function delete_transient()
 135  // ! function get_transient()
 136  // ! function set_transient()
 137  // ! function wp_user_settings()
 138  // ! function get_user_setting()
 139  // ! function set_user_setting()
 140  // ! function delete_user_setting()
 141  // ! function get_all_user_settings()
 142  // ! function wp_set_all_user_settings()
 143  // ! function delete_all_user_settings()
 144  
 145  if ( !function_exists('maybe_serialize') ) :
 146  /**
 147   * Serialize data, if needed.
 148   *
 149   * @since 2.0.5
 150   *
 151   * @param mixed $data Data that might be serialized.
 152   * @return mixed A scalar data
 153   */
 154  function maybe_serialize( $data ) {
 155      if ( is_array( $data ) || is_object( $data ) )
 156          return serialize( $data );
 157  
 158      if ( is_serialized( $data ) )
 159          return serialize( $data );
 160  
 161      return $data;
 162  }
 163  endif;
 164  
 165  // ! function make_url_footnote()
 166  // ! function xmlrpc_getposttitle()
 167  // ! function xmlrpc_getpostcategory()
 168  // ! function xmlrpc_removepostdata()
 169  // ! function debug_fopen()
 170  // ! function debug_fwrite()
 171  // ! function debug_fclose()
 172  // ! function do_enclose()
 173  // ! function wp_get_http()
 174  // ! function wp_get_http_headers()
 175  // ! function is_new_day()
 176  
 177  if ( !function_exists( 'build_query' ) ) :
 178  /**
 179   * Build URL query based on an associative and, or indexed array.
 180   *
 181   * This is a convenient function for easily building url queries. It sets the
 182   * separator to '&' and uses _http_build_query() function.
 183   *
 184   * @see _http_build_query() Used to build the query
 185   * @link http://us2.php.net/manual/en/function.http-build-query.php more on what
 186   *        http_build_query() does.
 187   *
 188   * @since 2.3.0
 189   *
 190   * @param array $data URL-encode key/value pairs.
 191   * @return string URL encoded string
 192   */
 193  function build_query( $data ) {
 194      return _http_build_query( $data, null, '&', '', false );
 195  }
 196  endif;
 197  
 198  if ( !function_exists( 'add_query_arg' ) ) :
 199  /**
 200   * Retrieve a modified URL query string.
 201   *
 202   * You can rebuild the URL and append a new query variable to the URL query by
 203   * using this function. You can also retrieve the full URL with query data.
 204   *
 205   * Adding a single key & value or an associative array. Setting a key value to
 206   * emptystring removes the key. Omitting oldquery_or_uri uses the $_SERVER
 207   * value.
 208   *
 209   * @since 1.5.0
 210   *
 211   * @param mixed $param1 Either newkey or an associative_array
 212   * @param mixed $param2 Either newvalue or oldquery or uri
 213   * @param mixed $param3 Optional. Old query or uri
 214   * @return string New URL query string.
 215   */
 216  function add_query_arg() {
 217      $args = func_get_args();
 218      if ( is_array( $args[0] ) ) {
 219          if ( count( $args ) < 2 || false === $args[1] )
 220              $uri = $_SERVER['REQUEST_URI'];
 221          else
 222              $uri = $args[1];
 223      } else {
 224          if ( count( $args ) < 3 || false === $args[2] )
 225              $uri = $_SERVER['REQUEST_URI'];
 226          else
 227              $uri = $args[2];
 228      }
 229  
 230      if ( $frag = strstr( $uri, '#' ) )
 231          $uri = substr( $uri, 0, -strlen( $frag ) );
 232      else
 233          $frag = '';
 234  
 235      if ( 0 === stripos( $uri, 'http://' ) ) {
 236          $protocol = 'http://';
 237          $uri = substr( $uri, 7 );
 238      } elseif ( 0 === stripos( $uri, 'https://' ) ) {
 239          $protocol = 'https://';
 240          $uri = substr( $uri, 8 );
 241      } else {
 242          $protocol = '';
 243      }
 244  
 245      if ( strpos( $uri, '?' ) !== false ) {
 246          list( $base, $query ) = explode( '?', $uri, 2 );
 247          $base .= '?';
 248      } elseif ( $protocol || strpos( $uri, '=' ) === false ) {
 249          $base = $uri . '?';
 250          $query = '';
 251      } else {
 252          $base = '';
 253          $query = $uri;
 254      }
 255  
 256      wp_parse_str( $query, $qs );
 257      $qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string
 258      if ( is_array( $args[0] ) ) {
 259          foreach ( $args[0] as $k => $v ) {
 260              $qs[ $k ] = $v;
 261          }
 262      } else {
 263          $qs[ $args[0] ] = $args[1];
 264      }
 265  
 266      foreach ( $qs as $k => $v ) {
 267          if ( $v === false )
 268              unset( $qs[$k] );
 269      }
 270  
 271      $ret = build_query( $qs );
 272      $ret = trim( $ret, '?' );
 273      $ret = preg_replace( '#=(&|$)#', '$1', $ret );
 274      $ret = $protocol . $base . $ret . $frag;
 275      $ret = rtrim( $ret, '?' );
 276      return $ret;
 277  }
 278  endif;
 279  
 280  if ( !function_exists( 'remove_query_arg' ) ) :
 281  /**
 282   * Removes an item or list from the query string.
 283   *
 284   * @since 1.5.0
 285   *
 286   * @param string|array $key Query key or keys to remove.
 287   * @param bool $query When false uses the $_SERVER value.
 288   * @return string New URL query string.
 289   */
 290  function remove_query_arg( $key, $query=false ) {
 291      if ( is_array( $key ) ) { // removing multiple keys
 292          foreach ( $key as $k )
 293              $query = add_query_arg( $k, false, $query );
 294          return $query;
 295      }
 296      return add_query_arg( $key, false, $query );
 297  }
 298  endif;
 299  
 300  // ! function add_magic_quotes()
 301  
 302  if ( !function_exists( 'wp_remote_fopen' ) ) :
 303  /**
 304   * HTTP request for URI to retrieve content.
 305   *
 306   * @since 1.5.1
 307   * @uses wp_remote_get()
 308   *
 309   * @param string $uri URI/URL of web page to retrieve.
 310   * @return bool|string HTTP content. False on failure.
 311   */
 312  function wp_remote_fopen( $uri ) {
 313      $parsed_url = @parse_url( $uri );
 314  
 315      if ( !$parsed_url || !is_array( $parsed_url ) )
 316          return false;
 317  
 318      $options = array();
 319      $options['timeout'] = 10;
 320  
 321      $response = wp_remote_get( $uri, $options );
 322  
 323      if ( is_wp_error( $response ) )
 324          return false;
 325  
 326      return $response['body'];
 327  }
 328  endif;
 329  
 330  // ! function wp()
 331  
 332  if ( !function_exists( 'get_status_header_desc' ) ) :
 333  /**
 334   * Retrieve the description for the HTTP status.
 335   *
 336   * @since 2.3.0
 337   *
 338   * @param int $code HTTP status code.
 339   * @return string Empty string if not found, or description if found.
 340   */
 341  function get_status_header_desc( $code ) {
 342      global $wp_header_to_desc;
 343  
 344      $code = absint( $code );
 345  
 346      if ( !isset( $wp_header_to_desc ) ) {
 347          $wp_header_to_desc = array(
 348              100 => 'Continue',
 349              101 => 'Switching Protocols',
 350              102 => 'Processing',
 351  
 352              200 => 'OK',
 353              201 => 'Created',
 354              202 => 'Accepted',
 355              203 => 'Non-Authoritative Information',
 356              204 => 'No Content',
 357              205 => 'Reset Content',
 358              206 => 'Partial Content',
 359              207 => 'Multi-Status',
 360              226 => 'IM Used',
 361  
 362              300 => 'Multiple Choices',
 363              301 => 'Moved Permanently',
 364              302 => 'Found',
 365              303 => 'See Other',
 366              304 => 'Not Modified',
 367              305 => 'Use Proxy',
 368              306 => 'Reserved',
 369              307 => 'Temporary Redirect',
 370  
 371              400 => 'Bad Request',
 372              401 => 'Unauthorized',
 373              402 => 'Payment Required',
 374              403 => 'Forbidden',
 375              404 => 'Not Found',
 376              405 => 'Method Not Allowed',
 377              406 => 'Not Acceptable',
 378              407 => 'Proxy Authentication Required',
 379              408 => 'Request Timeout',
 380              409 => 'Conflict',
 381              410 => 'Gone',
 382              411 => 'Length Required',
 383              412 => 'Precondition Failed',
 384              413 => 'Request Entity Too Large',
 385              414 => 'Request-URI Too Long',
 386              415 => 'Unsupported Media Type',
 387              416 => 'Requested Range Not Satisfiable',
 388              417 => 'Expectation Failed',
 389              422 => 'Unprocessable Entity',
 390              423 => 'Locked',
 391              424 => 'Failed Dependency',
 392              426 => 'Upgrade Required',
 393  
 394              500 => 'Internal Server Error',
 395              501 => 'Not Implemented',
 396              502 => 'Bad Gateway',
 397              503 => 'Service Unavailable',
 398              504 => 'Gateway Timeout',
 399              505 => 'HTTP Version Not Supported',
 400              506 => 'Variant Also Negotiates',
 401              507 => 'Insufficient Storage',
 402              510 => 'Not Extended'
 403          );
 404      }
 405  
 406      if ( isset( $wp_header_to_desc[$code] ) )
 407          return $wp_header_to_desc[$code];
 408      else
 409          return '';
 410  }
 411  endif;
 412  
 413  if ( !function_exists( 'status_header' ) ) :
 414  /**
 415   * Set HTTP status header.
 416   *
 417   * @since 2.0.0
 418   * @uses apply_filters() Calls 'status_header' on status header string, HTTP
 419   *        HTTP code, HTTP code description, and protocol string as separate
 420   *        parameters.
 421   *
 422   * @param int $header HTTP status code
 423   * @return null Does not return anything.
 424   */
 425  function status_header( $header ) {
 426      $text = get_status_header_desc( $header );
 427  
 428      if ( empty( $text ) )
 429          return false;
 430  
 431      $protocol = $_SERVER["SERVER_PROTOCOL"];
 432      if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol )
 433          $protocol = 'HTTP/1.0';
 434      $status_header = "$protocol $header $text";
 435      if ( function_exists( 'apply_filters' ) )
 436          $status_header = apply_filters( 'status_header', $status_header, $header, $text, $protocol );
 437  
 438      return @header( $status_header, true, $header );
 439  }
 440  endif;
 441  
 442  if ( !function_exists( 'wp_get_nocache_headers' ) ) :
 443  /**
 444   * Gets the header information to prevent caching.
 445   *
 446   * The several different headers cover the different ways cache prevention is handled
 447   * by different browsers
 448   *
 449   * @since 2.8
 450   *
 451   * @uses apply_filters()
 452   * @return array The associative array of header names and field values.
 453   */
 454  function wp_get_nocache_headers() {
 455      $headers = array(
 456          'Expires' => 'Wed, 11 Jan 1984 05:00:00 GMT',
 457          'Last-Modified' => gmdate( 'D, d M Y H:i:s' ) . ' GMT',
 458          'Cache-Control' => 'no-cache, must-revalidate, max-age=0',
 459          'Pragma' => 'no-cache',
 460      );
 461  
 462      if ( function_exists('apply_filters') ) {
 463          $headers = apply_filters('nocache_headers', $headers);
 464      }
 465      return $headers;
 466  }
 467  endif;
 468  
 469  if ( !function_exists( 'nocache_headers' ) ) :
 470  /**
 471   * Sets the headers to prevent caching for the different browsers.
 472   *
 473   * Different browsers support different nocache headers, so several headers must
 474   * be sent so that all of them get the point that no caching should occur.
 475   *
 476   * @since 2.0.0
 477   * @uses wp_get_nocache_headers()
 478   */
 479  function nocache_headers() {
 480      $headers = wp_get_nocache_headers();
 481      foreach( (array) $headers as $name => $field_value )
 482          @header("{$name}: {$field_value}");
 483  }
 484  endif;
 485  
 486  if ( !function_exists( 'cache_javascript_headers' ) ) :
 487  /**
 488   * Set the headers for caching for 10 days with JavaScript content type.
 489   *
 490   * @since 2.1.0
 491   */
 492  function cache_javascript_headers() {
 493      $expiresOffset = 864000; // 10 days
 494      header( "Content-Type: text/javascript; charset=" . backpress_get_option( 'charset' ) );
 495      header( "Vary: Accept-Encoding" ); // Handle proxies
 496      header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $expiresOffset ) . " GMT" );
 497  }
 498  endif;
 499  
 500  // ! function get_num_queries()
 501  // ! function bool_from_yn()
 502  // ! function do_feed()
 503  // ! function do_feed_rdf()
 504  // ! function do_feed_rss()
 505  // ! function do_feed_rss2()
 506  // ! function do_feed_atom()
 507  // ! function do_robots()
 508  // ! function is_blog_installed()
 509  // ! function wp_nonce_url()
 510  // ! function wp_nonce_field()
 511  
 512  if ( !function_exists( 'wp_referer_field' ) ) :
 513  /**
 514   * Retrieve or display referer hidden field for forms.
 515   *
 516   * The referer link is the current Request URI from the server super global. The
 517   * input name is '_wp_http_referer', in case you wanted to check manually.
 518   *
 519   * @package WordPress
 520   * @subpackage Security
 521   * @since 2.0.4
 522   *
 523   * @param bool $echo Whether to echo or return the referer field.
 524   * @return string Referer field.
 525   */
 526  function wp_referer_field( $echo = true) {
 527      $ref = esc_attr( $_SERVER['REQUEST_URI'] );
 528      $referer_field = '<input type="hidden" name="_wp_http_referer" value="'. $ref . '" />';
 529  
 530      if ( $echo )
 531          echo $referer_field;
 532      return $referer_field;
 533  }
 534  endif;
 535  
 536  if ( !function_exists( 'wp_original_referer_field' ) ) :
 537  /**
 538   * Retrieve or display original referer hidden field for forms.
 539   *
 540   * The input name is '_wp_original_http_referer' and will be either the same
 541   * value of {@link wp_referer_field()}, if that was posted already or it will
 542   * be the current page, if it doesn't exist.
 543   *
 544   * @package WordPress
 545   * @subpackage Security
 546   * @since 2.0.4
 547   *
 548   * @param bool $echo Whether to echo the original http referer
 549   * @param string $jump_back_to Optional, default is 'current'. Can be 'previous' or page you want to jump back to.
 550   * @return string Original referer field.
 551   */
 552  function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) {
 553      $jump_back_to = ( 'previous' == $jump_back_to ) ? wp_get_referer() : $_SERVER['REQUEST_URI'];
 554      $ref = ( wp_get_original_referer() ) ? wp_get_original_referer() : $jump_back_to;
 555      $orig_referer_field = '<input type="hidden" name="_wp_original_http_referer" value="' . esc_attr( stripslashes( $ref ) ) . '" />';
 556      if ( $echo )
 557          echo $orig_referer_field;
 558      return $orig_referer_field;
 559  }
 560  endif;
 561  
 562  if ( !function_exists( 'wp_get_referer' ) ) :
 563  /**
 564   * Retrieve referer from '_wp_http_referer', HTTP referer, or current page respectively.
 565   *
 566   * @package WordPress
 567   * @subpackage Security
 568   * @since 2.0.4
 569   *
 570   * @return string|bool False on failure. Referer URL on success.
 571   */
 572  function wp_get_referer() {
 573      $ref = '';
 574      if ( ! empty( $_REQUEST['_wp_http_referer'] ) )
 575          $ref = $_REQUEST['_wp_http_referer'];
 576      else if ( ! empty( $_SERVER['HTTP_REFERER'] ) )
 577          $ref = $_SERVER['HTTP_REFERER'];
 578  
 579      if ( $ref !== $_SERVER['REQUEST_URI'] )
 580          return $ref;
 581      return false;
 582  }
 583  endif;
 584  
 585  if ( !function_exists( 'wp_get_original_referer' ) ) :
 586  /**
 587   * Retrieve original referer that was posted, if it exists.
 588   *
 589   * @package WordPress
 590   * @subpackage Security
 591   * @since 2.0.4
 592   *
 593   * @return string|bool False if no original referer or original referer if set.
 594   */
 595  function wp_get_original_referer() {
 596      if ( !empty( $_REQUEST['_wp_original_http_referer'] ) )
 597          return $_REQUEST['_wp_original_http_referer'];
 598      return false;
 599  }
 600  endif;
 601  
 602  // ! function wp_mkdir_p()
 603  // ! function path_is_absolute()
 604  // ! function path_join()
 605  // ! function wp_upload_dir()
 606  // ! function wp_unique_filename()
 607  // ! function wp_upload_bits()
 608  // ! function wp_ext2type()
 609  // ! function wp_check_filetype()
 610  // ! function wp_explain_nonce()
 611  // ! function wp_nonce_ays()
 612  // ! function wp_die()
 613  // ! function _config_wp_home()
 614  // ! function _config_wp_siteurl()
 615  // ! function _mce_set_direction()
 616  // ! function smilies_init()
 617  
 618  if ( !function_exists('wp_parse_args') ) :
 619  /**
 620   * Merge user defined arguments into defaults array.
 621   *
 622   * This function is used throughout WordPress to allow for both string or array
 623   * to be merged into another array.
 624   *
 625   * @since 2.2.0
 626   *
 627   * @param string|array $args Value to merge with $defaults
 628   * @param array $defaults Array that serves as the defaults.
 629   * @return array Merged user defined values with defaults.
 630   */
 631  function wp_parse_args( $args, $defaults = '' ) {
 632      if ( is_object( $args ) )
 633          $r = get_object_vars( $args );
 634      elseif ( is_array( $args ) )
 635          $r =& $args;
 636      else
 637          wp_parse_str( $args, $r );
 638  
 639      if ( is_array( $defaults ) )
 640          return array_merge( $defaults, $r );
 641      return $r;
 642  }
 643  endif;
 644  
 645  // ! function wp_maybe_load_widgets()
 646  // ! function wp_widgets_add_menu()
 647  // ! function wp_ob_end_flush_all()
 648  // ! function require_wp_db()
 649  // ! function dead_db()
 650  
 651  if ( !function_exists('absint') ) :
 652  /**
 653   * Converts value to nonnegative integer.
 654   *
 655   * @since 2.5.0
 656   *
 657   * @param mixed $maybeint Data you wish to have convered to an nonnegative integer
 658   * @return int An nonnegative integer
 659   */
 660  function absint( $maybeint ) {
 661      return abs( intval( $maybeint ) );
 662  }
 663  endif;
 664  
 665  // ! function url_is_accessable_via_ssl()
 666  // ! function atom_service_url_filter()
 667  // ! function _deprecated_function()
 668  // ! function _deprecated_file()
 669  
 670  if ( !function_exists('is_lighttpd_before_150') ) :
 671  /**
 672   * Is the server running earlier than 1.5.0 version of lighttpd
 673   *
 674   * @since 2.5.0
 675   *
 676   * @return bool Whether the server is running lighttpd < 1.5.0
 677   */
 678  function is_lighttpd_before_150() {
 679      $server_parts = explode( '/', isset( $_SERVER['SERVER_SOFTWARE'] )? $_SERVER['SERVER_SOFTWARE'] : '' );
 680      $server_parts[1] = isset( $server_parts[1] )? $server_parts[1] : '';
 681      return  'lighttpd' == $server_parts[0] && -1 == version_compare( $server_parts[1], '1.5.0' );
 682  }
 683  endif;
 684  
 685  if ( !function_exists('apache_mod_loaded') ) :
 686  /**
 687   * Does the specified module exist in the apache config?
 688   *
 689   * @since 2.5.0
 690   *
 691   * @param string $mod e.g. mod_rewrite
 692   * @param bool $default The default return value if the module is not found
 693   * @return bool
 694   */
 695  function apache_mod_loaded($mod, $default = false) {
 696      global $is_apache;
 697  
 698      if ( !$is_apache )
 699          return false;
 700  
 701      if ( function_exists('apache_get_modules') ) {
 702          $mods = apache_get_modules();
 703          if ( in_array($mod, $mods) )
 704              return true;
 705      } elseif ( function_exists('phpinfo') ) {
 706              ob_start();
 707              phpinfo(8);
 708              $phpinfo = ob_get_clean();
 709              if ( false !== strpos($phpinfo, $mod) )
 710                  return true;
 711      }
 712      return $default;
 713  }
 714  endif;
 715  
 716  if ( !function_exists('validate_file') ) :
 717  /**
 718   * File validates against allowed set of defined rules.
 719   *
 720   * A return value of '1' means that the $file contains either '..' or './'. A
 721   * return value of '2' means that the $file contains ':' after the first
 722   * character. A return value of '3' means that the file is not in the allowed
 723   * files list.
 724   *
 725   * @since 1.2.0
 726   *
 727   * @param string $file File path.
 728   * @param array $allowed_files List of allowed files.
 729   * @return int 0 means nothing is wrong, greater than 0 means something was wrong.
 730   */
 731  function validate_file( $file, $allowed_files = '' ) {
 732      if ( false !== strpos( $file, '..' ))
 733          return 1;
 734  
 735      if ( false !== strpos( $file, './' ))
 736          return 1;
 737  
 738      if (':' == substr( $file, 1, 1 ))
 739          return 2;
 740  
 741      if (!empty ( $allowed_files ) && (!in_array( $file, $allowed_files ) ) )
 742          return 3;
 743  
 744      return 0;
 745  }
 746  endif;
 747  
 748  if ( !function_exists('is_ssl') ) :
 749  /**
 750   * Determine if SSL is used.
 751   *
 752   * @since 2.6.0
 753   *
 754   * @return bool True if SSL, false if not used.
 755   */
 756  function is_ssl() {
 757      if ( isset($_SERVER['HTTPS']) ) {
 758          if ( 'on' == strtolower($_SERVER['HTTPS']) )
 759              return true;
 760          if ( '1' == $_SERVER['HTTPS'] )
 761              return true;
 762      } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
 763          return true;
 764      }
 765      return false;
 766  }
 767  endif;
 768  
 769  if ( !function_exists('force_ssl_login') ) :
 770  /**
 771   * Whether SSL login should be forced.
 772   *
 773   * @since 2.6.0
 774   *
 775   * @param string|bool $force Optional.
 776   * @return bool True if forced, false if not forced.
 777   */
 778  function force_ssl_login($force = '') {
 779      static $forced;
 780  
 781      if ( '' != $force ) {
 782          $old_forced = $forced;
 783          $forced = $force;
 784          return $old_forced;
 785      }
 786  
 787      return $forced;
 788  }
 789  endif;
 790  
 791  if ( !function_exists('force_ssl_admin') ) :
 792  /**
 793   * Whether to force SSL used for the Administration Panels.
 794   *
 795   * @since 2.6.0
 796   *
 797   * @param string|bool $force
 798   * @return bool True if forced, false if not forced.
 799   */
 800  function force_ssl_admin($force = '') {
 801      static $forced;
 802  
 803      if ( '' != $force ) {
 804          $old_forced = $forced;
 805          $forced = $force;
 806          return $old_forced;
 807      }
 808  
 809      return $forced;
 810  }
 811  endif;
 812  
 813  // ! function wp_guess_url()
 814  // ! function wp_suspend_cache_invalidation()
 815  // ! function get_site_option()
 816  // ! function add_site_option()
 817  // ! function update_site_option()
 818  
 819  if ( !function_exists('wp_timezone_override_offset') ) :
 820  /**
 821   * gmt_offset modification for smart timezone handling
 822   *
 823   * Overrides the gmt_offset option if we have a timezone_string available
 824   */
 825  function wp_timezone_override_offset() {
 826      if ( !wp_timezone_supported() ) {
 827          return false;
 828      }
 829      if ( !$timezone_string = backpress_get_option( 'timezone_string' ) ) {
 830          return false;
 831      }
 832  
 833      @date_default_timezone_set( $timezone_string );
 834      $timezone_object = timezone_open( $timezone_string );
 835      $datetime_object = date_create();
 836      if ( false === $timezone_object || false === $datetime_object ) {
 837          return false;
 838      }
 839      return round( timezone_offset_get( $timezone_object, $datetime_object ) / 3600, 2 );
 840  }
 841  endif;
 842  
 843  if ( !function_exists('wp_timezone_supported') ) :
 844  /**
 845   * Check for PHP timezone support
 846   */
 847  function wp_timezone_supported() {
 848      $support = false;
 849      if (
 850          function_exists( 'date_default_timezone_set' ) &&
 851          function_exists( 'timezone_identifiers_list' ) &&
 852          function_exists( 'timezone_open' ) &&
 853          function_exists( 'timezone_offset_get' )
 854      ) {
 855          $support = true;
 856      }
 857      return apply_filters( 'timezone_support', $support );
 858  }
 859  endif;
 860  
 861  if ( !function_exists('_wp_timezone_choice_usort_callback') ) :
 862  function _wp_timezone_choice_usort_callback( $a, $b ) {
 863      // Don't use translated versions of Etc
 864      if ( 'Etc' === $a['continent'] && 'Etc' === $b['continent'] ) {
 865          // Make the order of these more like the old dropdown
 866          if ( 'GMT+' === substr( $a['city'], 0, 4 ) && 'GMT+' === substr( $b['city'], 0, 4 ) ) {
 867              return -1 * ( strnatcasecmp( $a['city'], $b['city'] ) );
 868          }
 869          if ( 'UTC' === $a['city'] ) {
 870              if ( 'GMT+' === substr( $b['city'], 0, 4 ) ) {
 871                  return 1;
 872              }
 873              return -1;
 874          }
 875          if ( 'UTC' === $b['city'] ) {
 876              if ( 'GMT+' === substr( $a['city'], 0, 4 ) ) {
 877                  return -1;
 878              }
 879              return 1;
 880          }
 881          return strnatcasecmp( $a['city'], $b['city'] );
 882      }
 883      if ( $a['t_continent'] == $b['t_continent'] ) {
 884          if ( $a['t_city'] == $b['t_city'] ) {
 885              return strnatcasecmp( $a['t_subcity'], $b['t_subcity'] );
 886          }
 887          return strnatcasecmp( $a['t_city'], $b['t_city'] );
 888      } else {
 889          // Force Etc to the bottom of the list
 890          if ( 'Etc' === $a['continent'] ) {
 891              return 1;
 892          }
 893          if ( 'Etc' === $b['continent'] ) {
 894              return -1;
 895          }
 896          return strnatcasecmp( $a['t_continent'], $b['t_continent'] );
 897      }
 898  }
 899  endif;
 900  
 901  if ( !function_exists('wp_timezone_choice') ) :
 902  /**
 903   * Gives a nicely formatted list of timezone strings // temporary! Not in final
 904   *
 905   * @param $selected_zone string Selected Zone
 906   *
 907   */
 908  function wp_timezone_choice( $selected_zone ) {
 909      static $mo_loaded = false;
 910  
 911      $continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific', 'Etc' );
 912  
 913      // Load translations for continents and cities
 914      if ( !$mo_loaded ) {
 915          $locale = backpress_get_option( 'language_locale' );
 916          $mofile = backpress_get_option( 'language_directory' ) . 'continents-cities-' . $locale . '.mo';
 917          load_textdomain( 'continents-cities', $mofile );
 918          $mo_loaded = true;
 919      }
 920  
 921      $zonen = array();
 922      foreach ( timezone_identifiers_list() as $zone ) {
 923          $zone = explode( '/', $zone );
 924          if ( !in_array( $zone[0], $continents ) ) {
 925              continue;
 926          }
 927          if ( 'Etc' === $zone[0] && in_array( $zone[1], array( 'UCT', 'GMT', 'GMT0', 'GMT+0', 'GMT-0', 'Greenwich', 'Universal', 'Zulu' ) ) ) {
 928              continue;
 929          }
 930  
 931          // This determines what gets set and translated - we don't translate Etc/* strings here, they are done later
 932          $exists = array(
 933              0 => ( isset( $zone[0] ) && $zone[0] ) ? true : false,
 934              1 => ( isset( $zone[1] ) && $zone[1] ) ? true : false,
 935              2 => ( isset( $zone[2] ) && $zone[2] ) ? true : false
 936          );
 937          $exists[3] = ( $exists[0] && 'Etc' !== $zone[0] ) ? true : false;
 938          $exists[4] = ( $exists[1] && $exists[3] ) ? true : false;
 939          $exists[5] = ( $exists[2] && $exists[3] ) ? true : false;
 940  
 941          $zonen[] = array(
 942              'continent'   => ( $exists[0] ? $zone[0] : '' ),
 943              'city'        => ( $exists[1] ? $zone[1] : '' ),
 944              'subcity'     => ( $exists[2] ? $zone[2] : '' ),
 945              't_continent' => ( $exists[3] ? translate( str_replace( '_', ' ', $zone[0] ), 'continents-cities' ) : '' ),
 946              't_city'      => ( $exists[4] ? translate( str_replace( '_', ' ', $zone[1] ), 'continents-cities' ) : '' ),
 947              't_subcity'   => ( $exists[5] ? translate( str_replace( '_', ' ', $zone[2] ), 'continents-cities' ) : '' )
 948          );
 949      }
 950      usort( $zonen, '_wp_timezone_choice_usort_callback' );
 951  
 952      $structure = array();
 953  
 954      if ( empty( $selected_zone ) ) {
 955          $structure[] = '<option selected="selected" value="">' . __( 'Select a city' ) . '</option>';
 956      }
 957  
 958      foreach ( $zonen as $key => $zone ) {
 959          // Build value in an array to join later
 960          $value = array( $zone['continent'] );
 961  
 962          if ( empty( $zone['city'] ) ) {
 963              // It's at the continent level (generally won't happen)
 964              $display = $zone['t_continent'];
 965          } else {
 966              // It's inside a continent group
 967              
 968              // Continent optgroup
 969              if ( !isset( $zonen[$key - 1] ) || $zonen[$key - 1]['continent'] !== $zone['continent'] ) {
 970                  $label = ( 'Etc' === $zone['continent'] ) ? __( 'Manual offsets' ) : $zone['t_continent'];
 971                  $structure[] = '<optgroup label="'. esc_attr( $label ) .'">';
 972              }
 973              
 974              // Add the city to the value
 975              $value[] = $zone['city'];
 976              if ( 'Etc' === $zone['continent'] ) {
 977                  if ( 'UTC' === $zone['city'] ) {
 978                      $display = '';
 979                  } else {
 980                      $display = str_replace( 'GMT', '', $zone['city'] );
 981                      $display = strtr( $display, '+-', '-+' ) . ':00';
 982                  }
 983                  $display = sprintf( __( 'UTC %s' ), $display );
 984              } else {
 985                  $display = $zone['t_city'];
 986                  if ( !empty( $zone['subcity'] ) ) {
 987                      // Add the subcity to the value
 988                      $value[] = $zone['subcity'];
 989                      $display .= ' - ' . $zone['t_subcity'];
 990                  }
 991              }
 992          }
 993  
 994          // Build the value
 995          $value = join( '/', $value );
 996          $selected = '';
 997          if ( $value === $selected_zone ) {
 998              $selected = 'selected="selected" ';
 999          }
1000          $structure[] = '<option ' . $selected . 'value="' . esc_attr( $value ) . '">' . esc_html( $display ) . "</option>";
1001          
1002          // Close continent optgroup
1003          if ( !empty( $zone['city'] ) && ( !isset($zonen[$key + 1]) || (isset( $zonen[$key + 1] ) && $zonen[$key + 1]['continent'] !== $zone['continent']) ) ) {
1004              $structure[] = '</optgroup>';
1005          }
1006      }
1007  
1008      return join( "\n", $structure );
1009  }
1010  endif;
1011  
1012  if ( !function_exists('_cleanup_header_comment') ) :
1013  /**
1014   * Strip close comment and close php tags from file headers used by WP
1015   * See http://core.trac.wordpress.org/ticket/8497
1016   *
1017   * @since 2.8
1018   */
1019  function _cleanup_header_comment($str) {
1020      return trim(preg_replace("/\s*(?:\*\/|\?>).*/", '', $str));
1021  }
1022  endif;
1023  
1024  /**
1025   * Returns true.
1026   *
1027   * Useful for returning true to filters easily.
1028   *
1029   * @since 3.0.0
1030   * @see __return_false()
1031   * @return bool true
1032   */
1033  function __return_true() {
1034      return true;
1035  }
1036  
1037  /**
1038   * Returns false.
1039   *
1040   * Useful for returning false to filters easily.
1041   *
1042   * @since 3.0.0
1043   * @see __return_true()
1044   * @return bool false
1045   */
1046  function __return_false() {
1047      return false;
1048  }
1049  
1050  /**
1051   * Returns 0.
1052   *
1053   * Useful for returning 0 to filters easily.
1054   *
1055   * @since 3.0.0
1056   * @see __return_zero()
1057   * @return int 0
1058   */
1059  function __return_zero() {
1060      return 0;
1061  }
1062  
1063  /**
1064   * Returns an empty array.
1065   *
1066   * Useful for returning an empty array to filters easily.
1067   *
1068   * @since 3.0.0
1069   * @see __return_zero()
1070   * @return array Empty array
1071   */
1072  function __return_empty_array() {
1073      return array();
1074  }
1075  
1076  /**
1077   * Returns null.
1078   *
1079   * Useful for returning null to filters easily.
1080   *
1081   * @since 3.4.0
1082   * @return null
1083   */
1084  function __return_null() {
1085      return null;
1086  }
1087  
1088  
1089  /**
1090   * From WP wp-settings.php
1091   */
1092  
1093  if ( !function_exists( 'wp_clone' ) ) :
1094  /**
1095   * Copy an object.
1096   *
1097   * Returns a cloned copy of an object.
1098   *
1099   * @since 2.7.0
1100   *
1101   * @param object $object The object to clone
1102   * @return object The cloned object
1103   */
1104  function wp_clone( $object ) {
1105      static $can_clone;
1106      if ( !isset( $can_clone ) ) {
1107          $can_clone = version_compare( phpversion(), '5.0', '>=' );
1108      }
1109      return $can_clone ? clone( $object ) : $object;
1110  }
1111  endif;
1112  
1113  
1114  
1115  /**
1116   * BackPress only below
1117   */
1118  
1119  if ( !function_exists('backpress_gmt_strtotime') ) :
1120  function backpress_gmt_strtotime( $string ) {
1121      if ( is_numeric($string) )
1122          return $string;
1123      if ( !is_string($string) )
1124          return -1;
1125  
1126      if ( stristr($string, 'utc') || stristr($string, 'gmt') || stristr($string, '+0000') )
1127          return strtotime($string);
1128  
1129      if ( -1 == $time = strtotime($string . ' +0000') )
1130          return strtotime($string);
1131  
1132      return $time;
1133  }
1134  endif;
1135  
1136  if ( !function_exists('backpress_convert_object') ) :
1137  function backpress_convert_object( &$object, $output ) {
1138      if ( is_array( $object ) ) {
1139          foreach ( array_keys( $object ) as $key )
1140              backpress_convert_object( $object[$key], $output );
1141      } else {
1142          switch ( $output ) {
1143              case OBJECT  : break;
1144              case ARRAY_A : $object = get_object_vars($object); break;
1145              case ARRAY_N : $object = array_values(get_object_vars($object)); break;
1146          }
1147      }
1148  }
1149  endif;
1150  
1151  if ( !function_exists('backpress_die') ) :
1152  /**
1153   * Kill BackPress execution and display HTML message with error message.
1154   *
1155   * This function calls the die() PHP function. The difference is that a message
1156   * in HTML will be displayed to the user. It is recommended to use this function
1157   * only when the execution should not continue any further. It is not
1158   * recommended to call this function very often and normally you should try to
1159   * handle as many errors as possible silently.
1160   *
1161   * @param string $message Error message.
1162   * @param string $title Error title.
1163   * @param string|array $args Optional arguments to control behaviour.
1164   */
1165  function backpress_die( $message, $title = '', $args = array() )
1166  {
1167      $defaults = array( 'response' => 500, 'language' => 'en-US', 'text_direction' => 'ltr' );
1168      $r = wp_parse_args( $args, $defaults );
1169  
1170      if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
1171          if ( empty( $title ) ) {
1172              $error_data = $message->get_error_data();
1173              if ( is_array( $error_data ) && isset( $error_data['title'] ) ) {
1174                  $title = $error_data['title'];
1175              }
1176          }
1177          $errors = $message->get_error_messages();
1178          switch ( count( $errors ) ) {
1179              case 0:
1180                  $message = '';
1181                  break;
1182              case 1:
1183                  $message = '<p>' . $errors[0] . '</p>';
1184                  break;
1185              default:
1186                  $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>";
1187                  break;
1188          }
1189      } elseif ( is_string( $message ) ) {
1190          $message = '<p>' . $message . '</p>';
1191      }
1192  
1193      if ( !headers_sent() ) {
1194          status_header( $r['response'] );
1195          nocache_headers();
1196          header( 'Content-Type: text/html; charset=utf-8' );
1197      }
1198  
1199      if ( empty( $title ) ) {
1200          if ( function_exists( '__' ) ) {
1201              $title = __( 'BackPress &rsaquo; Error' );
1202          } else {
1203              $title = 'BackPress &rsaquo; Error';
1204          }
1205      }
1206  
1207      if ( $r['text_direction'] ) {
1208          $language_attributes = ' dir="' . $r['text_direction'] . '"';
1209      }
1210  
1211      if ( $r['language'] ) {
1212          // Always XHTML 1.1 style
1213          $language_attributes .= ' lang="' . $r['language'] . '"';
1214      }
1215  ?>
1216  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1217  <html xmlns="http://www.w3.org/1999/xhtml"<?php echo $language_attributes; ?>>
1218  <head>
1219      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1220      <title><?php echo $title ?></title>
1221      <style type="text/css" media="screen">
1222          html { background: #f7f7f7; }
1223  
1224          body {
1225              background: #fff;
1226              color: #333;
1227              font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif;
1228              margin: 2em auto 0 auto;
1229              width: 700px;
1230              padding: 1em 2em;
1231              -moz-border-radius: 11px;
1232              -khtml-border-radius: 11px;
1233              -webkit-border-radius: 11px;
1234              border-radius: 11px;
1235              border: 1px solid #dfdfdf;
1236          }
1237  
1238          a { color: #2583ad; text-decoration: none; }
1239  
1240          a:hover { color: #d54e21; }
1241  
1242          h1 {
1243              border-bottom: 1px solid #dadada;
1244              clear: both;
1245              color: #666;
1246              font: 24px Georgia, "Times New Roman", Times, serif;
1247              margin: 5px 0 0 -4px;
1248              padding: 0;
1249              padding-bottom: 7px;
1250          }
1251  
1252          h2 { font-size: 16px; }
1253  
1254          p, li {
1255              padding-bottom: 2px;
1256              font-size: 12px;
1257              line-height: 18px;
1258          }
1259  
1260          code { font-size: 13px; }
1261  
1262          ul, ol { padding: 5px 5px 5px 22px; }
1263  
1264          #error-page { margin-top: 50px; }
1265  
1266          #error-page p {
1267              font-size: 12px;
1268              line-height: 18px;
1269              margin: 25px 0 20px;
1270          }
1271  
1272          #error-page code { font-family: Consolas, Monaco, Courier, monospace; }
1273  <?php
1274      if ( $r['text_direction'] === 'rtl') {
1275  ?>
1276          body {
1277              font-family: Tahoma, "Times New Roman";
1278          }
1279  
1280          h1 {
1281              font-family: Tahoma, "Times New Roman";
1282              margin: 5px -4px 0 0;
1283          }
1284  
1285          ul, ol { padding: 5px 22px 5px 5px; }
1286  <?php
1287      }
1288  ?>
1289      </style>
1290  </head>
1291  <body id="error-page">
1292      <?php echo $message; ?>
1293  </body>
1294  </html>
1295  <?php
1296      die();
1297  }
1298  endif;
1299  
1300  /**
1301   * Acts the same as core PHP setcookie() but its arguments are run through the backpress_set_cookie filter.
1302   * 
1303   * If the filter returns false, setcookie() isn't called.
1304   */
1305  function backpress_set_cookie() {
1306      $args = func_get_args();
1307      $args = apply_filters( 'backpress_set_cookie', $args );
1308      if ( $args === false ) return;
1309      call_user_func_array( 'setcookie', $args );
1310  }


Generated: Thu Dec 26 01:01:01 2024 Cross-referenced by PHPXref 0.7.1