/** * Accepts an Atom entry for insertion as a new post. */ public function post_collection() { if ($this->is_auth(true)) { $bxml = file_get_contents('php://input'); } $xml = new SimpleXMLElement($bxml); $post = new Post(); Plugins::act('atom_post_collection', $xml, $post, $this->handler_vars); if ((string) $xml->title != '') { $post->title = $xml->title; } if ((string) $xml->id != '') { $post->guid = $xml->id; } if ((string) $xml->content != '') { $post->content = (string) $xml->content; } if ((string) $xml->pubdate != '') { $post->pubdate = (string) $xml->pubdate; } // Save categories as tags $atom_ns = $xml->children('http://www.w3.org/2005/Atom'); $categories = $atom_ns->category; if (!empty($categories)) { $terms = array(); foreach ($categories as $category) { $category_attrs = $category->attributes(); $terms[] = (string) $category_attrs['term']; } $post->tags = $terms; } if (isset($_SERVER['HTTP_SLUG'])) { $post->slug = $_SERVER['HTTP_SLUG']; } // Check if it's a draft (using XPath because Namespaces are easier than with SimpleXML) $xml->registerXPathNamespace('app', 'http://www.w3.org/2007/app'); $draft = $xml->xpath('//app:control/app:draft'); if (is_array($draft) && (string) $draft[0] == 'yes') { $post->status = Post::status('draft'); } else { $post->status = Post::status('published'); } $post->user_id = $this->user->id; $post->insert(); header('HTTP/1.1 201 Created', true, 201); header('Status: 201 Created'); header('Location: ' . URL::get('atom_entry', array('slug' => $post->slug))); $this->get_entry($post->slug); }