function testStructuredBloggingParsing() { // make sure we can correctly parse SB XML $mic = new SBMicroContent(); $mic->set_mc_type("review/localservice"); $this->assertContains('/review/subject/location/@country', $mic->get_mc_editor()); // make sure all MCD files contain a title field foreach (glob(SB_MC_LOCATION . '/*.xml') as $mcd_fn) { $dom = new DOMDocument(); $this->assertTrue($dom->load($mcd_fn), "failed to load {$mcd_fn} into a DOM object - bad xml?"); // make sure it's valid xml $xp = new DOMXPath($dom); $mc_type = $xp->query("/micro-content/@type")->item(0)->nodeValue; $mc_type_guess = str_replace("-", "/", basename($mcd_fn, ".xml")); if (strpos($mc_type_guess, "/") === FALSE) { $mc_type_guess .= "/generic"; } $nodes = $xp->query("/micro-content/display[@media='meta/title']"); $this->assertEquals(1, $nodes->length, "{$mcd_fn} is missing a <display media=\"meta/title\"> element"); foreach ($xp->query("field/@content", $nodes->item(0)) as $field) { // echo " field: $field->nodeValue\n"; } // echo "guessed mc type: $mc_type_guess; parsed mc type: $mc_type; title field: $title_field\n"; $this->assertEquals($mc_type, $mc_type_guess, "microcontent types (real={$mc_type}, guess={$mc_type_guess}) do not agree"); } }
function getContent() { global $current_theme_path, $base_url; $mc = new SBMicroContent(); $mc->set_mc_type($this->sb_mc_type); $edit = $instance = null; // if we've clicked an 'edit' button, parse the existing // structured content and pre-fill the form. note that we don't // do this on POST, as in that case all the data we want is in // $_POST. if ($this->content_id && $_SERVER['REQUEST_METHOD'] == "GET") { $mc->load($this->content_id); $body = $mc->body; $edit = "edit"; $instance = $mc->parse_structured_content($body); } $editor = $mc->get_mc_editor($edit, $instance); return $editor; }
function save_post($cid = NULL, $ccid = NULL, $is_album = FALSE, $display_on = 1) { global $user, $network_info; $extra = unserialize($network_info->extra); $micro_content_post = new SBMicroContent(); $micro_content_post->set_mc_type($_REQUEST['sb_mc_type']); $content = $micro_content_post->format_structured_content(); $micro_content_post->body = $content; $micro_content_post->author_id = $_SESSION['user']['id']; $micro_content_post->allow_comments = 1; $micro_content_post->trackbacks = $_REQUEST['trackback']; $micro_content_post->is_active = 1; if ($cid) { $micro_content_post->content_id = $cid; $condition = array('content_id' => $cid); $is_active = ACTIVE; if ($extra['network_content_moderation'] == NET_YES) { $content = Content::load_all_content_for_moderation(NULL, $condition); if (!empty($content)) { $is_active = $content[0]['is_active']; } } $micro_content_post->is_active = $is_active; } if (!$ccid) { //independent post which is not part of any contentcollection $ccid = -1; } $micro_content_post->parent_collection_id = $ccid; $micro_content_post->display_on = $display_on; $sb_content = array(); $sb_content = SBMicroContent::get_sbtype_id($_REQUEST['sb_mc_type'], $with_name = true); $micro_content_post->sbtype_id = $sb_content["sbtype_id"]; $micro_content_post->title = $_POST[$sb_content["titlefield"]]; //echo '<pre>';print_r($content); $micro_content_post->save(); $return_array = array('title' => $_POST[$sb_content["titlefield"]], 'body' => $content, 'content_id' => $micro_content_post->content_id); if ($ccid != -1 && !$is_album) { // Code for checking groups with moderated content. //fix me change it for using ContentCollection::get_collection_type() $collection = ContentCollection::load_collection($micro_content_post->parent_collection_id, $micro_content_post->author_id); //$collection->assert_user_access($_SESSION['user']['id']); if ($collection->is_moderated) { $Group = new Group(); $Group->collection_id = $micro_content_post->parent_collection_id; $Group->moderate_content($micro_content_post->content_id); $return_array['is_moderated'] = 1; } } $permalink_cid = $micro_content_post->content_id; $content_author_image = uihelper_resize_mk_user_img($user->picture, 80, 80, 'alt="' . $user->first_name . '" align="left" style="padding: 0px 12px 12px 0px;"'); $params['cid'] = $permalink_cid; $params['first_name'] = $user->first_name; $params['user_id'] = $user->user_id; $params['user_image'] = $content_author_image; $params['content_title'] = $micro_content_post->title; $params['network_name'] = $network_info->name; auto_email_notification('content_posted', $params); if ($_POST['route_to_pa_home'] == 1) { auto_email_notification('content_posted_to_comm_blog', $params); } if ($extra['network_content_moderation'] == NET_YES && $network_info->owner_id != $user->user_id) { Network::moderate_network_content(-1, $permalink_cid); // -1 for contents; not a part of any collection $return_array['msg'] = 1004; } return $return_array; }
function getContent() { $mc = new SBMicroContent(); $mc->set_mc_type($this->sb_mc_type); $edit = $instance = null; // if we've clicked an 'edit' button, parse the existing // structured content and pre-fill the form. note that we don't // do this on POST, as in that case all the data we want is in // $_POST. if ($this->content_id && $_SERVER['REQUEST_METHOD'] == "GET") { $mc->load($this->content_id); $body = $mc->body; $edit = "edit"; $instance = $mc->parse_structured_content($body); if (!$instance) { throw new PAException(GENERAL_SOME_ERROR, "Failed to parse structured blogging content in content id {$this->content_id}"); } } $editor = $mc->get_mc_editor($edit, $instance); return $editor; }