web/wp-app.php
author ymh <ymh.work@gmail.com>
Mon, 22 Mar 2010 15:58:56 +0100
changeset 4 468bf32a3664
parent 1 0d28b7c10758
permissions -rw-r--r--
Migrate to mercurial
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
0d28b7c10758 First commit
ymh
parents:
diff changeset
     1
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
     2
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
     3
 * Atom Publishing Protocol support for WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
     4
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
     5
 * @author Original by Elias Torres <http://torrez.us/archives/2006/08/31/491/>
0d28b7c10758 First commit
ymh
parents:
diff changeset
     6
 * @author Modified by Dougal Campbell <http://dougal.gunters.org/>
0d28b7c10758 First commit
ymh
parents:
diff changeset
     7
 * @version 1.0.5-dc
0d28b7c10758 First commit
ymh
parents:
diff changeset
     8
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
     9
0d28b7c10758 First commit
ymh
parents:
diff changeset
    10
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    11
 * WordPress is handling an Atom Publishing Protocol request.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    12
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    13
 * @var bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
    14
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    15
define('APP_REQUEST', true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    16
0d28b7c10758 First commit
ymh
parents:
diff changeset
    17
/** Set up WordPress environment */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    18
require_once('./wp-load.php');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    19
0d28b7c10758 First commit
ymh
parents:
diff changeset
    20
/** Atom Publishing Protocol Class */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    21
require_once(ABSPATH . WPINC . '/atomlib.php');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    22
0d28b7c10758 First commit
ymh
parents:
diff changeset
    23
/** Admin Image API for metadata updating */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    24
require_once(ABSPATH . '/wp-admin/includes/image.php');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    25
0d28b7c10758 First commit
ymh
parents:
diff changeset
    26
$_SERVER['PATH_INFO'] = preg_replace( '/.*\/wp-app\.php/', '', $_SERVER['REQUEST_URI'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    27
0d28b7c10758 First commit
ymh
parents:
diff changeset
    28
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    29
 * Whether to enable Atom Publishing Protocol Logging.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    30
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    31
 * @name app_logging
0d28b7c10758 First commit
ymh
parents:
diff changeset
    32
 * @var int|bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
    33
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    34
$app_logging = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    35
0d28b7c10758 First commit
ymh
parents:
diff changeset
    36
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    37
 * Whether to always authenticate user. Permanently set to true.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    38
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    39
 * @name always_authenticate
0d28b7c10758 First commit
ymh
parents:
diff changeset
    40
 * @var int|bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
    41
 * @todo Should be an option somewhere
0d28b7c10758 First commit
ymh
parents:
diff changeset
    42
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    43
$always_authenticate = 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    44
0d28b7c10758 First commit
ymh
parents:
diff changeset
    45
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    46
 * Writes logging info to a file.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    47
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    48
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
    49
 * @uses $app_logging
0d28b7c10758 First commit
ymh
parents:
diff changeset
    50
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
    51
 * @subpackage Logging
0d28b7c10758 First commit
ymh
parents:
diff changeset
    52
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    53
 * @param string $label Type of logging
0d28b7c10758 First commit
ymh
parents:
diff changeset
    54
 * @param string $msg Information describing logging reason.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    55
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    56
function log_app($label,$msg) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    57
	global $app_logging;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    58
	if ($app_logging) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    59
		$fp = fopen( 'wp-app.log', 'a+');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    60
		$date = gmdate( 'Y-m-d H:i:s' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    61
		fwrite($fp, "\n\n$date - $label\n$msg\n");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    62
		fclose($fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    63
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    64
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    65
0d28b7c10758 First commit
ymh
parents:
diff changeset
    66
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    67
 * Filter to add more post statuses.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    68
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    69
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
    70
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    71
 * @param string $where SQL statement to filter.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    72
 * @return string Filtered SQL statement with added post_status for where clause.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    73
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    74
function wa_posts_where_include_drafts_filter($where) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    75
	$where = str_replace("post_status = 'publish'","post_status = 'publish' OR post_status = 'future' OR post_status = 'draft' OR post_status = 'inherit'", $where);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    76
	return $where;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    77
0d28b7c10758 First commit
ymh
parents:
diff changeset
    78
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    79
add_filter('posts_where', 'wa_posts_where_include_drafts_filter');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    80
0d28b7c10758 First commit
ymh
parents:
diff changeset
    81
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    82
 * WordPress AtomPub API implementation.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    83
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    84
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
    85
 * @subpackage Publishing
0d28b7c10758 First commit
ymh
parents:
diff changeset
    86
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
    87
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    88
class AtomServer {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    89
0d28b7c10758 First commit
ymh
parents:
diff changeset
    90
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    91
	 * ATOM content type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    92
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    93
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
    94
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    95
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    96
	var $ATOM_CONTENT_TYPE = 'application/atom+xml';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    97
0d28b7c10758 First commit
ymh
parents:
diff changeset
    98
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    99
	 * Categories ATOM content type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   100
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   101
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   102
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   103
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   104
	var $CATEGORIES_CONTENT_TYPE = 'application/atomcat+xml';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   105
0d28b7c10758 First commit
ymh
parents:
diff changeset
   106
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   107
	 * Service ATOM content type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   108
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   109
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   110
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   111
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   112
	var $SERVICE_CONTENT_TYPE = 'application/atomsvc+xml';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   113
0d28b7c10758 First commit
ymh
parents:
diff changeset
   114
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   115
	 * ATOM XML namespace.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   116
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   117
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   118
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   119
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   120
	var $ATOM_NS = 'http://www.w3.org/2005/Atom';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   121
0d28b7c10758 First commit
ymh
parents:
diff changeset
   122
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   123
	 * ATOMPUB XML namespace.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   124
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   125
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   126
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   127
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   128
	var $ATOMPUB_NS = 'http://www.w3.org/2007/app';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   129
0d28b7c10758 First commit
ymh
parents:
diff changeset
   130
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   131
	 * Entries path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   132
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   133
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   134
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   135
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   136
	var $ENTRIES_PATH = "posts";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   137
0d28b7c10758 First commit
ymh
parents:
diff changeset
   138
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   139
	 * Categories path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   140
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   141
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   142
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   143
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   144
	var $CATEGORIES_PATH = "categories";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   145
0d28b7c10758 First commit
ymh
parents:
diff changeset
   146
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   147
	 * Media path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   148
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   149
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   150
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   151
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   152
	var $MEDIA_PATH = "attachments";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   153
0d28b7c10758 First commit
ymh
parents:
diff changeset
   154
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   155
	 * Entry path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   156
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   157
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   158
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   159
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   160
	var $ENTRY_PATH = "post";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   161
0d28b7c10758 First commit
ymh
parents:
diff changeset
   162
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   163
	 * Service path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   164
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   165
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   166
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   167
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   168
	var $SERVICE_PATH = "service";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   169
0d28b7c10758 First commit
ymh
parents:
diff changeset
   170
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   171
	 * Media single path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   172
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   173
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   174
	 * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   175
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   176
	var $MEDIA_SINGLE_PATH = "attachment";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   177
0d28b7c10758 First commit
ymh
parents:
diff changeset
   178
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   179
	 * ATOMPUB parameters.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   180
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   181
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   182
	 * @var array
0d28b7c10758 First commit
ymh
parents:
diff changeset
   183
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   184
	var $params = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   185
0d28b7c10758 First commit
ymh
parents:
diff changeset
   186
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   187
	 * Supported ATOMPUB media types.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   188
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   189
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   190
	 * @var array
0d28b7c10758 First commit
ymh
parents:
diff changeset
   191
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   192
	var $media_content_types = array('image/*','audio/*','video/*');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   193
0d28b7c10758 First commit
ymh
parents:
diff changeset
   194
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   195
	 * ATOMPUB content type(s).
0d28b7c10758 First commit
ymh
parents:
diff changeset
   196
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   197
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   198
	 * @var array
0d28b7c10758 First commit
ymh
parents:
diff changeset
   199
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   200
	var $atom_content_types = array('application/atom+xml');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   201
0d28b7c10758 First commit
ymh
parents:
diff changeset
   202
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   203
	 * ATOMPUB methods.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   204
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   205
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   206
	 * @var unknown_type
0d28b7c10758 First commit
ymh
parents:
diff changeset
   207
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   208
	var $selectors = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   209
0d28b7c10758 First commit
ymh
parents:
diff changeset
   210
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   211
	 * Whether to do output.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   212
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   213
	 * Support for head.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   214
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   215
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   216
	 * @var bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   217
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   218
	var $do_output = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   219
0d28b7c10758 First commit
ymh
parents:
diff changeset
   220
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   221
	 * PHP4 constructor - Sets up object properties.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   222
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   223
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   224
	 * @return AtomServer
0d28b7c10758 First commit
ymh
parents:
diff changeset
   225
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   226
	function AtomServer() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   227
0d28b7c10758 First commit
ymh
parents:
diff changeset
   228
		$this->script_name = array_pop(explode('/',$_SERVER['SCRIPT_NAME']));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   229
		$this->app_base = get_bloginfo('url') . '/' . $this->script_name . '/';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   230
		if ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   231
			$this->app_base = preg_replace( '/^http:\/\//', 'https://', $this->app_base );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   232
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   233
0d28b7c10758 First commit
ymh
parents:
diff changeset
   234
		$this->selectors = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
   235
			'@/service$@' =>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   236
				array('GET' => 'get_service'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   237
			'@/categories$@' =>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   238
				array('GET' => 'get_categories_xml'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   239
			'@/post/(\d+)$@' =>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   240
				array('GET' => 'get_post',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   241
						'PUT' => 'put_post',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   242
						'DELETE' => 'delete_post'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   243
			'@/posts/?(\d+)?$@' =>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   244
				array('GET' => 'get_posts',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   245
						'POST' => 'create_post'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   246
			'@/attachments/?(\d+)?$@' =>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   247
				array('GET' => 'get_attachment',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   248
						'POST' => 'create_attachment'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   249
			'@/attachment/file/(\d+)$@' =>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   250
				array('GET' => 'get_file',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   251
						'PUT' => 'put_file',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   252
						'DELETE' => 'delete_file'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   253
			'@/attachment/(\d+)$@' =>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   254
				array('GET' => 'get_attachment',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   255
						'PUT' => 'put_attachment',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   256
						'DELETE' => 'delete_attachment'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   257
		);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   258
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   259
0d28b7c10758 First commit
ymh
parents:
diff changeset
   260
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   261
	 * Handle ATOMPUB request.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   262
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   263
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   264
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   265
	function handle_request() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   266
		global $always_authenticate;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   267
0d28b7c10758 First commit
ymh
parents:
diff changeset
   268
		if( !empty( $_SERVER['ORIG_PATH_INFO'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   269
			$path = $_SERVER['ORIG_PATH_INFO'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   270
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   271
			$path = $_SERVER['PATH_INFO'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   272
0d28b7c10758 First commit
ymh
parents:
diff changeset
   273
		$method = $_SERVER['REQUEST_METHOD'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   274
0d28b7c10758 First commit
ymh
parents:
diff changeset
   275
		log_app('REQUEST',"$method $path\n================");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   276
0d28b7c10758 First commit
ymh
parents:
diff changeset
   277
		$this->process_conditionals();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   278
		//$this->process_conditionals();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   279
0d28b7c10758 First commit
ymh
parents:
diff changeset
   280
		// exception case for HEAD (treat exactly as GET, but don't output)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   281
		if($method == 'HEAD') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   282
			$this->do_output = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   283
			$method = 'GET';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   284
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   285
0d28b7c10758 First commit
ymh
parents:
diff changeset
   286
		// redirect to /service in case no path is found.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   287
		if(strlen($path) == 0 || $path == '/') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   288
			$this->redirect($this->get_service_url());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   289
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   290
0d28b7c10758 First commit
ymh
parents:
diff changeset
   291
		// check to see if AtomPub is enabled
0d28b7c10758 First commit
ymh
parents:
diff changeset
   292
		if( !get_option( 'enable_app' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   293
			$this->forbidden( sprintf( __( 'AtomPub services are disabled on this blog.  An admin user can enable them at %s' ), admin_url('options-writing.php') ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   294
0d28b7c10758 First commit
ymh
parents:
diff changeset
   295
		// dispatch
0d28b7c10758 First commit
ymh
parents:
diff changeset
   296
		foreach($this->selectors as $regex => $funcs) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   297
			if(preg_match($regex, $path, $matches)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   298
			if(isset($funcs[$method])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   299
0d28b7c10758 First commit
ymh
parents:
diff changeset
   300
				// authenticate regardless of the operation and set the current
0d28b7c10758 First commit
ymh
parents:
diff changeset
   301
				// user. each handler will decide if auth is required or not.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   302
				if(!$this->authenticate()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   303
					if ($always_authenticate) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   304
						$this->auth_required('Credentials required.');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   305
					}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   306
				}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   307
0d28b7c10758 First commit
ymh
parents:
diff changeset
   308
				array_shift($matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   309
				call_user_func_array(array(&$this,$funcs[$method]), $matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   310
				exit();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   311
			} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   312
				// only allow what we have handlers for...
0d28b7c10758 First commit
ymh
parents:
diff changeset
   313
				$this->not_allowed(array_keys($funcs));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   314
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   315
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   316
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   317
0d28b7c10758 First commit
ymh
parents:
diff changeset
   318
		// oops, nothing found
0d28b7c10758 First commit
ymh
parents:
diff changeset
   319
		$this->not_found();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   320
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   321
0d28b7c10758 First commit
ymh
parents:
diff changeset
   322
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   323
	 * Retrieve XML for ATOMPUB service.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   324
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   325
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   326
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   327
	function get_service() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   328
		log_app('function','get_service()');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   329
0d28b7c10758 First commit
ymh
parents:
diff changeset
   330
		if( !current_user_can( 'edit_posts' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   331
			$this->auth_required( __( 'Sorry, you do not have the right to access this blog.' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   332
0d28b7c10758 First commit
ymh
parents:
diff changeset
   333
		$entries_url = esc_attr($this->get_entries_url());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   334
		$categories_url = esc_attr($this->get_categories_url());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   335
		$media_url = esc_attr($this->get_attachments_url());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   336
		$accepted_media_types = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   337
		foreach ($this->media_content_types as $med) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   338
			$accepted_media_types = $accepted_media_types . "<accept>" . $med . "</accept>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   339
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   340
		$atom_prefix="atom";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   341
		$atom_blogname=get_bloginfo('name');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   342
		$service_doc = <<<EOD
0d28b7c10758 First commit
ymh
parents:
diff changeset
   343
<service xmlns="$this->ATOMPUB_NS" xmlns:$atom_prefix="$this->ATOM_NS">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   344
  <workspace>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   345
    <$atom_prefix:title>$atom_blogname Workspace</$atom_prefix:title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   346
    <collection href="$entries_url">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   347
      <$atom_prefix:title>$atom_blogname Posts</$atom_prefix:title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   348
      <accept>$this->ATOM_CONTENT_TYPE;type=entry</accept>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   349
      <categories href="$categories_url" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   350
    </collection>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   351
    <collection href="$media_url">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   352
      <$atom_prefix:title>$atom_blogname Media</$atom_prefix:title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   353
      $accepted_media_types
0d28b7c10758 First commit
ymh
parents:
diff changeset
   354
    </collection>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   355
  </workspace>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   356
</service>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   357
0d28b7c10758 First commit
ymh
parents:
diff changeset
   358
EOD;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   359
0d28b7c10758 First commit
ymh
parents:
diff changeset
   360
		$this->output($service_doc, $this->SERVICE_CONTENT_TYPE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   361
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   362
0d28b7c10758 First commit
ymh
parents:
diff changeset
   363
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   364
	 * Retrieve categories list in XML format.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   365
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   366
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   367
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   368
	function get_categories_xml() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   369
		log_app('function','get_categories_xml()');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   370
0d28b7c10758 First commit
ymh
parents:
diff changeset
   371
		if( !current_user_can( 'edit_posts' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   372
			$this->auth_required( __( 'Sorry, you do not have the right to access this blog.' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   373
0d28b7c10758 First commit
ymh
parents:
diff changeset
   374
		$home = esc_attr(get_bloginfo_rss('home'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   375
0d28b7c10758 First commit
ymh
parents:
diff changeset
   376
		$categories = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   377
		$cats = get_categories("hierarchical=0&hide_empty=0");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   378
		foreach ((array) $cats as $cat) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   379
			$categories .= "    <category term=\"" . esc_attr($cat->name) .  "\" />\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   380
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   381
		$output = <<<EOD
0d28b7c10758 First commit
ymh
parents:
diff changeset
   382
<app:categories xmlns:app="$this->ATOMPUB_NS"
0d28b7c10758 First commit
ymh
parents:
diff changeset
   383
	xmlns="$this->ATOM_NS"
0d28b7c10758 First commit
ymh
parents:
diff changeset
   384
	fixed="yes" scheme="$home">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   385
	$categories
0d28b7c10758 First commit
ymh
parents:
diff changeset
   386
</app:categories>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   387
EOD;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   388
	$this->output($output, $this->CATEGORIES_CONTENT_TYPE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   389
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   390
0d28b7c10758 First commit
ymh
parents:
diff changeset
   391
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   392
	 * Create new post.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   393
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   394
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   395
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   396
	function create_post() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   397
		global $blog_id, $user_ID;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   398
		$this->get_accepted_content_type($this->atom_content_types);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   399
0d28b7c10758 First commit
ymh
parents:
diff changeset
   400
		$parser = new AtomParser();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   401
		if(!$parser->parse()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   402
			$this->client_error();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   403
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   404
0d28b7c10758 First commit
ymh
parents:
diff changeset
   405
		$entry = array_pop($parser->feed->entries);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   406
0d28b7c10758 First commit
ymh
parents:
diff changeset
   407
		log_app('Received entry:', print_r($entry,true));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   408
0d28b7c10758 First commit
ymh
parents:
diff changeset
   409
		$catnames = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   410
		foreach($entry->categories as $cat)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   411
			array_push($catnames, $cat["term"]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   412
0d28b7c10758 First commit
ymh
parents:
diff changeset
   413
		$wp_cats = get_categories(array('hide_empty' => false));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   414
0d28b7c10758 First commit
ymh
parents:
diff changeset
   415
		$post_category = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   416
0d28b7c10758 First commit
ymh
parents:
diff changeset
   417
		foreach($wp_cats as $cat) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   418
			if(in_array($cat->name, $catnames))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   419
				array_push($post_category, $cat->term_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   420
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   421
0d28b7c10758 First commit
ymh
parents:
diff changeset
   422
		$publish = (isset($entry->draft) && trim($entry->draft) == 'yes') ? false : true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   423
0d28b7c10758 First commit
ymh
parents:
diff changeset
   424
		$cap = ($publish) ? 'publish_posts' : 'edit_posts';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   425
0d28b7c10758 First commit
ymh
parents:
diff changeset
   426
		if(!current_user_can($cap))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   427
			$this->auth_required(__('Sorry, you do not have the right to edit/publish new posts.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   428
0d28b7c10758 First commit
ymh
parents:
diff changeset
   429
		$blog_ID = (int ) $blog_id;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   430
		$post_status = ($publish) ? 'publish' : 'draft';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   431
		$post_author = (int) $user_ID;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   432
		$post_title = $entry->title[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   433
		$post_content = $entry->content[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   434
		$post_excerpt = $entry->summary[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   435
		$pubtimes = $this->get_publish_time($entry->published);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   436
		$post_date = $pubtimes[0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   437
		$post_date_gmt = $pubtimes[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   438
0d28b7c10758 First commit
ymh
parents:
diff changeset
   439
		if ( isset( $_SERVER['HTTP_SLUG'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   440
			$post_name = $_SERVER['HTTP_SLUG'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   441
0d28b7c10758 First commit
ymh
parents:
diff changeset
   442
		$post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_name');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   443
0d28b7c10758 First commit
ymh
parents:
diff changeset
   444
		$this->escape($post_data);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   445
		log_app('Inserting Post. Data:', print_r($post_data,true));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   446
0d28b7c10758 First commit
ymh
parents:
diff changeset
   447
		$postID = wp_insert_post($post_data);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   448
		if ( is_wp_error( $postID ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   449
			$this->internal_error($postID->get_error_message());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   450
0d28b7c10758 First commit
ymh
parents:
diff changeset
   451
		if (!$postID)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   452
			$this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   453
0d28b7c10758 First commit
ymh
parents:
diff changeset
   454
		// getting warning here about unable to set headers
0d28b7c10758 First commit
ymh
parents:
diff changeset
   455
		// because something in the cache is printing to the buffer
0d28b7c10758 First commit
ymh
parents:
diff changeset
   456
		// could we clean up wp_set_post_categories or cache to not print
0d28b7c10758 First commit
ymh
parents:
diff changeset
   457
		// this could affect our ability to send back the right headers
0d28b7c10758 First commit
ymh
parents:
diff changeset
   458
		@wp_set_post_categories($postID, $post_category);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   459
0d28b7c10758 First commit
ymh
parents:
diff changeset
   460
		do_action( 'atompub_create_post', $postID, $entry );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   461
0d28b7c10758 First commit
ymh
parents:
diff changeset
   462
		$output = $this->get_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   463
0d28b7c10758 First commit
ymh
parents:
diff changeset
   464
		log_app('function',"create_post($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   465
		$this->created($postID, $output);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   466
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   467
0d28b7c10758 First commit
ymh
parents:
diff changeset
   468
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   469
	 * Retrieve post.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   470
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   471
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   472
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   473
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   474
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   475
	function get_post($postID) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   476
		global $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   477
0d28b7c10758 First commit
ymh
parents:
diff changeset
   478
		if( !current_user_can( 'edit_post', $postID ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   479
			$this->auth_required( __( 'Sorry, you do not have the right to access this post.' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   480
0d28b7c10758 First commit
ymh
parents:
diff changeset
   481
		$this->set_current_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   482
		$output = $this->get_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   483
		log_app('function',"get_post($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   484
		$this->output($output);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   485
0d28b7c10758 First commit
ymh
parents:
diff changeset
   486
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   487
0d28b7c10758 First commit
ymh
parents:
diff changeset
   488
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   489
	 * Update post.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   490
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   491
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   492
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   493
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   494
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   495
	function put_post($postID) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   496
		// checked for valid content-types (atom+xml)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   497
		// quick check and exit
0d28b7c10758 First commit
ymh
parents:
diff changeset
   498
		$this->get_accepted_content_type($this->atom_content_types);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   499
0d28b7c10758 First commit
ymh
parents:
diff changeset
   500
		$parser = new AtomParser();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   501
		if(!$parser->parse()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   502
			$this->bad_request();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   503
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   504
0d28b7c10758 First commit
ymh
parents:
diff changeset
   505
		$parsed = array_pop($parser->feed->entries);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   506
0d28b7c10758 First commit
ymh
parents:
diff changeset
   507
		log_app('Received UPDATED entry:', print_r($parsed,true));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   508
0d28b7c10758 First commit
ymh
parents:
diff changeset
   509
		// check for not found
0d28b7c10758 First commit
ymh
parents:
diff changeset
   510
		global $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   511
		$this->set_current_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   512
0d28b7c10758 First commit
ymh
parents:
diff changeset
   513
		if(!current_user_can('edit_post', $entry['ID']))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   514
			$this->auth_required(__('Sorry, you do not have the right to edit this post.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   515
0d28b7c10758 First commit
ymh
parents:
diff changeset
   516
		$publish = (isset($parsed->draft) && trim($parsed->draft) == 'yes') ? false : true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   517
		$post_status = ($publish) ? 'publish' : 'draft';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   518
0d28b7c10758 First commit
ymh
parents:
diff changeset
   519
		extract($entry);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   520
0d28b7c10758 First commit
ymh
parents:
diff changeset
   521
		$post_title = $parsed->title[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   522
		$post_content = $parsed->content[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   523
		$post_excerpt = $parsed->summary[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   524
		$pubtimes = $this->get_publish_time($entry->published);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   525
		$post_date = $pubtimes[0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   526
		$post_date_gmt = $pubtimes[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   527
		$pubtimes = $this->get_publish_time($parsed->updated);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   528
		$post_modified = $pubtimes[0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   529
		$post_modified_gmt = $pubtimes[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   530
0d28b7c10758 First commit
ymh
parents:
diff changeset
   531
		$postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   532
		$this->escape($postdata);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   533
0d28b7c10758 First commit
ymh
parents:
diff changeset
   534
		$result = wp_update_post($postdata);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   535
0d28b7c10758 First commit
ymh
parents:
diff changeset
   536
		if (!$result) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   537
			$this->internal_error(__('For some strange yet very annoying reason, this post could not be edited.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   538
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   539
0d28b7c10758 First commit
ymh
parents:
diff changeset
   540
		do_action( 'atompub_put_post', $ID, $parsed );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   541
0d28b7c10758 First commit
ymh
parents:
diff changeset
   542
		log_app('function',"put_post($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   543
		$this->ok();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   544
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   545
0d28b7c10758 First commit
ymh
parents:
diff changeset
   546
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   547
	 * Remove post.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   548
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   549
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   550
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   551
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   552
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   553
	function delete_post($postID) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   554
0d28b7c10758 First commit
ymh
parents:
diff changeset
   555
		// check for not found
0d28b7c10758 First commit
ymh
parents:
diff changeset
   556
		global $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   557
		$this->set_current_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   558
0d28b7c10758 First commit
ymh
parents:
diff changeset
   559
		if(!current_user_can('edit_post', $postID)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   560
			$this->auth_required(__('Sorry, you do not have the right to delete this post.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   561
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   562
0d28b7c10758 First commit
ymh
parents:
diff changeset
   563
		if ($entry['post_type'] == 'attachment') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   564
			$this->delete_attachment($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   565
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   566
			$result = wp_delete_post($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   567
0d28b7c10758 First commit
ymh
parents:
diff changeset
   568
			if (!$result) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   569
				$this->internal_error(__('For some strange yet very annoying reason, this post could not be deleted.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   570
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   571
0d28b7c10758 First commit
ymh
parents:
diff changeset
   572
			log_app('function',"delete_post($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   573
			$this->ok();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   574
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   575
0d28b7c10758 First commit
ymh
parents:
diff changeset
   576
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   577
0d28b7c10758 First commit
ymh
parents:
diff changeset
   578
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   579
	 * Retrieve attachment.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   580
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   581
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   582
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   583
	 * @param int $postID Optional. Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   584
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   585
	function get_attachment($postID = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   586
		if( !current_user_can( 'upload_files' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   587
			$this->auth_required( __( 'Sorry, you do not have permission to upload files.' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   588
0d28b7c10758 First commit
ymh
parents:
diff changeset
   589
		if (!isset($postID)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   590
			$this->get_attachments();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   591
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   592
			$this->set_current_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   593
			$output = $this->get_entry($postID, 'attachment');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   594
			log_app('function',"get_attachment($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   595
			$this->output($output);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   596
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   597
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   598
0d28b7c10758 First commit
ymh
parents:
diff changeset
   599
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   600
	 * Create new attachment.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   601
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   602
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   603
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   604
	function create_attachment() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   605
0d28b7c10758 First commit
ymh
parents:
diff changeset
   606
		$type = $this->get_accepted_content_type();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   607
0d28b7c10758 First commit
ymh
parents:
diff changeset
   608
		if(!current_user_can('upload_files'))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   609
			$this->auth_required(__('You do not have permission to upload files.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   610
0d28b7c10758 First commit
ymh
parents:
diff changeset
   611
		$fp = fopen("php://input", "rb");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   612
		$bits = null;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   613
		while(!feof($fp)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   614
			$bits .= fread($fp, 4096);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   615
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   616
		fclose($fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   617
0d28b7c10758 First commit
ymh
parents:
diff changeset
   618
		$slug = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   619
		if ( isset( $_SERVER['HTTP_SLUG'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   620
			$slug = sanitize_file_name( $_SERVER['HTTP_SLUG'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   621
		elseif ( isset( $_SERVER['HTTP_TITLE'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   622
			$slug = sanitize_file_name( $_SERVER['HTTP_TITLE'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   623
		elseif ( empty( $slug ) ) // just make a random name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   624
			$slug = substr( md5( uniqid( microtime() ) ), 0, 7);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   625
		$ext = preg_replace( '|.*/([a-z0-9]+)|', '$1', $_SERVER['CONTENT_TYPE'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   626
		$slug = "$slug.$ext";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   627
		$file = wp_upload_bits( $slug, NULL, $bits);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   628
0d28b7c10758 First commit
ymh
parents:
diff changeset
   629
		log_app('wp_upload_bits returns:',print_r($file,true));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   630
0d28b7c10758 First commit
ymh
parents:
diff changeset
   631
		$url = $file['url'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   632
		$file = $file['file'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   633
0d28b7c10758 First commit
ymh
parents:
diff changeset
   634
		do_action('wp_create_file_in_uploads', $file); // replicate
0d28b7c10758 First commit
ymh
parents:
diff changeset
   635
0d28b7c10758 First commit
ymh
parents:
diff changeset
   636
		// Construct the attachment array
0d28b7c10758 First commit
ymh
parents:
diff changeset
   637
		$attachment = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
   638
			'post_title' => $slug,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   639
			'post_content' => $slug,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   640
			'post_status' => 'attachment',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   641
			'post_parent' => 0,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   642
			'post_mime_type' => $type,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   643
			'guid' => $url
0d28b7c10758 First commit
ymh
parents:
diff changeset
   644
			);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   645
0d28b7c10758 First commit
ymh
parents:
diff changeset
   646
		// Save the data
0d28b7c10758 First commit
ymh
parents:
diff changeset
   647
		$postID = wp_insert_attachment($attachment, $file);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   648
0d28b7c10758 First commit
ymh
parents:
diff changeset
   649
		if (!$postID)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   650
			$this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   651
0d28b7c10758 First commit
ymh
parents:
diff changeset
   652
		$output = $this->get_entry($postID, 'attachment');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   653
0d28b7c10758 First commit
ymh
parents:
diff changeset
   654
		$this->created($postID, $output, 'attachment');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   655
		log_app('function',"create_attachment($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   656
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   657
0d28b7c10758 First commit
ymh
parents:
diff changeset
   658
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   659
	 * Update attachment.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   660
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   661
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   662
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   663
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   664
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   665
	function put_attachment($postID) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   666
		// checked for valid content-types (atom+xml)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   667
		// quick check and exit
0d28b7c10758 First commit
ymh
parents:
diff changeset
   668
		$this->get_accepted_content_type($this->atom_content_types);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   669
0d28b7c10758 First commit
ymh
parents:
diff changeset
   670
		$parser = new AtomParser();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   671
		if(!$parser->parse()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   672
			$this->bad_request();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   673
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   674
0d28b7c10758 First commit
ymh
parents:
diff changeset
   675
		$parsed = array_pop($parser->feed->entries);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   676
0d28b7c10758 First commit
ymh
parents:
diff changeset
   677
		// check for not found
0d28b7c10758 First commit
ymh
parents:
diff changeset
   678
		global $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   679
		$this->set_current_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   680
0d28b7c10758 First commit
ymh
parents:
diff changeset
   681
		if(!current_user_can('edit_post', $entry['ID']))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   682
			$this->auth_required(__('Sorry, you do not have the right to edit this post.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   683
0d28b7c10758 First commit
ymh
parents:
diff changeset
   684
		extract($entry);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   685
0d28b7c10758 First commit
ymh
parents:
diff changeset
   686
		$post_title = $parsed->title[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   687
		$post_content = $parsed->summary[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   688
		$pubtimes = $this->get_publish_time($parsed->updated);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   689
		$post_modified = $pubtimes[0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   690
		$post_modified_gmt = $pubtimes[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   691
0d28b7c10758 First commit
ymh
parents:
diff changeset
   692
		$postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_modified', 'post_modified_gmt');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   693
		$this->escape($postdata);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   694
0d28b7c10758 First commit
ymh
parents:
diff changeset
   695
		$result = wp_update_post($postdata);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   696
0d28b7c10758 First commit
ymh
parents:
diff changeset
   697
		if (!$result) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   698
			$this->internal_error(__('For some strange yet very annoying reason, this post could not be edited.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   699
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   700
0d28b7c10758 First commit
ymh
parents:
diff changeset
   701
		log_app('function',"put_attachment($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   702
		$this->ok();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   703
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   704
0d28b7c10758 First commit
ymh
parents:
diff changeset
   705
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   706
	 * Remove attachment.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   707
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   708
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   709
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   710
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   711
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   712
	function delete_attachment($postID) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   713
		log_app('function',"delete_attachment($postID). File '$location' deleted.");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   714
0d28b7c10758 First commit
ymh
parents:
diff changeset
   715
		// check for not found
0d28b7c10758 First commit
ymh
parents:
diff changeset
   716
		global $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   717
		$this->set_current_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   718
0d28b7c10758 First commit
ymh
parents:
diff changeset
   719
		if(!current_user_can('edit_post', $postID)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   720
			$this->auth_required(__('Sorry, you do not have the right to delete this post.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   721
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   722
0d28b7c10758 First commit
ymh
parents:
diff changeset
   723
		$location = get_post_meta($entry['ID'], '_wp_attached_file', true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   724
		$filetype = wp_check_filetype($location);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   725
0d28b7c10758 First commit
ymh
parents:
diff changeset
   726
		if(!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext']))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   727
			$this->internal_error(__('Error ocurred while accessing post metadata for file location.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   728
0d28b7c10758 First commit
ymh
parents:
diff changeset
   729
		// delete file
0d28b7c10758 First commit
ymh
parents:
diff changeset
   730
		@unlink($location);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   731
0d28b7c10758 First commit
ymh
parents:
diff changeset
   732
		// delete attachment
0d28b7c10758 First commit
ymh
parents:
diff changeset
   733
		$result = wp_delete_post($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   734
0d28b7c10758 First commit
ymh
parents:
diff changeset
   735
		if (!$result) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   736
			$this->internal_error(__('For some strange yet very annoying reason, this post could not be deleted.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   737
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   738
0d28b7c10758 First commit
ymh
parents:
diff changeset
   739
		log_app('function',"delete_attachment($postID). File '$location' deleted.");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   740
		$this->ok();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   741
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   742
0d28b7c10758 First commit
ymh
parents:
diff changeset
   743
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   744
	 * Retrieve attachment from post.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   745
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   746
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   747
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   748
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   749
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   750
	function get_file($postID) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   751
0d28b7c10758 First commit
ymh
parents:
diff changeset
   752
		// check for not found
0d28b7c10758 First commit
ymh
parents:
diff changeset
   753
		global $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   754
		$this->set_current_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   755
0d28b7c10758 First commit
ymh
parents:
diff changeset
   756
		// then whether user can edit the specific post
0d28b7c10758 First commit
ymh
parents:
diff changeset
   757
		if(!current_user_can('edit_post', $postID)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   758
			$this->auth_required(__('Sorry, you do not have the right to edit this post.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   759
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   760
0d28b7c10758 First commit
ymh
parents:
diff changeset
   761
		$location = get_post_meta($entry['ID'], '_wp_attached_file', true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   762
		$location = get_option ('upload_path') . '/' . $location;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   763
		$filetype = wp_check_filetype($location);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   764
0d28b7c10758 First commit
ymh
parents:
diff changeset
   765
		if(!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext']))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   766
			$this->internal_error(__('Error ocurred while accessing post metadata for file location.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   767
0d28b7c10758 First commit
ymh
parents:
diff changeset
   768
		status_header('200');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   769
		header('Content-Type: ' . $entry['post_mime_type']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   770
		header('Connection: close');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   771
0d28b7c10758 First commit
ymh
parents:
diff changeset
   772
		if ($fp = fopen($location, "rb")) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   773
			status_header('200');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   774
			header('Content-Type: ' . $entry['post_mime_type']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   775
			header('Connection: close');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   776
0d28b7c10758 First commit
ymh
parents:
diff changeset
   777
			while(!feof($fp)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   778
				echo fread($fp, 4096);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   779
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   780
0d28b7c10758 First commit
ymh
parents:
diff changeset
   781
			fclose($fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   782
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   783
			status_header ('404');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   784
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   785
0d28b7c10758 First commit
ymh
parents:
diff changeset
   786
		log_app('function',"get_file($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   787
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   788
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   789
0d28b7c10758 First commit
ymh
parents:
diff changeset
   790
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   791
	 * Upload file to blog and add attachment to post.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   792
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   793
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   794
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   795
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   796
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   797
	function put_file($postID) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   798
0d28b7c10758 First commit
ymh
parents:
diff changeset
   799
		// first check if user can upload
0d28b7c10758 First commit
ymh
parents:
diff changeset
   800
		if(!current_user_can('upload_files'))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   801
			$this->auth_required(__('You do not have permission to upload files.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   802
0d28b7c10758 First commit
ymh
parents:
diff changeset
   803
		// check for not found
0d28b7c10758 First commit
ymh
parents:
diff changeset
   804
		global $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   805
		$this->set_current_entry($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   806
0d28b7c10758 First commit
ymh
parents:
diff changeset
   807
		// then whether user can edit the specific post
0d28b7c10758 First commit
ymh
parents:
diff changeset
   808
		if(!current_user_can('edit_post', $postID)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   809
			$this->auth_required(__('Sorry, you do not have the right to edit this post.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   810
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   811
0d28b7c10758 First commit
ymh
parents:
diff changeset
   812
		$upload_dir = wp_upload_dir( );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   813
		$location = get_post_meta($entry['ID'], '_wp_attached_file', true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   814
		$filetype = wp_check_filetype($location);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   815
0d28b7c10758 First commit
ymh
parents:
diff changeset
   816
		$location = "{$upload_dir['basedir']}/{$location}";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   817
0d28b7c10758 First commit
ymh
parents:
diff changeset
   818
		if(!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext']))
0d28b7c10758 First commit
ymh
parents:
diff changeset
   819
			$this->internal_error(__('Error ocurred while accessing post metadata for file location.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   820
0d28b7c10758 First commit
ymh
parents:
diff changeset
   821
		$fp = fopen("php://input", "rb");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   822
		$localfp = fopen($location, "w+");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   823
		while(!feof($fp)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   824
			fwrite($localfp,fread($fp, 4096));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   825
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   826
		fclose($fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   827
		fclose($localfp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   828
0d28b7c10758 First commit
ymh
parents:
diff changeset
   829
		$ID = $entry['ID'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   830
		$pubtimes = $this->get_publish_time($entry->published);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   831
		$post_date = $pubtimes[0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   832
		$post_date_gmt = $pubtimes[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   833
		$pubtimes = $this->get_publish_time($parsed->updated);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   834
		$post_modified = $pubtimes[0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   835
		$post_modified_gmt = $pubtimes[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   836
0d28b7c10758 First commit
ymh
parents:
diff changeset
   837
		$post_data = compact('ID', 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   838
		$result = wp_update_post($post_data);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   839
0d28b7c10758 First commit
ymh
parents:
diff changeset
   840
		if (!$result) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   841
			$this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   842
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   843
0d28b7c10758 First commit
ymh
parents:
diff changeset
   844
		wp_update_attachment_metadata( $postID, wp_generate_attachment_metadata( $postID, $location ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   845
0d28b7c10758 First commit
ymh
parents:
diff changeset
   846
		log_app('function',"put_file($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   847
		$this->ok();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   848
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   849
0d28b7c10758 First commit
ymh
parents:
diff changeset
   850
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   851
	 * Retrieve entries URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   852
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   853
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   854
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   855
	 * @param int $page Page ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   856
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   857
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   858
	function get_entries_url($page = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   859
		if ( isset($GLOBALS['post_type']) && ( $GLOBALS['post_type'] == 'attachment' ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   860
			$path = $this->MEDIA_PATH;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   861
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   862
			$path = $this->ENTRIES_PATH;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   863
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   864
		$url = $this->app_base . $path;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   865
		if(isset($page) && is_int($page)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   866
			$url .= "/$page";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   867
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   868
		return $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   869
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   870
0d28b7c10758 First commit
ymh
parents:
diff changeset
   871
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   872
	 * Display entries URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   873
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   874
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   875
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   876
	 * @param int $page Page ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   877
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   878
	function the_entries_url($page = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   879
		echo $this->get_entries_url($page);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   880
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   881
0d28b7c10758 First commit
ymh
parents:
diff changeset
   882
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   883
	 * Retrieve categories URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   884
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   885
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   886
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   887
	 * @param mixed $deprecated Optional, not used.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   888
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   889
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   890
	function get_categories_url($deprecated = '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   891
		return $this->app_base . $this->CATEGORIES_PATH;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   892
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   893
0d28b7c10758 First commit
ymh
parents:
diff changeset
   894
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   895
	 * Display category URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   896
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   897
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   898
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   899
	function the_categories_url() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   900
		echo $this->get_categories_url();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   901
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   902
0d28b7c10758 First commit
ymh
parents:
diff changeset
   903
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   904
	 * Retrieve attachment URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   905
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   906
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   907
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   908
	 * @param int $page Page ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   909
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   910
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   911
	function get_attachments_url($page = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   912
		$url = $this->app_base . $this->MEDIA_PATH;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   913
		if(isset($page) && is_int($page)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   914
			$url .= "/$page";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   915
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   916
		return $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   917
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   918
0d28b7c10758 First commit
ymh
parents:
diff changeset
   919
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   920
	 * Display attachment URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   921
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   922
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   923
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   924
	 * @param int $page Page ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   925
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   926
	function the_attachments_url($page = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   927
		echo $this->get_attachments_url($page);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   928
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   929
0d28b7c10758 First commit
ymh
parents:
diff changeset
   930
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   931
	 * Retrieve service URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   932
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   933
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   934
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   935
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   936
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   937
	function get_service_url() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   938
		return $this->app_base . $this->SERVICE_PATH;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   939
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   940
0d28b7c10758 First commit
ymh
parents:
diff changeset
   941
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   942
	 * Retrieve entry URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   943
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   944
	 * @since 2.7.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   945
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   946
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   947
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   948
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   949
	function get_entry_url($postID = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   950
		if(!isset($postID)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   951
			global $post;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   952
			$postID = (int) $post->ID;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   953
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   954
0d28b7c10758 First commit
ymh
parents:
diff changeset
   955
		$url = $this->app_base . $this->ENTRY_PATH . "/$postID";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   956
0d28b7c10758 First commit
ymh
parents:
diff changeset
   957
		log_app('function',"get_entry_url() = $url");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   958
		return $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   959
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   960
0d28b7c10758 First commit
ymh
parents:
diff changeset
   961
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   962
	 * Display entry URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   963
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   964
	 * @since 2.7.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   965
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   966
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   967
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   968
	function the_entry_url($postID = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   969
		echo $this->get_entry_url($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   970
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   971
0d28b7c10758 First commit
ymh
parents:
diff changeset
   972
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   973
	 * Retrieve media URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   974
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   975
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   976
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   977
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   978
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   979
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   980
	function get_media_url($postID = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   981
		if(!isset($postID)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   982
			global $post;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   983
			$postID = (int) $post->ID;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   984
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   985
0d28b7c10758 First commit
ymh
parents:
diff changeset
   986
		$url = $this->app_base . $this->MEDIA_SINGLE_PATH ."/file/$postID";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   987
0d28b7c10758 First commit
ymh
parents:
diff changeset
   988
		log_app('function',"get_media_url() = $url");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   989
		return $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   990
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   991
0d28b7c10758 First commit
ymh
parents:
diff changeset
   992
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   993
	 * Display the media URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   994
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   995
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   996
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   997
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   998
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   999
	function the_media_url($postID = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1000
		echo $this->get_media_url($postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1001
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1002
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1003
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1004
	 * Set the current entry to post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1005
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1006
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1007
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1008
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1009
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1010
	function set_current_entry($postID) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1011
		global $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1012
		log_app('function',"set_current_entry($postID)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1013
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1014
		if(!isset($postID)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1015
			// $this->bad_request();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1016
			$this->not_found();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1017
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1018
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1019
		$entry = wp_get_single_post($postID,ARRAY_A);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1020
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1021
		if(!isset($entry) || !isset($entry['ID']))
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1022
			$this->not_found();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1023
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1024
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1025
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1026
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1027
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1028
	 * Display posts XML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1029
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1030
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1031
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1032
	 * @param int $page Optional. Page ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1033
	 * @param string $post_type Optional, default is 'post'. Post Type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1034
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1035
	function get_posts($page = 1, $post_type = 'post') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1036
			log_app('function',"get_posts($page, '$post_type')");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1037
			$feed = $this->get_feed($page, $post_type);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1038
			$this->output($feed);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1039
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1040
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1041
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1042
	 * Display attachment XML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1043
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1044
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1045
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1046
	 * @param int $page Page ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1047
	 * @param string $post_type Optional, default is 'attachment'. Post type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1048
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1049
	function get_attachments($page = 1, $post_type = 'attachment') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1050
		log_app('function',"get_attachments($page, '$post_type')");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1051
		$GLOBALS['post_type'] = $post_type;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1052
		$feed = $this->get_feed($page, $post_type);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1053
		$this->output($feed);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1054
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1055
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1056
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1057
	 * Retrieve feed XML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1058
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1059
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1060
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1061
	 * @param int $page Page ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1062
	 * @param string $post_type Optional, default is post. Post type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1063
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1064
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1065
	function get_feed($page = 1, $post_type = 'post') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1066
		global $post, $wp, $wp_query, $posts, $wpdb, $blog_id;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1067
		log_app('function',"get_feed($page, '$post_type')");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1068
		ob_start();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1069
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1070
		$this->ENTRY_PATH = $post_type;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1071
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1072
		if(!isset($page)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1073
			$page = 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1074
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1075
		$page = (int) $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1076
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1077
		$count = get_option('posts_per_rss');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1078
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1079
		wp('posts_per_page=' . $count . '&offset=' . ($count * ($page-1) . '&orderby=modified'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1080
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1081
		$post = $GLOBALS['post'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1082
		$posts = $GLOBALS['posts'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1083
		$wp = $GLOBALS['wp'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1084
		$wp_query = $GLOBALS['wp_query'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1085
		$wpdb = $GLOBALS['wpdb'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1086
		$blog_id = (int) $GLOBALS['blog_id'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1087
		log_app('function',"query_posts(# " . print_r($wp_query, true) . "#)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1088
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1089
		log_app('function',"total_count(# $wp_query->max_num_pages #)");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1090
		$last_page = $wp_query->max_num_pages;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1091
		$next_page = (($page + 1) > $last_page) ? NULL : $page + 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1092
		$prev_page = ($page - 1) < 1 ? NULL : $page - 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1093
		$last_page = ((int)$last_page == 1 || (int)$last_page == 0) ? NULL : (int) $last_page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1094
		$self_page = $page > 1 ? $page : NULL;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1095
?><feed xmlns="<?php echo $this->ATOM_NS ?>" xmlns:app="<?php echo $this->ATOMPUB_NS ?>" xml:lang="<?php echo get_option('rss_language'); ?>">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1096
<id><?php $this->the_entries_url() ?></id>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1097
<updated><?php echo mysql2date('Y-m-d\TH:i:s\Z', get_lastpostmodified('GMT'), false); ?></updated>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1098
<title type="text"><?php bloginfo_rss('name') ?></title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1099
<subtitle type="text"><?php bloginfo_rss("description") ?></subtitle>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1100
<link rel="first" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url() ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1101
<?php if(isset($prev_page)): ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1102
<link rel="previous" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($prev_page) ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1103
<?php endif; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1104
<?php if(isset($next_page)): ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1105
<link rel="next" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($next_page) ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1106
<?php endif; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1107
<link rel="last" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($last_page) ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1108
<link rel="self" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($self_page) ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1109
<rights type="text">Copyright <?php echo date('Y'); ?></rights>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1110
<?php the_generator( 'atom' ); ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1111
<?php if ( have_posts() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1112
			while ( have_posts() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1113
				the_post();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1114
				$this->echo_entry();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1115
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1116
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1117
?></feed>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1118
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1119
		$feed = ob_get_contents();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1120
		ob_end_clean();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1121
		return $feed;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1122
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1123
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1124
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1125
	 * Display entry XML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1126
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1127
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1128
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1129
	 * @param int $postID Post ID.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1130
	 * @param string $post_type Optional, default is post. Post type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1131
	 * @return string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1132
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1133
	function get_entry($postID, $post_type = 'post') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1134
		log_app('function',"get_entry($postID, '$post_type')");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1135
		ob_start();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1136
		switch($post_type) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1137
			case 'post':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1138
				$varname = 'p';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1139
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1140
			case 'attachment':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1141
				$this->ENTRY_PATH = 'attachment';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1142
				$varname = 'attachment_id';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1143
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1144
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1145
		query_posts($varname . '=' . $postID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1146
		if ( have_posts() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1147
			while ( have_posts() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1148
				the_post();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1149
				$this->echo_entry();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1150
				log_app('$post',print_r($GLOBALS['post'],true));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1151
				$entry = ob_get_contents();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1152
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1153
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1154
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1155
		ob_end_clean();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1156
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1157
		log_app('get_entry returning:',$entry);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1158
		return $entry;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1159
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1160
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1161
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1162
	 * Display post content XML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1163
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1164
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1165
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1166
	function echo_entry() { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1167
<entry xmlns="<?php echo $this->ATOM_NS ?>"
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1168
       xmlns:app="<?php echo $this->ATOMPUB_NS ?>" xml:lang="<?php echo get_option('rss_language'); ?>">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1169
	<id><?php the_guid($GLOBALS['post']->ID); ?></id>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1170
<?php list($content_type, $content) = prep_atom_text_construct(get_the_title()); ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1171
	<title type="<?php echo $content_type ?>"><?php echo $content ?></title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1172
	<updated><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></updated>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1173
	<published><?php echo get_post_time('Y-m-d\TH:i:s\Z', true); ?></published>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1174
	<app:edited><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></app:edited>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1175
	<app:control>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1176
		<app:draft><?php echo ($GLOBALS['post']->post_status == 'draft' ? 'yes' : 'no') ?></app:draft>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1177
	</app:control>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1178
	<author>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1179
		<name><?php the_author()?></name>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1180
<?php if ( get_the_author_meta('url') && get_the_author_meta('url') != 'http://' ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1181
		<uri><?php the_author_meta('url') ?></uri>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1182
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1183
	</author>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1184
<?php if($GLOBALS['post']->post_type == 'attachment') { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1185
	<link rel="edit-media" href="<?php $this->the_media_url() ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1186
	<content type="<?php echo $GLOBALS['post']->post_mime_type ?>" src="<?php the_guid(); ?>"/>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1187
<?php } else { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1188
	<link href="<?php the_permalink_rss() ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1189
<?php if ( strlen( $GLOBALS['post']->post_content ) ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1190
list($content_type, $content) = prep_atom_text_construct(get_the_content()); ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1191
	<content type="<?php echo $content_type ?>"><?php echo $content ?></content>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1192
<?php endif; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1193
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1194
	<link rel="edit" href="<?php $this->the_entry_url() ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1195
	<?php the_category_rss( 'atom' ); ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1196
<?php list($content_type, $content) = prep_atom_text_construct(get_the_excerpt()); ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1197
	<summary type="<?php echo $content_type ?>"><?php echo $content ?></summary>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1198
</entry>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1199
<?php }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1200
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1201
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1202
	 * Set 'OK' (200) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1203
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1204
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1205
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1206
	function ok() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1207
		log_app('Status','200: OK');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1208
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1209
		status_header('200');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1210
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1211
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1212
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1213
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1214
	 * Set 'No Content' (204) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1215
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1216
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1217
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1218
	function no_content() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1219
		log_app('Status','204: No Content');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1220
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1221
		status_header('204');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1222
		echo "Moved to Trash.";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1223
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1224
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1225
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1226
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1227
	 * Display 'Internal Server Error' (500) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1228
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1229
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1230
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1231
	 * @param string $msg Optional. Status string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1232
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1233
	function internal_error($msg = 'Internal Server Error') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1234
		log_app('Status','500: Server Error');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1235
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1236
		status_header('500');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1237
		echo $msg;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1238
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1239
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1240
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1241
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1242
	 * Set 'Bad Request' (400) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1243
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1244
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1245
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1246
	function bad_request() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1247
		log_app('Status','400: Bad Request');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1248
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1249
		status_header('400');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1250
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1251
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1252
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1253
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1254
	 * Set 'Length Required' (411) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1255
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1256
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1257
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1258
	function length_required() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1259
		log_app('Status','411: Length Required');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1260
		header("HTTP/1.1 411 Length Required");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1261
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1262
		status_header('411');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1263
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1264
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1265
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1266
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1267
	 * Set 'Unsupported Media Type' (415) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1268
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1269
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1270
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1271
	function invalid_media() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1272
		log_app('Status','415: Unsupported Media Type');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1273
		header("HTTP/1.1 415 Unsupported Media Type");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1274
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1275
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1276
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1277
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1278
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1279
	 * Set 'Forbidden' (403) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1280
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1281
	 * @since 2.6.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1282
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1283
	function forbidden($reason='') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1284
		log_app('Status','403: Forbidden');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1285
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1286
		status_header('403');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1287
		echo $reason;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1288
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1289
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1290
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1291
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1292
	 * Set 'Not Found' (404) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1293
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1294
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1295
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1296
	function not_found() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1297
		log_app('Status','404: Not Found');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1298
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1299
		status_header('404');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1300
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1301
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1302
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1303
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1304
	 * Set 'Not Allowed' (405) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1305
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1306
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1307
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1308
	function not_allowed($allow) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1309
		log_app('Status','405: Not Allowed');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1310
		header('Allow: ' . join(',', $allow));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1311
		status_header('405');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1312
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1313
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1314
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1315
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1316
	 * Display Redirect (302) content and set status headers.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1317
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1318
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1319
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1320
	function redirect($url) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1321
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1322
		log_app('Status','302: Redirect');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1323
		$escaped_url = esc_attr($url);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1324
		$content = <<<EOD
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1325
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1326
<html>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1327
  <head>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1328
    <title>302 Found</title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1329
  </head>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1330
<body>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1331
  <h1>Found</h1>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1332
  <p>The document has moved <a href="$escaped_url">here</a>.</p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1333
  </body>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1334
</html>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1335
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1336
EOD;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1337
		header('HTTP/1.1 302 Moved');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1338
		header('Content-Type: text/html');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1339
		header('Location: ' . $url);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1340
		echo $content;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1341
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1342
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1343
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1344
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1345
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1346
	 * Set 'Client Error' (400) status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1347
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1348
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1349
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1350
	function client_error($msg = 'Client Error') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1351
		log_app('Status','400: Client Error');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1352
		header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1353
		status_header('400');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1354
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1355
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1356
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1357
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1358
	 * Set created status headers (201).
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1359
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1360
	 * Sets the 'content-type', 'content-location', and 'location'.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1361
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1362
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1363
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1364
	function created($post_ID, $content, $post_type = 'post') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1365
		log_app('created()::$post_ID',"$post_ID, $post_type");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1366
		$edit = $this->get_entry_url($post_ID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1367
		switch($post_type) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1368
			case 'post':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1369
				$ctloc = $this->get_entry_url($post_ID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1370
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1371
			case 'attachment':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1372
				$edit = $this->app_base . "attachments/$post_ID";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1373
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1374
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1375
		header("Content-Type: $this->ATOM_CONTENT_TYPE");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1376
		if(isset($ctloc))
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1377
			header('Content-Location: ' . $ctloc);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1378
		header('Location: ' . $edit);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1379
		status_header('201');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1380
		echo $content;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1381
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1382
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1383
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1384
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1385
	 * Set 'Auth Required' (401) headers.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1386
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1387
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1388
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1389
	 * @param string $msg Status header content and HTML content.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1390
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1391
	function auth_required($msg) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1392
		log_app('Status','401: Auth Required');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1393
		nocache_headers();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1394
		header('WWW-Authenticate: Basic realm="WordPress Atom Protocol"');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1395
		header("HTTP/1.1 401 $msg");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1396
		header('Status: 401 ' . $msg);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1397
		header('Content-Type: text/html');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1398
		$content = <<<EOD
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1399
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1400
<html>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1401
  <head>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1402
    <title>401 Unauthorized</title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1403
  </head>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1404
<body>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1405
    <h1>401 Unauthorized</h1>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1406
    <p>$msg</p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1407
  </body>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1408
</html>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1409
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1410
EOD;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1411
		echo $content;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1412
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1413
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1414
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1415
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1416
	 * Display XML and set headers with content type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1417
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1418
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1419
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1420
	 * @param string $xml Display feed content.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1421
	 * @param string $ctype Optional, default is 'atom+xml'. Feed content type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1422
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1423
	function output($xml, $ctype = 'application/atom+xml') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1424
			status_header('200');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1425
			$xml = '<?xml version="1.0" encoding="' . strtolower(get_option('blog_charset')) . '"?>'."\n".$xml;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1426
			header('Connection: close');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1427
			header('Content-Length: '. strlen($xml));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1428
			header('Content-Type: ' . $ctype);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1429
			header('Content-Disposition: attachment; filename=atom.xml');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1430
			header('Date: '. date('r'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1431
			if($this->do_output)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1432
				echo $xml;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1433
			log_app('function', "output:\n$xml");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1434
			exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1435
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1436
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1437
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1438
	 * Sanitize content for database usage.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1439
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1440
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1441
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1442
	 * @param array $array Sanitize array and multi-dimension array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1443
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1444
	function escape(&$array) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1445
		global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1446
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1447
		foreach ($array as $k => $v) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1448
				if (is_array($v)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1449
						$this->escape($array[$k]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1450
				} else if (is_object($v)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1451
						//skip
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1452
				} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1453
						$array[$k] = $wpdb->escape($v);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1454
				}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1455
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1456
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1457
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1458
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1459
	 * Access credential through various methods and perform login.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1460
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1461
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1462
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1463
	 * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1464
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1465
	function authenticate() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1466
		log_app("authenticate()",print_r($_ENV, true));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1467
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1468
		// if using mod_rewrite/ENV hack
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1469
		// http://www.besthostratings.com/articles/http-auth-php-cgi.html
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1470
		if(isset($_SERVER['HTTP_AUTHORIZATION'])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1471
			list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) =
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1472
				explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1473
		} else if (isset($_SERVER['REDIRECT_REMOTE_USER'])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1474
			// Workaround for setups that do not forward HTTP_AUTHORIZATION
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1475
			// See http://trac.wordpress.org/ticket/7361
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1476
			list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) =
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1477
				explode(':', base64_decode(substr($_SERVER['REDIRECT_REMOTE_USER'], 6)));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1478
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1479
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1480
		// If Basic Auth is working...
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1481
		if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1482
			log_app("Basic Auth",$_SERVER['PHP_AUTH_USER']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1483
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1484
			$user = wp_authenticate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1485
			if ( $user && !is_wp_error($user) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1486
				wp_set_current_user($user->ID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1487
				log_app("authenticate()", $user->user_login);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1488
				return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1489
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1490
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1491
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1492
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1493
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1494
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1495
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1496
	 * Retrieve accepted content types.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1497
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1498
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1499
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1500
	 * @param array $types Optional. Content Types.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1501
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1502
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1503
	function get_accepted_content_type($types = null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1504
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1505
		if(!isset($types)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1506
			$types = $this->media_content_types;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1507
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1508
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1509
		if(!isset($_SERVER['CONTENT_LENGTH']) || !isset($_SERVER['CONTENT_TYPE'])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1510
			$this->length_required();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1511
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1512
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1513
		$type = $_SERVER['CONTENT_TYPE'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1514
		list($type,$subtype) = explode('/',$type);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1515
		list($subtype) = explode(";",$subtype); // strip MIME parameters
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1516
		log_app("get_accepted_content_type", "type=$type, subtype=$subtype");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1517
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1518
		foreach($types as $t) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1519
			list($acceptedType,$acceptedSubtype) = explode('/',$t);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1520
			if($acceptedType == '*' || $acceptedType == $type) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1521
				if($acceptedSubtype == '*' || $acceptedSubtype == $subtype)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1522
					return $type . "/" . $subtype;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1523
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1524
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1525
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1526
		$this->invalid_media();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1527
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1528
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1529
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1530
	 * Process conditionals for posts.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1531
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1532
	 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1533
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1534
	function process_conditionals() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1535
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1536
		if(empty($this->params)) return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1537
		if($_SERVER['REQUEST_METHOD'] == 'DELETE') return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1538
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1539
		switch($this->params[0]) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1540
			case $this->ENTRY_PATH:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1541
				global $post;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1542
				$post = wp_get_single_post($this->params[1]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1543
				$wp_last_modified = get_post_modified_time('D, d M Y H:i:s', true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1544
				$post = NULL;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1545
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1546
			case $this->ENTRIES_PATH:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1547
				$wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastpostmodified('GMT'), 0).' GMT';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1548
				break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1549
			default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1550
				return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1551
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1552
		$wp_etag = md5($wp_last_modified);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1553
		@header("Last-Modified: $wp_last_modified");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1554
		@header("ETag: $wp_etag");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1555
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1556
		// Support for Conditional GET
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1557
		if (isset($_SERVER['HTTP_IF_NONE_MATCH']))
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1558
			$client_etag = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1559
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1560
			$client_etag = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1561
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1562
		$client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1563
		// If string is empty, return 0. If not, attempt to parse into a timestamp
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1564
		$client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1565
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1566
		// Make a timestamp for our most recent modification...
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1567
		$wp_modified_timestamp = strtotime($wp_last_modified);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1568
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1569
		if ( ($client_last_modified && $client_etag) ?
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1570
		(($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1571
		(($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1572
			status_header( 304 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1573
			exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1574
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1575
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1576
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1577
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1578
	 * Convert RFC3339 time string to timestamp.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1579
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1580
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1581
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1582
	 * @param string $str String to time.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1583
	 * @return bool|int false if format is incorrect.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1584
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1585
	function rfc3339_str2time($str) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1586
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1587
		$match = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1588
		if(!preg_match("/(\d{4}-\d{2}-\d{2})T(\d{2}\:\d{2}\:\d{2})\.?\d{0,3}(Z|[+-]+\d{2}\:\d{2})/", $str, $match))
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1589
			return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1590
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1591
		if($match[3] == 'Z')
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1592
			$match[3] == '+0000';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1593
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1594
		return strtotime($match[1] . " " . $match[2] . " " . $match[3]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1595
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1596
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1597
	/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1598
	 * Retrieve published time to display in XML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1599
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1600
	 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1601
	 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1602
	 * @param string $published Time string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1603
	 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1604
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1605
	function get_publish_time($published) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1606
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1607
		$pubtime = $this->rfc3339_str2time($published);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1608
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1609
		if(!$pubtime) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1610
			return array(current_time('mysql'),current_time('mysql',1));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1611
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1612
			return array(date("Y-m-d H:i:s", $pubtime), gmdate("Y-m-d H:i:s", $pubtime));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1613
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1614
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1615
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1616
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1617
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1618
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1619
 * AtomServer
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1620
 * @var AtomServer
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1621
 * @global object $server
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1622
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1623
$server = new AtomServer();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1624
$server->handle_request();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1625
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1626
?>