page.module 4.58 KB
Newer Older
Dries's avatar
Dries committed
1 2 3
<?php
// $Id$

4
function page_help($section = "admin/help#page") {
5 6 7
  $output = "";

  switch ($section) {
8
    case 'admin/help#page':
9 10
      $output .= "<p>The page module is used to create a <i>static page</i>.  Unlike a story, a static 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 static page is usually linked from the main navigation bar, using whatever text the author wishes.  To create a static page without this navigation link, simply skip the link text field.</p>";
      $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 a site administrator.</p>";
11
      $output = t($output);
12
      break;
13
    case 'admin/system/modules#description':
14
      $output = t("Enables the creation of a static pages that can be added to the navigation system.");
15
      break;
16

17 18
  }

19
  return $output;
20 21
}

Dries's avatar
Dries committed
22 23 24 25
function page_perm() {
  return array("maintain static pages");
}

Dries's avatar
Dries committed
26
function page_node($field) {
Dries's avatar
Dries committed
27 28
  $info["name"] = t("static 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 static page by-passes the submission queue.");
Dries's avatar
Dries committed
29 30 31 32 33 34 35 36

  return $info[$field];
}

function page_access($op, $node) {
  if ($op == "view") {
    return $node->status;
  }
Dries's avatar
Dries committed
37 38 39 40 41 42 43 44 45 46 47 48

  if ($op == "create") {
    return user_access("maintain static pages");
  }

  if ($op == "update") {
    return user_access("maintain static pages");
  }

  if ($op == "delete") {
    return user_access("maintain static pages");
  }
Dries's avatar
Dries committed
49 50 51 52 53 54 55 56 57 58 59 60 61
}

function page_save($op, $node) {
  if ($op == "approve") {
    return array("status" => 1);
  }

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

function page_insert($node) {
62
  db_query("INSERT INTO {page} (nid, format, link, description) VALUES (%d, %d, '%s', '%s')", $node->nid, $node->format, $node->link, $node->description);
Dries's avatar
Dries committed
63 64 65
}

function page_update($node) {
66
db_query("UPDATE {page} SET format = %d, link = '%s', description = '%s' WHERE nid = %d", $node->format, $node->link, $node->description, $node->nid);
67
  }
Dries's avatar
Dries committed
68 69

function page_delete(&$node) {
70
  db_query("DELETE FROM {page} WHERE nid = %d", $node->nid);
Dries's avatar
Dries committed
71 72 73
}

function page_load($node) {
74
  $page = db_fetch_object(db_query("SELECT format, link, description FROM {page} WHERE nid = %d", $node->nid));
Dries's avatar
Dries committed
75

Dries's avatar
Dries committed
76 77 78 79
  return $page;
}

function page_link($type) {
Dries's avatar
Dries committed
80 81 82

  $links = array();

83
  if ($type == "page" && user_access("access content")) {
84
    $result = db_query("SELECT n.nid, n.title, p.link, p.description FROM {page} p INNER JOIN {node} n ON p.nid = n.nid WHERE n.status = '1' AND p.link != '' ORDER BY p.link");
Dries's avatar
Dries committed
85
    while ($page = db_fetch_object($result)) {
86
      $links[] = l($page->link, "node/view/$page->nid", array("title" => $page->description));
Dries's avatar
Dries committed
87 88 89
    }
  }

90 91
  if ($type == "system") {
    if (user_access("maintain static pages")) {
92
      menu("node/add/page", t("static page"), "page_page", 0);
93
    }
94 95
  }

Dries's avatar
Dries committed
96
  return $links;
Dries's avatar
Dries committed
97 98
}

99
function page_content($node) {
100 101 102 103
  /*
  ** Extract the page body.  If body is dynamic (using PHP code), the body
  ** will be generated.
  */
104

105 106
  if ($node->format == 0) {
    // HTML type
107 108
    $node->teaser = check_output($node->teaser);
    $node->body = check_output($node->body);
109 110 111
  }
  else {
    // PHP type
Dries's avatar
Dries committed
112 113
    ob_start();
    eval($node->body);
114
    $node->teaser = $node->body = ob_get_contents();
Dries's avatar
Dries committed
115
    ob_end_clean();
Dries's avatar
Dries committed
116
  }
117
  return $node;
Dries's avatar
Dries committed
118 119
}

120 121 122 123 124 125 126
function page_view($node, $main) {
  // prepair the node content
  $node = page_content($node);
  // print the node
  theme("node", $node, $main);
}

Dries's avatar
Dries committed
127
function page_form(&$node, &$help, &$error) {
128 129 130 131
  if (function_exists("taxonomy_node_form")) {
    $output .= implode("", taxonomy_node_form("page", $node));
  }

132
  $output .= form_textarea(t("Body"), "body", $node->body, 60, 20);
133
  $output .= form_textfield(t("Link name"), "link", $node->link, 60, 64, t("To make the page show up in the navigation links, enter the name of the link, otherwise leave blank."));
134
  $output .= form_textfield(t("Link description"), "description", $node->description, 60, 64, t("The description displayed when hovering over the page's link.  Leave blank when you don't want a description."));
135
  $output .= form_select(t("Type"), "format", $node->format, array(0 => "HTML", 1 => "PHP"));
Dries's avatar
Dries committed
136 137 138 139

  return $output;
}

140
function page_validate(&$node) {
141
  if ($node->format && user_access("create php content")) {
142 143 144 145 146 147 148 149
    // Do not filter PHP code, do not auto-extract a teaser
    $node->teaser = $node->body;
  }
  else {
    $node->format = 0;
  }
}

150
?>