Ejemplo n.º 1
0
 /**
  * Function: submit
  * Submits a post to the blog owner.
  */
 public function route_submit()
 {
     if (!Visitor::current()->group->can("submit_article")) {
         show_403(__("Access Denied"), __("You do not have sufficient privileges to submit articles."));
     }
     if (!empty($_POST)) {
         if (!isset($_POST['hash']) or $_POST['hash'] != Config::current()->secure_hashkey) {
             show_403(__("Access Denied"), __("Invalid security key."));
         }
         if (empty($_POST['body'])) {
             Flash::notice(__("Post body can't be empty!"), redirect("/"));
         }
         if (!isset($_POST['draft'])) {
             $_POST['draft'] = "true";
         }
         $_POST['body'] = "{$_POST['body']}\n\n\n{$_POST['name']}\n{$_POST['email']}\n";
         $post = Feathers::$instances[$_POST['feather']]->submit();
         if (!in_array(false, $post)) {
             Flash::notice(__("Thank you for your submission. ", "submission"), "/");
         }
     }
     if (Theme::current()->file_exists("forms/post/submit")) {
         MainController::current()->display("forms/post/submit", array("feather" => $feather), __("Submit a Text Post"));
     } else {
         require "pages/submit.php";
     }
 }
Ejemplo n.º 2
0
 function __construct()
 {
     parent::__construct();
     $theme = Theme::current();
     $thname = $theme[0];
     // setTemplateDir can be set to an array, which Smarty will parse in order.
     // The order is thus very important here
     $template_dirs = array('theme' => "view/theme/{$thname}/tpl/");
     if (x(\App::$theme_info, "extends")) {
         $template_dirs = $template_dirs + array('extends' => "view/theme/" . \App::$theme_info["extends"] . "/tpl/");
     }
     $template_dirs = $template_dirs + array('base' => 'view/tpl/');
     $this->setTemplateDir($template_dirs);
     $basecompiledir = \App::$config['system']['smarty3_folder'];
     $this->setCompileDir($basecompiledir . '/compiled/');
     $this->setConfigDir($basecompiledir . '/config/');
     $this->setCacheDir($basecompiledir . '/cache/');
     $this->left_delimiter = \App::get_template_ldelim('smarty3');
     $this->right_delimiter = \App::get_template_rdelim('smarty3');
     // Don't report errors so verbosely
     $this->error_reporting = E_ALL & ~E_NOTICE;
 }
Ejemplo n.º 3
0
<?php

$config = Config::current();
$trigger = Trigger::current();
$theme = Theme::current();
$title = !empty($_GET['title']) ? ": " . html_entity_decode($_GET['title']) : "";
echo "<" . '?xml version="1.0" encoding="utf-8"?' . ">\r";
?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title><?php 
echo $config->name . $title;
?>
</title>
<?php 
if (!empty($config->description)) {
    ?>
    <subtitle><?php 
    echo fix($config->description);
    ?>
</subtitle>
<?php 
}
?>
    <id><?php 
echo fix(self_url());
?>
</id>
    <updated><?php 
echo date("c", $latest_timestamp);
?>
</updated>
Ejemplo n.º 4
0
Archivo: Admin.php Proyecto: eadz/chyrp
 /**
  * Function: display
  * Renders the page.
  *
  * Parameters:
  *     $action - The template file to display, in (theme dir)/pages.
  *     $context - Context for the template.
  *     $title - The title for the page. Defaults to a camlelization of the action, e.g. foo_bar -> Foo Bar.
  */
 public function display($action, $context = array(), $title = "")
 {
     $this->displayed = true;
     fallback($title, camelize($action, true));
     $this->context = array_merge($context, $this->context);
     $trigger = Trigger::current();
     $trigger->filter($this->context, array("admin_context", "admin_context_" . str_replace("/", "_", $action)));
     # Are there any extension-added pages?
     foreach (array("write" => array(), "manage" => array("import", "export"), "settings" => array(), "extend" => array("modules", "feathers", "themes")) as $main_nav => $val) {
         ${$main_nav} = $val;
         $trigger->filter(${$main_nav}, $main_nav . "_pages");
     }
     $visitor = Visitor::current();
     $route = Route::current();
     $this->context["theme"] = Theme::current();
     $this->context["flash"] = Flash::current();
     $this->context["trigger"] = $trigger;
     $this->context["title"] = $title;
     $this->context["site"] = Config::current();
     $this->context["visitor"] = $visitor;
     $this->context["logged_in"] = logged_in();
     $this->context["route"] = $route;
     $this->context["hide_admin"] = isset($_SESSION["hide_admin"]);
     $this->context["now"] = time();
     $this->context["version"] = CHYRP_VERSION;
     $this->context["debug"] = DEBUG;
     $this->context["feathers"] = Feathers::$instances;
     $this->context["modules"] = Modules::$instances;
     $this->context["admin_theme"] = $this->admin_theme;
     $this->context["theme_url"] = Config::current()->chyrp_url . "/admin/themes/" . $this->admin_theme;
     $this->context["POST"] = $_POST;
     $this->context["GET"] = $_GET;
     $this->context["navigation"] = array();
     $show = array("write" => array($visitor->group->can("add_draft", "add_post", "add_page")), "manage" => array($visitor->group->can("view_own_draft", "view_draft", "edit_own_draft", "edit_own_post", "edit_post", "delete_own_draft", "delete_own_post", "delete_post", "add_page", "edit_page", "delete_page", "add_user", "edit_user", "delete_user", "add_group", "edit_group", "delete_group")), "settings" => array($visitor->group->can("change_settings")), "extend" => array($visitor->group->can("toggle_extensions")));
     foreach ($show as $name => &$arr) {
         $trigger->filter($arr, $name . "_nav_show");
     }
     $this->context["navigation"]["write"] = array("title" => __("Write"), "show" => in_array(true, $show["write"]), "selected" => in_array($action, $write) or match("/^write_/", $action));
     $this->context["navigation"]["manage"] = array("title" => __("Manage"), "show" => in_array(true, $show["manage"]), "selected" => in_array($action, $manage) or match(array("/^manage_/", "/^edit_/", "/^delete_/", "/^new_/"), $action));
     $this->context["navigation"]["settings"] = array("title" => __("Settings"), "show" => in_array(true, $show["settings"]), "selected" => in_array($action, $settings) or match("/_settings\$/", $action));
     $this->context["navigation"]["extend"] = array("title" => __("Extend"), "show" => in_array(true, $show["extend"]), "selected" => in_array($action, $extend));
     $this->subnav_context($route->action);
     $trigger->filter($this->context["selected"], "nav_selected");
     $this->context["sql_debug"] = SQL::current()->debug;
     $file = MAIN_DIR . "/admin/themes/%s/pages/" . $action . ".twig";
     $template = file_exists(sprintf($file, $this->admin_theme)) ? sprintf($file, $this->admin_theme) : sprintf($file, "default");
     $config = Config::current();
     if (!file_exists($template)) {
         foreach (array(MODULES_DIR => $config->enabled_modules, FEATHERS_DIR => $config->enabled_feathers) as $path => $try) {
             foreach ($try as $extension) {
                 if (file_exists($path . "/" . $extension . "/pages/admin/" . $action . ".twig")) {
                     $template = $path . "/" . $extension . "/pages/admin/" . $action . ".twig";
                 }
             }
         }
         if (!file_exists($template)) {
             error(__("Template Missing"), _f("Couldn't load template: <code>%s</code>", array($template)));
         }
     }
     # Try the theme first
     try {
         $this->theme->getTemplate($template)->display($this->context);
     } catch (Exception $t) {
         # Fallback to the default
         try {
             $this->default->getTemplate($template)->display($this->context);
         } catch (Exception $e) {
             $prettify = preg_replace("/([^:]+): (.+)/", "\\1: <code>\\2</code>", $e->getMessage());
             $trace = debug_backtrace();
             $twig = array("file" => $e->filename, "line" => $e->lineno);
             array_unshift($trace, $twig);
             error(__("Error"), $prettify, $trace);
         }
     }
 }
Ejemplo n.º 5
0
 /**
  * Function: theme_exists
  * Checks if the current post's feather theme file exists.
  */
 public function theme_exists()
 {
     return !$this->no_results and Theme::current()->file_exists("feathers/" . $this->feather);
 }
Ejemplo n.º 6
0
 /**
  * Function: display
  * Display the page.
  *
  * If "posts" is in the context and the visitor requested a feed, they will be served.
  *
  * Parameters:
  *     $file - The theme file to display.
  *     $context - The context for the file.
  *     $title - The title for the page.
  */
 public function display($file, $context = array(), $title = "")
 {
     if (is_array($file)) {
         for ($i = 0; $i < count($file); $i++) {
             $check = ($file[$i][0] == "/" or preg_match("/[a-zA-Z]:\\\\/", $file[$i])) ? $file[$i] : THEME_DIR . "/" . $file[$i];
             if (file_exists($check . ".twig") or $i + 1 == count($file)) {
                 return $this->display($file[$i], $context, $title);
             }
         }
     }
     $this->displayed = true;
     $route = Route::current();
     $trigger = Trigger::current();
     # Serve feeds.
     if ($this->feed) {
         if ($trigger->exists($route->action . "_feed")) {
             return $trigger->call($route->action . "_feed", $context);
         }
         if (isset($context["posts"])) {
             return $this->feed($context["posts"]);
         }
     }
     $this->context = array_merge($context, $this->context);
     $visitor = Visitor::current();
     $config = Config::current();
     $theme = Theme::current();
     $theme->title = $title;
     $this->context["theme"] = $theme;
     $this->context["flash"] = Flash::current();
     $this->context["trigger"] = $trigger;
     $this->context["modules"] = Modules::$instances;
     $this->context["feathers"] = Feathers::$instances;
     $this->context["title"] = $title;
     $this->context["site"] = $config;
     $this->context["visitor"] = $visitor;
     $this->context["route"] = Route::current();
     $this->context["hide_admin"] = isset($_COOKIE["hide_admin"]);
     $this->context["version"] = CHYRP_VERSION;
     $this->context["now"] = time();
     $this->context["debug"] = DEBUG;
     $this->context["POST"] = $_POST;
     $this->context["GET"] = $_GET;
     $this->context["sql_queries"] =& SQL::current()->queries;
     $this->context["visitor"]->logged_in = logged_in();
     $this->context["enabled_modules"] = array();
     foreach ($config->enabled_modules as $module) {
         $this->context["enabled_modules"][$module] = true;
     }
     $context["enabled_feathers"] = array();
     foreach ($config->enabled_feathers as $feather) {
         $this->context["enabled_feathers"][$feather] = true;
     }
     $this->context["sql_debug"] =& SQL::current()->debug;
     $trigger->filter($this->context, array("main_context", "main_context_" . str_replace("/", "_", $file)));
     $file = ($file[0] == "/" or preg_match("/[a-zA-Z]:\\\\/", $file)) ? $file : THEME_DIR . "/" . $file;
     if (!file_exists($file . ".twig")) {
         error(__("Template Missing"), _f("Couldn't load template: <code>%s</code>", array($file . ".twig")));
     }
     try {
         return $this->twig->getTemplate($file . ".twig")->display($this->context);
     } catch (Exception $e) {
         $prettify = preg_replace("/([^:]+): (.+)/", "\\1: <code>\\2</code>", $e->getMessage());
         $trace = debug_backtrace();
         $twig = array("file" => $e->filename, "line" => $e->lineno);
         array_unshift($trace, $twig);
         error(__("Error"), $prettify, $trace);
     }
 }
Ejemplo n.º 7
0
/**
 * Function: show_404
 * Shows a 404 error message and immediately exits.
 *
 * Parameters:
 *     $scope - An array of values to extract into the scope.
 */
function show_404()
{
    header("HTTP/1.1 404 Not Found");
    if (!defined('CHYRP_VERSION')) {
        exit("404 Not Found");
    }
    $theme = Theme::current();
    $main = MainController::current();
    Trigger::current()->call("not_found");
    if ($theme->file_exists("pages/404")) {
        $main->display("pages/404", array(), "404");
    } else {
        error(__("404 Not Found"), __("The requested page could not be located."));
    }
    exit;
}
Ejemplo n.º 8
0
    static function ajax()
    {
        header("Content-Type: application/x-javascript", true);
        $config = Config::current();
        $sql = SQL::current();
        $trigger = Trigger::current();
        $visitor = Visitor::current();
        $theme = Theme::current();
        $main = MainController::current();
        switch ($_POST['action']) {
            case "reload_comments":
                $post = new Post($_POST['post_id']);
                if ($post->no_results) {
                    break;
                }
                if ($post->latest_comment > $_POST['last_comment']) {
                    $new_comments = $sql->select("comments", "id, created_at", array("post_id" => $_POST['post_id'], "created_at >" => $_POST['last_comment'], "status not" => "spam", "status != 'denied' OR (\n                                                                (\n                                                                    user_id != 0 AND\n                                                                    user_id = :visitor_id\n                                                                ) OR (\n                                                                    id IN " . self::visitor_comments() . "\n                                                                )\n                                                            )"), "created_at ASC", array(":visitor_id" => $visitor->id));
                    $ids = array();
                    $last_comment = "";
                    while ($the_comment = $new_comments->fetchObject()) {
                        $ids[] = $the_comment->id;
                        if (strtotime($last_comment) < strtotime($the_comment->created_at)) {
                            $last_comment = $the_comment->created_at;
                        }
                    }
                    ?>
{ comment_ids: [ <?php 
                    echo implode(", ", $ids);
                    ?>
 ], last_comment: "<?php 
                    echo $last_comment;
                    ?>
" }
<?php 
                }
                break;
            case "show_comment":
                $comment = new Comment($_POST['comment_id']);
                $trigger->call("show_comment", $comment);
                $main->display("content/comment", array("comment" => $comment));
                break;
            case "delete_comment":
                $comment = new Comment($_POST['id']);
                if (!$comment->deletable()) {
                    break;
                }
                Comment::delete($_POST['id']);
                break;
            case "edit_comment":
                $comment = new Comment($_POST['comment_id'], array("filter" => false));
                if (!$comment->editable()) {
                    break;
                }
                if ($theme->file_exists("forms/comment/edit")) {
                    $main->display("forms/comment/edit", array("comment" => $comment));
                } else {
                    require "edit_form.php";
                }
                break;
        }
    }
Ejemplo n.º 9
0
function get_current_theme()
{
    return Theme::current();
}