Example #1
0
function nm_env_check()
{
    $env_ok = file_exists(NMPOSTPATH) || nm_create_dir(NMPOSTPATH);
    if ($env_ok && !file_exists(NMBACKUPPATH)) {
        $env_ok = nm_create_dir(NMBACKUPPATH);
    }
    if ($env_ok && !file_exists(NMDATAPATH)) {
        if ($env_ok = nm_create_dir(NMDATAPATH)) {
            nm_update_cache();
        }
    }
    if (!$env_ok) {
        echo '<h3>News Manager</h3><p>' . i18n_r('news_manager/ERROR_ENV') . '</p>';
    }
    return $env_ok;
}
Example #2
0
function nm_get_posts($all = false)
{
    if (!$all) {
        static $posts = null;
        // lazy initialization
        if ($posts !== null) {
            return $posts;
        }
        // if already loaded, return
    }
    if (!file_exists(NMPOSTCACHE)) {
        nm_update_cache();
    }
    $data = @getXML(NMPOSTCACHE);
    $now = time();
    $posts = array();
    foreach ($data->item as $item) {
        if ($all || $item->private != 'Y' && strtotime($item->date) < $now) {
            $posts[] = $item;
        }
    }
    return $posts;
}
Example #3
0
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&amp;edit"><?php 
    i18n('news_manager/NEW_POST');
    ?>
</a>
    <a href="load.php?id=news_manager&amp;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')));
        ?>
..." />
        &nbsp;
        <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&amp;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&amp;delete=<?php 
            echo $post->slug;
            ?>
" class="nm_delconfirm" title="<?php 
            i18n('news_manager/DELETE_POST');
            ?>
: <?php 
            echo $title;
            ?>
?">
            &times;
          </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 
    }
}
Example #4
0
function nm_restore_post($backup)
{
    if (strpos($backup, ':')) {
        # revert to the previous version of a post
        list($current, $backup) = explode(':', $backup);
        $current .= '.xml';
        $backup .= '.xml';
        if (dirname(realpath(NMPOSTPATH . $current)) == realpath(NMPOSTPATH) && dirname(realpath(NMBACKUPPATH . $backup)) == realpath(NMBACKUPPATH)) {
            // no path traversal
            if (file_exists(NMPOSTPATH . $current) && file_exists(NMBACKUPPATH . $backup)) {
                $status = unlink(NMPOSTPATH . $current) && nm_rename_file(NMBACKUPPATH . $backup, NMPOSTPATH . $backup) && nm_update_cache();
            }
        }
    } else {
        # restore the deleted post
        $backup .= '.xml';
        if (dirname(realpath(NMBACKUPPATH . $backup)) == realpath(NMBACKUPPATH)) {
            // no path traversal
            if (file_exists(NMBACKUPPATH . $backup)) {
                $status = nm_rename_file(NMBACKUPPATH . $backup, NMPOSTPATH . $backup) && nm_update_cache();
            }
        }
    }
    if (@$status) {
        nm_generate_sitemap();
        nm_display_message(i18n_r('news_manager/SUCCESS_RESTORE'));
    } else {
        nm_display_message(i18n_r('news_manager/ERROR_RESTORE'), true);
    }
}