Skip to content
page.module 4.71 KiB
Newer Older
Dries Buytaert's avatar
 
Dries Buytaert committed
<?php
// $Id$

Dries Buytaert's avatar
 
Dries Buytaert committed
function page_help() {
  $output .= "<p>The page module is used to create a <i>site page</i>.  Unlike a story, a site page is a persistent web page on your site which usually shortcuts the typical lifecycle of user generated content (i.e. submit -&gt; moderate -&gt; post -&gt; comment).  A site page is usually linked from the main navigation bar, using whatever text the author wishes.  To create a site page without this navigation link, simply skip the form field which requests link text.  Administrators are the exclusive authors of site pages (i.e. requires the <i>administer nodes</i> in ". la("permission", array("mod" => "user", "op" => "permission")) .").</p>";
Dries Buytaert's avatar
 
Dries Buytaert committed
  $output .= "<p>Site pages, unlike many other forms of Drupal content, may be made of PHP code in addition to HTML and text. All Drupal objects and functions are available to the Site Page author.</p>";
  return $output;
}

function page_system($field){
  $system["description"] = t("Enables the creation of a static pages that can be added to the navigation system.");
Dries Buytaert's avatar
 
Dries Buytaert committed
function page_node($field) {
Dries Buytaert's avatar
 
Dries Buytaert committed
  $info["name"] = t("site page");
  $info["description"] = t("If you just want to add a page with a link in the menu to your site, this would be the best choice.  Unlike a story, a site page by-passes the submission queue.");
Dries Buytaert's avatar
 
Dries Buytaert committed

  return $info[$field];
}

function page_access($op, $node) {
  if ($op == "view") {
    return $node->status;
  }
}

function page_save($op, $node) {
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
  if ($op == "approve") {
    return array("status" => 1);
  }

  if ($op == "create") {
    return array("body" => filter($node->body), "teaser" => filter($node->teaser), "format", "link");
Dries Buytaert's avatar
 
Dries Buytaert committed
  }

  if ($op == "decline") {
    return array("status" => 0);
  }

  if ($op == "update") {
    return array("body" => filter($node->body), "teaser" => filter($node->teaser), "format", "link");
Dries Buytaert's avatar
 
Dries Buytaert committed
  }
}

function page_insert($node) {
  db_query("INSERT INTO page (nid, format, link) VALUES ('$node->nid', '$node->format', '$node->link')");
}

function page_update($node) {
  db_query("UPDATE page SET format = '$node->format', link = '$node->link' WHERE nid = '$node->nid'");
}

function page_delete(&$node) {
  db_query("DELETE FROM page WHERE nid = '$node->nid'");
}

function page_load($node) {
  $page = db_fetch_object(db_query("SELECT format, link FROM page WHERE nid = '$node->nid'"));
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
  return $page;
}

function page_link($type) {
  if ($type == "page" && user_access("access content")) {
Dries Buytaert's avatar
 
Dries Buytaert committed
    $result = db_query("SELECT n.nid, p.link FROM page p LEFT JOIN node n ON p.nid = n.nid WHERE n.status = '1' AND p.link != '' ORDER BY p.link");
Dries Buytaert's avatar
 
Dries Buytaert committed
    while ($page = db_fetch_object($result)) {
Dries Buytaert's avatar
 
Dries Buytaert committed
      $links[] = l($page->link, array("id" => $page->nid));
Dries Buytaert's avatar
 
Dries Buytaert committed
    }
  }

Dries Buytaert's avatar
 
Dries Buytaert committed
  if ($type == "menu.create" && user_access("administer nodes")) {
    $links[] = lm(t("create site page"), array("mod" => "node", "op" => "add", "type" => "page"), "", array("title" => t("Add a new site page.")));
Dries Buytaert's avatar
 
Dries Buytaert committed
  }

Dries Buytaert's avatar
 
Dries Buytaert committed
  return $links ? $links : array();
}

Dries Buytaert's avatar
 
Dries Buytaert committed
function page_body($node) {
  global $theme, $op;

Dries Buytaert's avatar
 
Dries Buytaert committed
  if ($node->format) {
Dries Buytaert's avatar
 
Dries Buytaert committed
    /*
    ** Make sure only authorized users can preview static (PHP)
    ** pages.
    */

    if ($op == t("Preview")) {
Dries Buytaert's avatar
 
Dries Buytaert committed
      if (user_access("administer nodes")) {
Dries Buytaert's avatar
 
Dries Buytaert committed
        $node->body = stripslashes($node->body);  // see also page_form()
      }
      else {
        return;
      }
    }

Dries Buytaert's avatar
 
Dries Buytaert committed
    ob_start();
    eval($node->body);
    $output = ob_get_contents();
    ob_end_clean();
Dries Buytaert's avatar
 
Dries Buytaert committed
  }
Dries Buytaert's avatar
 
Dries Buytaert committed
  else {
    $output = check_output($node->body, 1);
  }

  return $output;
}

function page_view($node, $main = 0) {
  global $theme;

Dries Buytaert's avatar
 
Dries Buytaert committed
    $theme->node($node, $main);
    /*
    ** Extract the page body.  If body is dynamic (using PHP code), the body
    ** will be generated.
    */
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed

    $output .= "<div align=\"right\">". $theme->links(link_node($node, $main)) ."</div>";
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
}

function page_form(&$node, &$help, &$error) {
Dries Buytaert's avatar
 
Dries Buytaert committed
  global $op;
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
  if ($node->format) {
    if ($op != t("Preview")) {
      $node->body = addslashes($node->body);
    }
  }
  else {
    if ($node->teaser) {
      $output .= form_textarea(t("Teaser"), "teaser", $node->teaser, 60, 5, $error["teaser"]);
    }
Dries Buytaert's avatar
 
Dries Buytaert committed
  }
Dries Buytaert's avatar
 
Dries Buytaert committed

  if (function_exists("taxonomy_node_form")) {
    $output .= implode("", taxonomy_node_form("page", $node));
  }

Dries Buytaert's avatar
 
Dries Buytaert committed
  $output .= form_textarea(t("Body"), "body", $node->body, 60, 20);
  $output .= form_textfield(t("Navigation link header"), "link", $node->link, 60, 64, t("To make the page show up on the navigation links enter the name of the link, otherwise leave blank."));
  $output .= form_select(t("Type"), "format", $node->format, array(0 => "HTML / text", 1 => "PHP"));
Dries Buytaert's avatar
 
Dries Buytaert committed

  return $output;
}

Dries Buytaert's avatar
Dries Buytaert committed
?>