/** * load the related item * * @see shared/anchor.php * * @param int the id of the record to load * @param boolean TRUE to always fetch a fresh instance, FALSE to enable cache */ function load_by_id($id, $mutable = FALSE) { $this->item = Articles::get($id, $mutable); }
load_skin('home'); } // the menu bar may be made of sections if (isset($context['root_sections_at_home']) && $context['root_sections_at_home'] != 'none' && isset($context['root_sections_layout']) && $context['root_sections_layout'] == 'menu') { // default number of sections to list if (!isset($context['root_sections_count_at_home']) || $context['root_sections_count_at_home'] < 1) { $context['root_sections_count_at_home'] = 5; } if ($items = Sections::list_by_title_for_anchor(NULL, 0, $context['root_sections_count_at_home'], 'menu')) { $context['page_menu'] = $items; } } // load the cover page if ((!isset($context['root_cover_at_home']) || $context['root_cover_at_home'] != 'none') && $context['master_host'] == $context['main_host']) { // look for a named page if ($cover_page = Articles::get('cover')) { } elseif ($anchor = Sections::lookup('covers')) { $cover_page =& Articles::get_newest_for_anchor($anchor); } // compute page title -- $context['page_title'] if (isset($cover_page['title']) && (!isset($context['root_cover_at_home']) || $context['root_cover_at_home'] == 'full')) { $context['page_title'] = $cover_page['title']; } // layout content of cover page -- may be changed in skin.php if necessary if (isset($cover_page['id'])) { $context['text'] .= Skin::layout_cover_article($cover_page); } } // the prefix hook if (is_callable(array('Hooks', 'include_scripts'))) { $context['text'] .= Hooks::include_scripts('index.php#prefix');
/** * create a page out of a textual entity * * If a target is provided, it is extended with the text of this entity. * Else if the anchor is an article, a comment is created. Otherwise an article is created. * * @param array of entity attributes * @param string the textual entity to process * @param array poster attributes * @param string an optional anchor (e.g., 'article:123') * @param string reference of the object to be extended, if any * @return string reference to the created or updated object, or NULL */ public static function submit_page($entity_headers, $text, $user, $anchor = NULL, $target = NULL) { global $context; // retrieve queue parameters list($server, $account, $password, $allowed, $match, $section, $options, $hooks, $prefix, $suffix) = $context['mail_queue']; // preserve breaks $text = preg_replace('/\\s*<(br|div|h|p)/is', "\n\n<\$1", $text); // suppress dangerous html tags $text = strip_tags($text, $context['users_allowed_tags']); // trim white spaces while (TRUE) { $text = trim($text, " \t\r\n"); if (!strncmp($text, '<br>', 4)) { $text = substr($text, 4); } elseif (!strncmp($text, '<br/>', 5)) { $text = substr($text, 5); } elseif (!strncmp($text, '<br />', 6)) { $text = substr($text, 6); } else { break; } } // parse article content include_once $context['path_to_root'] . 'articles/article.php'; $article = new Article(); $entry_fields = array(); $entry_fields = $article->parse($text, $entry_fields); // trim the header if ($prefix) { $tokens = explode($prefix, $entry_fields['description']); if (isset($tokens[1])) { $entry_fields['description'] = $tokens[1]; } else { $entry_fields['description'] = $tokens[0]; } } // trim the signature if ($suffix) { list($entry_fields['description'], $dropped) = explode($suffix, $entry_fields['description']); } // strip extra text $entry_fields['description'] = trim(preg_replace('/\\(See attached file: [^\\)]+?\\)/', '', $entry_fields['description'])); // anchor this item to something $entry_fields['anchor'] = $anchor; // make a title if (!isset($entry_fields['title'])) { $entry_fields['title'] = $context['mail_subject']; } // message creation stamp $entry_fields['create_date'] = gmstrftime('%Y-%m-%d %H:%M:%S', strtotime($context['mail_date'])); if (!isset($entry_fields['create_name'])) { $entry_fields['create_name'] = $user['nick_name']; } if (!isset($entry_fields['create_id'])) { $entry_fields['create_id'] = $user['id']; } if (!isset($entry_fields['create_address'])) { $entry_fields['create_address'] = $user['email']; } // message edition stamp $entry_fields['edit_date'] = gmstrftime('%Y-%m-%d %H:%M:%S', time()); if (!isset($entry_fields['edit_name'])) { $entry_fields['edit_name'] = $user['nick_name']; } if (!isset($entry_fields['edit_id'])) { $entry_fields['edit_id'] = $user['id']; } if (!isset($entry_fields['edit_address'])) { $entry_fields['edit_address'] = $user['email']; } // we have to extend an existing article --this entity is mutable if ($target && !strncmp($target, 'article:', 8) && ($article = Articles::get(substr($target, 8), TRUE))) { // append the text to article description field $fields = array(); $fields['id'] = $article['id']; $fields['description'] = $article['description'] . $entry_fields['description']; $fields['silent'] = TRUE; Articles::put_attributes($fields); return $target; // we have to extend an existing comment --this entity is mutable } elseif ($target && !strncmp($target, 'comment:', 8) && ($comment = Comments::get(substr($target, 8), TRUE))) { // append the text to comment description field $comment['description'] .= $entry_fields['description']; Comments::post($comment); return $target; // we have to comment an existing page } elseif (!strncmp($anchor, 'article:', 8)) { // insert comment in the database if (!($entry_fields['id'] = Comments::post($entry_fields))) { Logger::remember('agents/messages.php: ' . Logger::error_pop()); return NULL; } // debug, if required to do so if ($context['debug_messages'] == 'Y') { Logger::remember('agents/messages.php: Messages::submit_page() as a comment', $entry_fields, 'debug'); } // increment the post counter of the surfer Users::increment_posts($user['id']); // clear cache $parent = Anchors::get($entry_fields['anchor']); // touch the related anchor if (is_object($parent) && isset($entry_fields['id'])) { $parent->touch('comment:create', $entry_fields['id'], TRUE); } return 'comment:' . $entry_fields['id']; // create a new page } else { // publish automatically, if required to do so $section = Anchors::get($entry_fields['anchor']); if (isset($context['users_with_auto_publish']) && $context['users_with_auto_publish'] == 'Y' || preg_match('/\\bauto_publish\\b/i', $options) || is_object($section) && $section->has_option('auto_publish')) { $entry_fields['publish_date'] = gmstrftime('%Y-%m-%d %H:%M:%S', time()); if (!isset($entry_fields['publish_name'])) { $entry_fields['publish_name'] = $user['nick_name']; } if (!isset($entry_fields['publish_id'])) { $entry_fields['publish_id'] = $user['id']; } if (!isset($entry_fields['publish_address'])) { $entry_fields['publish_address'] = $user['email']; } } // ensure we are using ids instead of nicknames if (is_object($section)) { $entry_fields['anchor'] = $section->get_reference(); } // save in the database if (!($entry_fields['id'] = Articles::post($entry_fields))) { Logger::remember('agents/messages.php: ' . Logger::error_pop()); return NULL; } // debugging log if (isset($context['debug_messages']) && $context['debug_messages'] == 'Y') { $entry_fields['description'] = substr($entry_fields['description'], 0, 1024); Logger::remember('agents/messages.php: Messages::submit_page() as an article', $entry_fields, 'debug'); } // increment the post counter of the surfer Users::increment_posts($user['id']); // do whatever is necessary on page creation if (isset($entry_fields['publish_date']) && $entry_fields['publish_date'] > NULL_DATE) { Articles::finalize_publication($section, $entry_fields); } else { Articles::finalize_submission($section, $entry_fields); } // get the new item $article = Anchors::get($anchor); // if replies are allowed if (!preg_match('/\\bno_reply\\b/i', $options)) { // let the sender know about his post if (isset($entry_fields['publish_date']) && $entry_fields['publish_date'] > NULL_DATE) { $splash = i18n::s("The page received by e-mail has been successfully published. Please review it now to ensure that it reflects your mind."); } else { $splash = i18n::s("The page received by e-mail has been posted. Don't forget to read it online. Then click on the Publish command to make it publicly available."); } $message = '<p>' . $splash . '</p>' . '<p><a href="' . $context['url_to_home'] . $context['url_to_root'] . $article->get_url() . '">' . $article->get_title() . '</a></p>' . '<div>' . $article->get_teaser('basic') . '</div>' . '<p>' . i18n::c('Thank you for your contribution') . '</p>'; // enable threading $headers = Mailer::set_thread($section); // send a mail message Mailer::notify(NULL, $post_sender, 'Re: ' . $post_subject, $message, $headers); } // reference to the new page return 'article:' . $entry_fields['id']; } // job ends return NULL; }
/** * echo the site menu * * You can override this function into your skin */ public static function echo_menu() { global $context; // ensure normal conditions if (file_exists($context['path_to_root'] . 'parameters/switch.on') && is_callable(array('Articles', 'get')) && is_callable(array('Codes', 'beautify'))) { // use content of a named global page if ($item = Articles::get('menu')) { echo Skin::build_box(Codes::beautify_title($item['title']), Codes::beautify($item['description']), 'navigation', 'main_menu'); } } }
$fields['title'] = i18n::c('USTREAM broadcast'); $fields['introduction'] = i18n::c('Drive your audience to a USTREAM show. At the given date and time participants are invited to join the channel.'); $fields['options'] = 'edit_as_thread'; $fields['publish_date'] = gmstrftime('%Y-%m-%d %H:%M:%S'); $fields['thumbnail_url'] = $context['url_to_home'] . $context['url_to_root'] . 'skins/_reference/thumbnails/conference.gif'; $overlay = Overlay::bind('ustream_meeting'); $fields['overlay'] = $overlay->save(); $fields['overlay_id'] = $overlay->get_id(); if (Articles::post($fields)) { $text .= sprintf(i18n::s('A page "%s" has been created.'), $fields['title']) . BR . "\n"; } else { $text .= Logger::error_pop() . BR . "\n"; } } // 'wiki_template' article if (!Articles::get('wiki_template') && ($anchor = Sections::lookup('templates'))) { $fields = array(); $fields['anchor'] = $anchor; $fields['nick_name'] = 'wiki_template'; $fields['title'] = i18n::c('Wiki page'); $fields['introduction'] = i18n::c('Create an initial page and invite participants to follow-up. Modifications are saved, to allow for fall-back.'); $fields['options'] = 'edit_as_simple members_edit view_as_wiki'; $fields['publish_date'] = gmstrftime('%Y-%m-%d %H:%M:%S'); $fields['thumbnail_url'] = $context['url_to_home'] . $context['url_to_root'] . 'skins/_reference/thumbnails/page.gif'; if (Articles::post($fields)) { $text .= sprintf(i18n::s('A page "%s" has been created.'), $fields['title']) . BR . "\n"; } else { $text .= Logger::error_pop() . BR . "\n"; } } // nothing added
// the title of the page $context['page_title'] = i18n::s('Change named overlays'); // this is reserved to associates if (!Surfer::is_associate()) { Safe::header('Status: 401 Unauthorized', TRUE, 401); Logger::error(i18n::s('You are not allowed to perform this operation.')); // update targeted overlays } elseif (isset($_REQUEST['id']) && $_REQUEST['id']) { // change all named overlays $count = 0; if ($ids = Articles::get_ids_for_overlay($_REQUEST['id'])) { $context['text'] .= sprintf(i18n::s('Changing all overlays with name %s'), $_REQUEST['id']) . BR; // one page at a time foreach ($ids as $id) { // load the page and bind the related overlay if (($item = Articles::get($id)) && ($overlay = Overlay::load($item, 'article:' . $item['id'])) && is_callable(array($overlay, 'update'))) { $count++; // update provided attributes $overlay->update($_REQUEST); // save content of the overlay in the page $item['overlay'] = $overlay->save(); $item['overlay_id'] = $overlay->get_id(); // store in the database if (Articles::put($item)) { $context['text'] .= sprintf(i18n::s('%s has been changed'), Skin::build_link(Articles::get_permalink($item), $item['title'])); } } } // no page has been found } else { $context['text'] .= '<p>' . i18n::s('No item has the provided id.') . '</p>';
/** * create a default named page * * @param string the nick name of the item to create * @return string text to be displayed in the resulting page */ public static function post_default($nick_name) { global $context; // the page already exists if ($item = Articles::get($nick_name)) { return ''; } // use the provided model for this item if (is_readable($context['path_to_root'] . 'articles/defaults/' . $nick_name . '.php')) { include_once $context['path_to_root'] . 'articles/defaults/' . $nick_name . '.php'; // do the job if (is_callable(array($nick_name, 'initialize'))) { return call_user_func(array($nick_name, 'initialize')); } } // tough luck return ''; }
* @tester Timster * @reference * @license http://www.gnu.org/copyleft/lesser.txt GNU Lesser General Public License */ // common definitions and initial processing include_once '../../shared/global.php'; // look for the id $id = NULL; if (isset($_REQUEST['id'])) { $id = $_REQUEST['id']; } elseif (isset($context['arguments'][0])) { $id = $context['arguments'][0]; } $id = strip_tags($id); // get the item from the database $item = Articles::get($id); // get the related anchor, if any $anchor = NULL; if (isset($item['anchor']) && $item['anchor']) { $anchor = Anchors::get($item['anchor']); } // get poll data include_once '../overlay.php'; $overlay = NULL; if (isset($item['overlay'])) { $overlay = Overlay::load($item, 'article:' . $item['id']); } // look for the vote $vote = ''; if (isset($_REQUEST['vote'])) { $vote = $_REQUEST['vote'];
$context['text'] .= '<p>' . sprintf(i18n::ns('%d page has been updated.', '%d pages have been updated.', $count), $count) . '</p>'; // follow-up commands $follow_up = i18n::s('What do you want to do now?'); $menu = array(); $menu[] = Skin::build_link(Sections::get_permalink($item), i18n::s('View the section'), 'span'); $menu[] = Skin::build_link(Sections::get_url($item['id'], 'manage'), i18n::s('Manage it'), 'span'); $follow_up .= Skin::finalize_list($menu, 'menu_bar'); $context['text'] .= Skin::build_block($follow_up, 'bottom'); // unlock pages } elseif ($action == 'unlock_articles') { // articles if (isset($_REQUEST['selected_articles'])) { $count = 0; foreach ($_REQUEST['selected_articles'] as $dummy => $id) { // an article to lock if (($article = Articles::get($id)) && $article['locked'] == 'Y') { $attributes = array(); $attributes['id'] = $article['id']; $attributes['locked'] = 'N'; $attributes['silent'] = 'Y'; // too minor to be noted if (Articles::put_attributes($attributes)) { $count++; } } } // clear cache for containing section Sections::clear($item); // report on results $context['text'] .= '<p>' . sprintf(i18n::ns('%d page has been unlocked.', '%d pages have been unlocked.', $count), $count) . '</p>'; // follow-up commands
// this is private $article['publish_date'] = gmstrftime('%Y-%m-%d %H:%M:%S'); // no review is required $article['options'] = 'view_as_zic_pm'; // include some overlay $overlay = Overlay::bind('thread'); $article['overlay'] = $overlay->save(); $article['overlay_id'] = $overlay->get_id(); // ensure everything is positioned as expected Surfer::empower(); // post the new thread if (!($article['id'] = Articles::post($article))) { Logger::error(i18n::s('Impossible to add a page.')); } else { //get full article $article = Articles::get($article['id']); // attach some file if (isset($_FILES['upload']) && ($file = Files::upload($_FILES['upload'], 'files/article/' . $article['id'], 'article:' . $article['id']))) { $_REQUEST['message'] .= $file; } // make a new comment out of received message, if any if (isset($_REQUEST['message']) && trim($_REQUEST['message'])) { $comment = array(); $comment['anchor'] = 'article:' . $article['id']; $comment['description'] = strip_tags($_REQUEST['message']); Comments::post($comment); } // page title $context['page_title'] = i18n::s('Message sent !'); // feed-back to surfer // $context['text'] .= '<p>'.i18n::s('A new thread has been created, and it will be listed in profiles of the persons that you have involved. You can invite additional people later on if you wish.').'</p>';
function parse_tag_close($parser, $tag) { global $context; global $in_overlay, $overlay_class, $overlay_parameters; global $parsed_cdata, $parsed_item, $parsed_overlay, $parsing_report; // save gathered data if necessary switch ($tag) { case 'article': // end of article // transcode owner id $parsed_item['owner_id'] = Surfer::get_id(); if (isset($parsed_item['owner_nick_name']) && ($user = Users::get($parsed_item['owner_nick_name']))) { $parsed_item['owner_id'] = $user['id']; } // transcode creator id $parsed_item['create_id'] = Surfer::get_id(); if (isset($parsed_item['create_nick_name']) && ($user = Users::get($parsed_item['create_nick_name']))) { $parsed_item['create_id'] = $user['id']; } // transcode editor id $parsed_item['edit_id'] = Surfer::get_id(); if (isset($parsed_item['edit_nick_name']) && ($user = Users::get($parsed_item['edit_nick_name']))) { $parsed_item['edit_id'] = $user['id']; } // transcode publisher id $parsed_item['publish_id'] = Surfer::get_id(); if (isset($parsed_item['publish_nick_name']) && ($user = Users::get($parsed_item['publish_nick_name']))) { $parsed_item['publish_id'] = $user['id']; } // bind to given overlay $overlay = NULL; if ($overlay_class) { $overlay = Overlay::bind($overlay_class . ' ' . $overlay_parameters); } // when the page has been overlaid if (is_object($overlay)) { // update the overlay from content foreach ($parsed_overlay as $label => $value) { $overlay->attributes[$label] = $value; } // save content of the overlay in this item $parsed_item['overlay'] = $overlay->save(); $parsed_item['overlay_id'] = $overlay->get_id(); } // find anchor from handle if (isset($parsed_item['anchor_handle']) && ($reference = Sections::lookup($parsed_item['anchor_handle']))) { $parsed_item['anchor'] = $reference; } // update an existing page if (isset($parsed_item['handle']) && ($item = Articles::get($parsed_item['handle']))) { // transcode page id $parsed_item['id'] = $item['id']; // stop on error if (!Articles::put($parsed_item) || is_object($overlay) && !$overlay->remember('update', $parsed_item, 'article:' . $item['id'])) { Logger::error(sprintf('Unable to save article %s', $parsed_item['title'] . ' (' . $parsed_item['id'] . ')')); } // create a new page } else { unset($parsed_item['id']); // stop on error if (!($parsed_item['id'] = Articles::post($parsed_item))) { Logger::error(sprintf('Unable to save article %s', $parsed_item['title'])); } else { // save overlay content if (is_object($overlay)) { $overlay->remember('insert', $parsed_item, 'article:' . $parsed_item['id']); } } } // report to surfer $parsing_report .= '<li>' . Skin::build_link(Articles::get_permalink($parsed_item), $parsed_item['title']) . "</li>\n"; // ready for next item $overlay_class = NULL; $overlay_parameters = ''; $parsed_overlay = array(); $parsed_item = array(); Safe::set_time_limit(30); break; case 'overlay': // end of overlay data $in_overlay = FALSE; break; case 'section': // end of section // transcode owner id $parsed_item['owner_id'] = Surfer::get_id(); if (isset($parsed_item['owner_nick_name']) && ($user = Users::get($parsed_item['owner_nick_name']))) { $parsed_item['owner_id'] = $user['id']; } // transcode creator id $parsed_item['create_id'] = Surfer::get_id(); if (isset($parsed_item['create_nick_name']) && ($user = Users::get($parsed_item['create_nick_name']))) { $parsed_item['create_id'] = $user['id']; } // transcode editor id $parsed_item['edit_id'] = Surfer::get_id(); if (isset($parsed_item['edit_nick_name']) && ($user = Users::get($parsed_item['edit_nick_name']))) { $parsed_item['edit_id'] = $user['id']; } // bind to given overlay $overlay = NULL; if ($overlay_class) { $overlay = Overlay::bind($overlay_class . ' ' . $overlay_parameters); } // when the page has been overlaid if (is_object($overlay)) { // update the overlay from content foreach ($parsed_overlay as $label => $value) { $overlay->attributes[$label] = $value; } // save content of the overlay in this item $parsed_item['overlay'] = $overlay->save(); $parsed_item['overlay_id'] = $overlay->get_id(); } // find anchor from handle if (isset($parsed_item['anchor_handle']) && ($reference = Sections::lookup($parsed_item['anchor_handle']))) { $parsed_item['anchor'] = $reference; } // update an existing section if (isset($parsed_item['handle']) && ($item = Sections::get($parsed_item['handle']))) { // transcode section id $parsed_item['id'] = $item['id']; // stop on error if (!Sections::put($parsed_item) || is_object($overlay) && !$overlay->remember('update', $parsed_item, 'section:' . $item['id'])) { Logger::error(sprintf('Unable to save section %s', $parsed_item['title'] . ' (' . $parsed_item['id'] . ')')); } // create a new page } else { unset($parsed_item['id']); // stop on error if (!($parsed_item['id'] = Sections::post($parsed_item))) { Logger::error(sprintf('Unable to save section %s', $parsed_item['title'])); } else { // save overlay content if (is_object($overlay)) { $overlay->remember('insert', $parsed_item, 'section:' . $parsed_item['id']); } } } // report to surfer $parsing_report .= '<li>' . Skin::build_link(Sections::get_permalink($parsed_item), $parsed_item['title']) . "</li>\n"; // ready for next item $overlay_class = NULL; $overlay_parameters = ''; $parsed_overlay = array(); $parsed_item = array(); Safe::set_time_limit(30); break; default: // just another attribute // decode cdata $parsed_cdata = trim(preg_replace(array('/</', '/>/'), array('<', '>'), $parsed_cdata)); // feeding the overlay or the item itself if ($in_overlay) { $parsed_overlay[$tag] = $parsed_cdata; } else { $parsed_item[$tag] = $parsed_cdata; } // ready for next attribute $parsed_cdata = ''; break; } }
} $follow_up .= Skin::build_list($menu, 'menu_bar'); $menu = array(); if (Surfer::may_upload()) { $menu = array_merge($menu, array('images/edit.php?anchor=' . urlencode('article:' . $_REQUEST['id']) => i18n::s('Add an image'))); $menu = array_merge($menu, array('files/edit.php?anchor=' . urlencode('article:' . $_REQUEST['id']) => i18n::s('Add a file'))); $menu = array_merge($menu, array('images/edit.php?anchor=' . urlencode('article:' . $_REQUEST['id']) . '&action=thumbnail' => i18n::s('Add a thumbnail'))); } if (is_object($anchor) && Surfer::is_empowered()) { $menu = array_merge($menu, array('articles/edit.php?anchor=' . urlencode($anchor->get_reference()) => i18n::s('Add another page'))); } $follow_up .= Skin::build_list($menu, 'menu_bar'); $context['text'] .= Skin::build_block($follow_up, 'bottom'); } // we have to duplicate some template page } elseif (!isset($item['id']) && !is_object($overlay) && is_object($anchor) && isset($_REQUEST['template']) && ($item = Articles::get($_REQUEST['template']))) { // ensure we are not duplicating outside regular templates if (!($templates = Anchors::get($item['anchor'])) || $templates->get_nick_name() != 'templates') { Safe::header('Status: 401 Unauthorized', TRUE, 401); die(i18n::s('You are not allowed to perform this operation.')); } // we will get a new id, a new title and a new handle unset($item['title']); unset($item['id']); unset($item['handle']); // set the anchor $item['anchor'] = $anchor->get_reference(); // the duplicator becomes the author unset($item['create_address']); unset($item['create_date']); unset($item['create_id']);
$id = $_REQUEST['id']; } elseif (isset($context['arguments'][0])) { $id = $context['arguments'][0]; } $id = strip_tags($id); // load localized strings i18n::bind('root'); // load the skin load_skin('go'); // the title of the page $context['page_title'] = i18n::s('Page locator'); // ensure we have a non-empty string if (!($id = trim($id)) || !preg_match('/\\w/', $id)) { $context['text'] .= '<p>' . i18n::s('Please indicate a nick name to look for.') . "</p>\n"; // short link to some article } elseif (!strncmp($id, 'a~', 2) && ($item = Articles::get(restore_number(substr($id, 2))))) { Safe::redirect(Articles::get_permalink($item)); // short link to some section } elseif (!strncmp($id, 's~', 2) && ($item = Sections::get(restore_number(substr($id, 2))))) { Safe::redirect(Sections::get_permalink($item)); // look in sections } elseif ($items =& Sections::list_for_name($id, NULL, 'full')) { // only one section has this name if (count($items) == 1) { list($url, $attributes) = each($items); Safe::redirect($url); } // splash $context['text'] .= '<p>' . i18n::s('Select below among available sections.') . '</p>'; // several pages $context['text'] .= Skin::build_list($items, 'decorated');
if (Surfer::may_be_a_robot()) { Logger::error(i18n::s('Please prove you are not a robot.')); $with_form = TRUE; // display the form on error } elseif (!($_REQUEST['id'] = Articles::post($_REQUEST))) { $with_form = TRUE; // post-processing } else { // do whatever is necessary on page publication Articles::finalize_publication($anchor, $_REQUEST); // message to the query poster $context['page_title'] = i18n::s('Your query has been registered'); // use the secret handle to access the query $link = ''; $status = ''; if ($item = Articles::get($_REQUEST['id'])) { // ensure the article has a private handle if (!isset($item['handle']) || !$item['handle']) { $item['handle'] = md5(mt_rand()); // save in the database $fields = array(); $fields['id'] = $item['id']; $fields['handle'] = $item['handle']; $fields['silent'] = 'Y'; Articles::put_attributes($fields); } // the secret link --see users/login.php $link = $context['url_to_home'] . $context['url_to_root'] . Users::get_login_url('edit', 'article:' . $item['id'], $item['create_name'], $item['handle']); $status = i18n::s('<p>You can check the status of your query at the following address:</p>') . '<p>' . Skin::build_link($link, $link, 'basic', i18n::s('The permanent address for your query')) . '</p>'; } $context['text'] .= i18n::s('<p>Your query will now be reviewed by one of the associates of this community. It is likely that this will be done within the next 24 hours at the latest.</p>');
<?php if (isset($_GET['article_id'])) { $id = $_GET['article_id']; $article = Articles::get($id); $_SESSION['articles'] = $article; //var_dump($_SESSION['article']); } ?> <a href="home.php?page=2"<button class="btn-primary form-control" type="submit" name="insert">Back</button></a> <h1>Edit Article</h1><br> <a href='../index.php?controller=News&method=index&id=<?php echo $article->article_id; ?> ' target='_blank' >View article on site</a><br><br> <img src='../view/images/<?php echo $_SESSION['articles']->article_picture_small; ?> '><br><br> <a href='home.php?page=5&article_id=<?php echo $_SESSION['articles']->article_id; ?> '><button type="button" class="form-control btn-success">Change Picture</button></a><br> <form action="home.php?page=4" method="POST" enctype="multipart/form-data"> <input type="hidden" name="article_id" value="<?php echo $_SESSION['articles']->article_id; ?> "> <input type="hidden" name="article_picture_small" value="<?php echo $_SESSION['articles']->article_picture_small; ?>
if (!($result = SQL::query($query))) { $context['text'] .= Logger::error_pop() . BR . "\n"; // parse the whole list } else { // fetch one anchor and the linked member $errors_count = 0; while ($row = SQL::fetch($result)) { // animate user screen and take care of time $count++; if (!($count % 100)) { $context['text'] .= sprintf(i18n::s('%d records have been processed'), $count) . BR . "\n"; // ensure enough execution time Safe::set_time_limit(30); } // look only in articles if (preg_match('/article:(.*)/', $row['anchor'], $matches) && ($article = Articles::get($matches[1]))) { // check that the description has a reference to this date, or that overlay date has been used if (!preg_match('/\\[date=' . $row['id'] . '.*\\]/', $article['description']) && !preg_match('/date_stamp/', $article['overlay'])) { $context['text'] .= sprintf(i18n::s('Unused: %s'), 'date ' . Skin::build_link(Dates::get_url($row['id']), $row['id'] . ' ' . $row['date_stamp'])) . BR . "\n"; if (++$errors_count >= 25) { $context['text'] .= i18n::s('Too many successive errors. Aborted') . BR . "\n"; break; } } else { $errors_count = 0; } } } } // ending message $context['text'] .= sprintf(i18n::s('%d records have been processed'), $count) . BR . "\n";
} elseif ($anchor = Categories::lookup('my_category')) { $fields = array(); $fields['nick_name'] = 'my_sub_category'; $fields['anchor'] = $anchor; $fields['title'] = i18n::c('My sub-category'); $fields['introduction'] = i18n::c('Sample sub category'); $fields['description'] = i18n::c('This category has been created for experimentation purpose. Feel free to change this text, to add some images, to play with codes, etc. Have you checked the help link on the side of this page? Once you will feel more comfortable with the handling of categories, just delete this one and create other categories of your own.'); if (Categories::post($fields)) { $text .= sprintf(i18n::s('A category "%s" has been created.'), $fields['nick_name']) . BR . "\n"; } } // articles // $text .= Skin::build_block(i18n::s('Pages'), 'subtitle'); // 'my_article' article if (Articles::get('my_article')) { $text .= sprintf(i18n::s('A page "%s" already exists.'), 'my_article') . BR . "\n"; } elseif ($anchor = Sections::lookup('my_section')) { $fields = array(); $fields['anchor'] = $anchor; $fields['nick_name'] = 'my_article'; $fields['title'] = i18n::c('Edit me'); $fields['introduction'] = i18n::c('Sample article'); $fields['description'] = i18n::c('This is a sample article to let you learn and practice.') . "\n\nabcdefghijklmnopqrstuvwxyz" . " &é\"'(-è_çà )=~#{[|`\\x^@]}" . " ^βêîôϋ¨δλοφό£ù%*µ,;:!?./§¤" . "\\a\\b\\c\\d\f\\g\\h\\i\\j\\k\\l\\m\\o\\p\\q\r\\s\t\\u\v\\w\\x\\y\\z" . "\n:) 8) :D :O ;) :( X( !! ?? ?! -- ++ >> §§" . "\n[b]bold[/b] and [i]italic[/i][nl][u]underlined[/u]" . "\n<a href=\"http://myweb/mypage.html\">anchor</a><!-- comment -->" . "\nCheck my [link=document]http://myweb/mypage.html[/link] on this subject;" . " more info [email=here>>]me@dummy.com[/email]" . "\n[code]// say hello\necho \"hello world\";[/code]" . "\n[quote]Once upon a time...[/quote]" . "\n[*]First item[nl][nl][*]Second item" . "\n[list][*]First item [*]Second item[/list]" . "\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. " . "\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. "; $fields['publish_date'] = gmstrftime('%Y-%m-%d %H:%M:%S'); if (Articles::post($fields)) { $text .= sprintf(i18n::s('A page "%s" has been created.'), $fields['nick_name']) . BR . "\n"; } else { $text .= Logger::error_pop() . BR . "\n"; } }
/** * reference another page at this site * * The function transforms a local reference (e.g;, [code][user=2][/code]) * to an actual link relative to the YACS directory (e.g., [code]users/view.php/2[/code]), * adds a title and, sometimes, set a description as well. * * @param string any string, maybe with a local reference in it * @return an array($url, $title, $description) or NULL * * @see images/view.php * @see links/edit.php * @see shared/codes.php */ public static function transform_reference($text) { global $context; // translate this reference to an internal link if (preg_match("/^\\[(article|section|file|image|category|user)=(.+?)\\]/i", $text, $matches)) { switch ($matches[1]) { // article link case 'article': if ($item = Articles::get($matches[2])) { return array(Articles::get_permalink($item), $item['title'], $item['introduction']); } return array('', $text, ''); // section link // section link case 'section': if ($item = Sections::get($matches[2])) { return array(Sections::get_permalink($item), $item['title'], $item['introduction']); } return array('', $text, ''); // file link // file link case 'file': if ($item = Files::get($matches[2])) { return array(Files::get_url($matches[2]), $item['title'] ? $item['title'] : str_replace('_', ' ', ucfirst($item['file_name']))); } return array('', $text, ''); // image link // image link case 'image': include_once $context['path_to_root'] . 'images/images.php'; if ($item = Images::get($matches[2])) { return array(Images::get_url($matches[2]), $item['title'] ? $item['title'] : str_replace('_', ' ', ucfirst($item['image_name']))); } return array('', $text, ''); // category link // category link case 'category': if ($item = Categories::get($matches[2])) { return array(Categories::get_permalink($item), $item['title'], $item['introduction']); } return array('', $text, ''); // user link // user link case 'user': if ($item = Users::get($matches[2])) { return array(Users::get_permalink($item), $item['full_name'] ? $item['full_name'] : $item['nick_name']); } return array('', $text, ''); } } return array('', $text, ''); }
/** * render a link to an object * * Following types are supported: * - article - link to an article page * - category - link to a category page * - comment - link to a comment page * - download - link to a download page * - file - link to a file page * - flash - display a file as a native flash object, or play a flash video * - go * - image - display an in-line image * - next - link to an article page * - previous - link to an article page * - section - link to a section page * - server - link to a server page * - user - link to a user page * * @param string the type * @param string the id, with possible options or variant * @return string the rendered text **/ public static function render_object($type, $id) { global $context; $id = Codes::fix_tags($id); // depending on type switch ($type) { // link to an article case 'article': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Articles::get($id))) { $output = '[article=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; $type = 'basic'; } else { $text = Skin::strip($item['title']); } // make a link to the target page $url = Articles::get_permalink($item); // return a complete anchor $output =& Skin::build_link($url, $text, $type); } return $output; // insert article description // insert article description case 'article.description': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Articles::get($id))) { $output = '[article.description=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; $type = 'basic'; } else { $text = Skin::strip($item['title']); } // make a link to the target page $url = Articles::get_permalink($item); // return a complete anchor $output =& Skin::build_link($url, $text, 'article'); // the introduction text, if any $output .= BR . Codes::beautify($item['introduction']); // load overlay, if any if (isset($item['overlay']) && $item['overlay']) { $overlay = Overlay::load($item, 'article:' . $item['id']); // get text related to the overlay, if any if (is_object($overlay)) { $output .= $overlay->get_text('view', $item); } } // the description, which is the actual page body $output .= '<div>' . Codes::beautify($item['description']) . '</div>'; } return $output; // link to a category // link to a category case 'category': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Categories::get($id))) { $output = '[category=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; $type = 'basic'; } else { $text = Skin::strip($item['title']); } // make a link to the target page $url = Categories::get_permalink($item); // return a complete anchor $output =& Skin::build_link($url, $text, $type); } return $output; // insert category description // insert category description case 'category.description': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Categories::get($id))) { $output = '[category.description=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; $type = 'basic'; } else { $text = Skin::strip($item['title']); } // make a link to the target page $url = Categories::get_permalink($item); // return a complete anchor $output =& Skin::build_link($url, $text, 'category'); // the introduction text, if any $output .= BR . Codes::beautify($item['introduction']); // load overlay, if any if (isset($item['overlay']) && $item['overlay']) { $overlay = Overlay::load($item, 'category:' . $item['id']); // get text related to the overlay, if any if (is_object($overlay)) { $output .= $overlay->get_text('view', $item); } } // the description, which is the actual page body $output .= '<div>' . Codes::beautify($item['description']) . '</div>'; } return $output; // link to a comment // link to a comment case 'comment': include_once $context['path_to_root'] . 'comments/comments.php'; // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Comments::get($id))) { $output = '[comment=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; } else { $text = i18n::s('View this comment'); } // make a link to the target page $url = $context['url_to_home'] . $context['url_to_root'] . Comments::get_url($item['id']); // return a complete anchor $output =& Skin::build_link($url, $text, 'basic'); } return $output; // link to a download // link to a download case 'download': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Files::get($id))) { // file does not exist anymore if (isset($attributes[1]) && $attributes[1]) { $output = $attributes[1] . '<p class="details">' . i18n::s('[this file has been deleted]') . '</p>'; } else { $output = '[download=' . $id . ']'; } } else { // label for this file $prefix = $text = $suffix = ''; // signal restricted and private files if ($item['active'] == 'N') { $prefix .= PRIVATE_FLAG; } elseif ($item['active'] == 'R') { $prefix .= RESTRICTED_FLAG; } // ensure we have a label for this link if (isset($attributes[1]) && $attributes[1]) { $text .= $attributes[1]; // this may describe a previous file, which has been replaced if ($item['edit_action'] != 'file:create' && $attributes[1] != $item['file_name']) { $text .= ' <p class="details">' . i18n::s('[this file has been replaced]') . '</p>'; $output = $prefix . $text . $suffix; return $output; } } else { $text = Skin::strip($item['title'] ? $item['title'] : str_replace('_', ' ', $item['file_name'])); } // flag files uploaded recently if ($item['create_date'] >= $context['fresh']) { $suffix .= NEW_FLAG; } elseif ($item['edit_date'] >= $context['fresh']) { $suffix .= UPDATED_FLAG; } // always download the file $url = $context['url_to_home'] . $context['url_to_root'] . Files::get_url($item['id'], 'fetch', $item['file_name']); // return a complete anchor $output = $prefix . Skin::build_link($url, $text, 'file') . $suffix; } return $output; // link to a file // link to a file case 'file': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database --ensure we get a fresh copy of the record, not a cached one if (!($item = Files::get($id, TRUE))) { // file does not exist anymore if (isset($attributes[1]) && $attributes[1]) { $output = $attributes[1] . '<p class="details">' . i18n::s('[this file has been deleted]') . '</p>'; } else { $output = '[file=' . $id . ']'; } } else { // maybe we want to illustrate this file if ($item['edit_action'] != 'file:create' && isset($attributes[1]) && $attributes[1] || !($output = Files::interact($item))) { // label for this file $output = $prefix = $text = $suffix = ''; // signal restricted and private files if ($item['active'] == 'N') { $prefix .= PRIVATE_FLAG; } elseif ($item['active'] == 'R') { $prefix .= RESTRICTED_FLAG; } // ensure we have a label for this link if (isset($attributes[1]) && $attributes[1]) { $text .= $attributes[1]; // this may describe a previous file, which has been replaced if ($item['edit_action'] != 'file:create' && $attributes[1] != $item['file_name']) { $text .= '<p class="details">' . i18n::s('[this file has been replaced]') . '</p>'; $output = $prefix . $text . $suffix; return $output; } } else { $text .= Skin::strip($item['title'] ? $item['title'] : str_replace('_', ' ', $item['file_name'])); } // flag files uploaded recently if ($item['create_date'] >= $context['fresh']) { $suffix .= NEW_FLAG; } elseif ($item['edit_date'] >= $context['fresh']) { $suffix .= UPDATED_FLAG; } // make a link to the target page $url = Files::get_download_url($item); // return a complete anchor $output .= $prefix . Skin::build_link($url, $text, 'basic') . $suffix; } } return $output; // invoke the selector // invoke the selector case 'go': // extract the label, if any $attributes = preg_split("/\\s*,\\s*/", $id, 2); $name = $attributes[0]; // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; } else { $text = $name; } // return a complete anchor $output = Skin::build_link($context['url_to_home'] . $context['url_to_root'] . normalize_shortcut($name), $text, 'basic'); return $output; // embed an image // embed an image case 'image': include_once $context['path_to_root'] . 'images/images.php'; // get the variant, if any $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; if (isset($attributes[1])) { $variant = $attributes[1]; } else { $variant = 'inline'; } // get the image record if (!($image = Images::get($id))) { $output = '[image=' . $id . ']'; return $output; } // a title for the image --do not force a title if (isset($image['title'])) { $title = $image['title']; } else { $title = ''; } // provide thumbnail if not defined, or forced, or for large images if (!$image['use_thumbnail'] || $image['use_thumbnail'] == 'A' || $image['use_thumbnail'] == 'Y' && $image['image_size'] > $context['thumbnail_threshold']) { // not inline anymore, but thumbnail --preserve other variants if ($variant == 'inline') { $variant = 'thumbnail'; } // where to fetch the image file $href = Images::get_thumbnail_href($image); // to drive to plain image $link = Images::get_icon_href($image); // add an url, if any } elseif ($image['link_url']) { // flag large images if ($image['image_size'] > $context['thumbnail_threshold']) { $variant = rtrim('large ' . $variant); } // where to fetch the image file $href = Images::get_icon_href($image); // transform local references, if any include_once $context['path_to_root'] . '/links/links.php'; $attributes = Links::transform_reference($image['link_url']); if ($attributes[0]) { $link = $context['url_to_root'] . $attributes[0]; } else { $link = $image['link_url']; } // get the <img ... /> element } else { // do not append poor titles to inline images if ($variant == 'inline') { $title = ''; } // flag large images if ($image['image_size'] > $context['thumbnail_threshold']) { $variant = rtrim('large ' . $variant); } // where to fetch the image file $href = Images::get_icon_href($image); // no link $link = ''; } // use the skin if (Images::allow_modification($image['anchor'], $id)) { // build editable image $output =& Skin::build_image($variant, $href, $title, $link, $id); } else { $output =& Skin::build_image($variant, $href, $title, $link); } return $output; // embed a stack of images // embed a stack of images case 'images': include_once $context['path_to_root'] . 'images/images.php'; // get the list of ids $ids = preg_split("/\\s*,\\s*/", $id); if (!count($ids)) { $output = '[images=id1, id2, ...]'; return $output; } // build the list of images $items = array(); foreach ($ids as $id) { // get the image record if ($image = Images::get($id)) { // a title for the image --do not force a title if (isset($image['title'])) { $title = $image['title']; } else { $title = ''; } // provide thumbnail if not defined, or forced, or for large images $variant = 'inline'; if (!$image['use_thumbnail'] || $image['use_thumbnail'] == 'A' || $image['use_thumbnail'] == 'Y' && $image['image_size'] > $context['thumbnail_threshold']) { // not inline anymore, but thumbnail $variant = 'thumbnail'; // where to fetch the image file $href = Images::get_thumbnail_href($image); // to drive to plain image $link = $context['url_to_root'] . Images::get_url($id); // add an url, if any } elseif ($image['link_url']) { // flag large images if ($image['image_size'] > $context['thumbnail_threshold']) { $variant = rtrim('large ' . $variant); } // where to fetch the image file $href = Images::get_icon_href($image); // transform local references, if any include_once $context['path_to_root'] . '/links/links.php'; $attributes = Links::transform_reference($image['link_url']); if ($attributes[0]) { $link = $context['url_to_root'] . $attributes[0]; } else { $link = $image['link_url']; } // get the <img ... /> element } else { // flag large images if ($image['image_size'] > $context['thumbnail_threshold']) { $variant = rtrim('large ' . $variant); } // where to fetch the image file $href = Images::get_icon_href($image); // no link $link = ''; } // use the skin $label =& Skin::build_image($variant, $href, $title, $link); // add item to the stack $items[] = $label; } } // format the list $output = ''; if (count($items)) { // stack items $output = Skin::finalize_list($items, 'stack'); // rotate items $output = Skin::rotate($output); } // done return $output; // link to the next article // link to the next article case 'next': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Articles::get($id))) { $output = '[next=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; } else { $text = Skin::strip($item['title']); } // make a link to the target page $url = Articles::get_permalink($item); // return a complete anchor $output =& Skin::build_link($url, $text, 'next'); } return $output; // link to the previous article // link to the previous article case 'previous': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Articles::get($id))) { $output = '[previous=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; } else { $text = Skin::strip($item['title']); } // make a link to the target page $url = Articles::get_permalink($item); // return a complete anchor $output =& Skin::build_link($url, $text, 'previous'); } return $output; // link to a section // link to a section case 'section': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Sections::get($id))) { $output = '[section=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; $type = 'basic'; } else { $text = Skin::strip($item['title']); } // make a link to the target page $url = Sections::get_permalink($item); // return a complete anchor $output =& Skin::build_link($url, $text, $type); } return $output; // link to a server // link to a server case 'server': include_once $context['path_to_root'] . 'servers/servers.php'; // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Servers::get($id))) { $output = '[server=' . $id . ']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; $type = 'basic'; } else { $text = Skin::strip($item['title']); } // make a link to the target page $url = $context['url_to_home'] . $context['url_to_root'] . Servers::get_url($id); // return a complete anchor $output =& Skin::build_link($url, $text, $type); } return $output; // link to a user // link to a user case 'user': // maybe an alternate title has been provided $attributes = preg_split("/\\s*,\\s*/", $id, 2); $id = $attributes[0]; // load the record from the database if (!($item = Users::get($id))) { $output = '[user='******']'; } else { // ensure we have a label for this link if (isset($attributes[1])) { $text = $attributes[1]; $type = 'basic'; } elseif (isset($item['full_name']) && $item['full_name']) { $text = ucfirst($item['full_name']); } else { $text = ucfirst($item['nick_name']); } // make a link to the target page $url = Users::get_permalink($item); // return a complete anchor $output =& Skin::build_link($url, $text, $type); } return $output; // invalid type // invalid type default: $output = '[' . $type . ']'; return $output; } }