function nm_list_recent() { global $NMPAGEURL, $NMRECENTPOSTS; if ($NMPAGEURL == '') { return; } $posts = nm_get_posts(); if (!empty($posts)) { echo '<ul class="nm_recent">', PHP_EOL; $posts = array_slice($posts, 0, $NMRECENTPOSTS, true); foreach ($posts as $post) { $url = nm_get_url('post') . $post->slug; $title = stripslashes($post->title); echo ' <li><a href="', $url, '">', $title, '</a></li>', PHP_EOL; } echo '</ul>', PHP_EOL; } }
function nm_admin_panel() { global $NMPAGEURL; $posts = nm_get_posts(true); if (nm_post_files_differ($posts)) { nm_update_cache(); $posts = nm_get_posts(true); if (nm_post_files_differ($posts)) { nm_display_message('<b>Warning:</b> Post files/cache mismatch', true); } else { nm_display_message('Post cache file has been updated', false); } // not translated } ?> <h3 class="floated"><?php i18n('news_manager/PLUGIN_NAME'); ?> </h3> <div class="edit-nav clearfix"> <a href="#" id="filter-button" ><?php i18n('FILTER'); ?> </a> <a href="load.php?id=news_manager&edit"><?php i18n('news_manager/NEW_POST'); ?> </a> <a href="load.php?id=news_manager&settings"><?php i18n('news_manager/SETTINGS'); ?> </a> </div> <?php if (!empty($posts)) { ?> <div id="filter-search"> <form> <input type="text" class="text" id="tokens" placeholder="<?php echo lowercase(strip_tags(i18n_r('FILTER'))); ?> ..." /> <a href="load.php?id=news_manager" class="cancel"><?php i18n('news_manager/CANCEL'); ?> </a> </form> </div> <table id="posts" class="highlight"> <tr> <th><?php i18n('news_manager/POST_TITLE'); ?> </th> <th style="text-align: right;"><?php i18n('news_manager/DATE'); ?> </th> <th></th> <th></th> <th></th> </tr> <?php foreach ($posts as $post) { $title = stripslashes($post->title); $date = shtDate($post->date); $url = nm_get_url('post') . $post->slug; $url = nm_patch_i18n_url($url); ?> <tr> <td class="posttitle"> <a href="load.php?id=news_manager&edit=<?php echo $post->slug; ?> " title="<?php i18n('news_manager/EDIT_POST'); ?> : <?php echo $title; ?> "> <?php echo $title; ?> </a> </td> <td style="text-align: right;"> <?php if (strtotime($post->date) > time()) { echo '<span style="color:#aaa">', $date, '</span>'; } else { echo '<span>', $date, '</span>'; } ?> </td> <td style="width: 20px;text-align: center;"> <?php if ($post->private == 'Y') { echo '<span style="color: #aaa;">P</span>'; } ?> </td> <td class="secondarylink"> <?php if ($NMPAGEURL && $NMPAGEURL != '') { ?> <a href="<?php echo $url; ?> " target="_blank" title="<?php i18n('news_manager/VIEW_POST'); ?> : <?php echo $title; ?> "> # </a> <?php } ?> </td> <td class="delete"> <a href="load.php?id=news_manager&delete=<?php echo $post->slug; ?> " class="nm_delconfirm" title="<?php i18n('news_manager/DELETE_POST'); ?> : <?php echo $title; ?> ?"> × </a> </td> </tr> <?php } ?> </table> <p> <b><?php echo count($posts); ?> </b> <?php i18n('news_manager/POSTS'); ?> </p> <script> $(document).ready(function() { // filter button opens up filter dialog $("#filter-button").on("click", function($e) { $e.preventDefault(); $("#filter-search").slideToggle(); $(this).toggleClass("current"); $("#filter-search #tokens").focus(); }); // ignore enter key in filter form $("#filter-search #tokens").keydown(function($e) { if($e.keyCode == 13) { $e.preventDefault(); } }); // close filter dialog on cancel $("#filter-search .cancel").on("click", function($e) { $e.preventDefault(); $("#posts tr").show(); $('#filter-button').toggleClass("current"); $("#filter-search #tokens").val(""); $("#filter-search").slideUp(); }); // filter table, see: // http://kobikobi.wordpress.com/2008/09/15/using-jquery-to-filter-table-rows/ $("#posts tr:has(td.posttitle)").each(function() { var t = $(this).find('td.posttitle').text().toLowerCase(); $("<td class='indexColumn'></td>") .hide().text(t).appendTo(this); }); $("#tokens").keyup(function() { var s = $(this).val().toLowerCase().split(" "); $("#posts tr:hidden").show(); $.each(s, function(){ $("#posts tr:visible .indexColumn:not(:contains('" + this + "'))").parent().hide(); }); }); // confirm delete $('.nm_delconfirm').on('click', function () { return confirm($(this).attr("title")); }); }); </script> <?php } }
function nm_update_sitemap_xml($xml) { if (!defined('NMNOSITEMAP') || !NMNOSITEMAP) { $posts = nm_get_posts(); $tags = array(); $excludetags = defined('NMSITEMAPEXCLUDETAGS') && (NMSITEMAPEXCLUDETAGS === true || NMSITEMAPEXCLUDETAGS === 1); foreach ($posts as $post) { $url = nm_get_url('post') . $post->slug; $file = NMPOSTPATH . $post->slug . '.xml'; $date = makeIso8601TimeStamp(date('Y-m-d H:i:s', strtotime($post->date))); $item = $xml->addChild('url'); $item->addChild('loc', $url); $item->addChild('lastmod', $date); $item->addChild('changefreq', 'monthly'); $item->addChild('priority', '0.5'); if (!$excludetags && !empty($post->tags)) { foreach (explode(',', nm_lowercase_tags(strip_decode($post->tags))) as $tag) { if (substr($tag, 0, 1) != '_') { if (!in_array($tag, $tags)) { $url = nm_get_url('tag') . rawurlencode($tag); $item = $xml->addChild('url'); $item->addChild('loc', $url); $item->addChild('lastmod', $date); $item->addChild('changefreq', 'monthly'); $item->addChild('priority', '0.5'); $tags[] = $tag; } } } } } } return $xml; }
function nm_show_search_results() { $keywords = preg_split('/\\s+/u', trim($_POST['keywords']), null, PREG_SPLIT_NO_EMPTY); if (empty($keywords)) { $posts = array(); } else { $posts = nm_get_posts(); $mb = function_exists('mb_stripos'); foreach ($keywords as $keyword) { $match = array(); foreach ($posts as $post) { $data = getXML(NMPOSTPATH . $post->slug . '.xml'); $content = $data->title . $data->content; if ($mb && mb_stripos($content, $keyword, 0, 'UTF-8') !== false || !$mb && stripos($content, $keyword) !== false) { $match[] = $post; } } $posts = $match; } } if (!empty($posts)) { $showexcerpt = nm_get_option('excerpt'); echo '<p>' . i18n_r('news_manager/FOUND') . '</p>', PHP_EOL; foreach ($posts as $post) { nm_show_post($post->slug, $showexcerpt, false); } } else { echo '<p>' . i18n_r('news_manager/NOT_FOUND') . '</p>', PHP_EOL; } }
function nm_custom_display_posts($templ = '', $tag = '', $type = '') { global $NMRECENTPOSTS, $NMCUSTOMIMAGES, $NMCUSTOMOFFSET; if ($templ == '') { $templ = '<p><a href="{{ post_link }}">{{ post_title }}</a> {{ post_date }}</p>' . PHP_EOL; } foreach (array('post_link', 'post_slug', 'post_title', 'post_date', 'post_excerpt', 'post_content', 'post_number', 'post_image', 'post_image_url', 'post_author') as $token) { if (strpos($templ, '{{' . $token . '}}')) { $templ = str_replace('{{' . $token . '}}', '{{ ' . $token . ' }}', $templ); } } if ($type == 'future') { $posts = array_reverse(nm_get_posts(true)); $allposts = array(); $now = time(); foreach ($posts as $post) { if ($post->private != 'Y' && strtotime($post->date) > $now) { $allposts[] = $post; } } } else { $allposts = nm_get_posts(); } if (trim($tag) !== '') { $posts = array(); foreach ($allposts as $post) { if (in_array($tag, explode(',', $post->tags))) { $posts[] = $post; } } } else { $posts = $allposts; } unset($allposts); if (!empty($posts)) { ob_start(); // content filter if (strpos($templ, '{{ post_date }}') !== false) { global $NMCUSTOMDATE; $fmt = $NMCUSTOMDATE ? $NMCUSTOMDATE : i18n_r('news_manager/DATE_FORMAT'); } else { $fmt = false; } $w = isset($NMCUSTOMIMAGES['width']) ? $NMCUSTOMIMAGES['width'] : 0; $h = isset($NMCUSTOMIMAGES['height']) ? $NMCUSTOMIMAGES['height'] : 0; $c = isset($NMCUSTOMIMAGES['crop']) ? $NMCUSTOMIMAGES['crop'] : 0; $d = isset($NMCUSTOMIMAGES['default']) ? $NMCUSTOMIMAGES['default'] : ''; $count = 0; $offset = $NMCUSTOMOFFSET ? intval($NMCUSTOMOFFSET) : 0; $posts = array_slice($posts, $offset, $NMRECENTPOSTS, true); foreach ($posts as $post) { $str = $templ; $str = str_replace('{{ post_number }}', strval($count), $str); $str = str_replace('{{ post_slug }}', $post->slug, $str); $str = str_replace('{{ post_link }}', nm_get_url('post') . $post->slug, $str); $str = str_replace('{{ post_title }}', stripslashes($post->title), $str); if (strpos($str, '{{ post_image') !== false && function_exists('nm_get_image_url')) { $img = htmlspecialchars(nm_get_image_url((string) $post->image, $w, $h, $c, $d)); $str = str_replace('{{ post_image_url }}', $img, $str); if (!empty($img)) { $str = str_replace('{{ post_image }}', '<img src="' . $img . '" alt="" />', $str); } else { $str = str_replace('{{ post_image }}', '', $str); } } if ($fmt) { $date = nm_get_date($fmt, strtotime($post->date)); $str = str_replace('{{ post_date }}', $date, $str); } if (strpos($str, '{{ post_author }}') !== false) { if (isset($post->author)) { $author = strval($post->author); global $NMAUTHOR; // NM Custom Authors (array) if ($NMAUTHOR && isset($NMAUTHOR[$author])) { $author = $NMAUTHOR[$author]; } } else { if (function_exists('nm_get_option')) { $author = nm_get_option('defaultauthor'); // NM 3.0+ custom setting if (!$author) { $author = ''; } } else { $author = ''; } } $str = str_replace('{{ post_author }}', $author, $str); } if (strpos($str, '{{ post_excerpt }}') !== false || strpos($str, '{{ post_content }}') !== false) { $postxml = getXML(NMPOSTPATH . $post->slug . '.xml'); if (strpos($str, '{{ post_excerpt }}') !== false) { if (function_exists('nm_make_excerpt1')) { $excerpt = nm_make_excerpt(strip_decode($postxml->content)); } else { // NM < 3.0 - remove <p>, </p> $excerpt = substr(nm_create_excerpt(strip_decode($postxml->content)), 3, -4); } $str = str_replace('{{ post_excerpt }}', $excerpt, $str); } else { $str = str_replace('{{ post_content }}', strip_decode($postxml->content), $str); } } echo $str; $count++; } $output = ob_get_contents(); ob_end_clean(); echo exec_filter('content', $output); // content filter } }