block.module 6.87 KB
Newer Older
Dries's avatar
 
Dries committed
1
<?php
Dries's avatar
 
Dries committed
2

Dries's avatar
 
Dries committed
3
$module = array("page" => "block_page",
Dries's avatar
 
Dries committed
4
                "help" => "block_help",
Dries's avatar
 
Dries committed
5 6
                "admin" => "block_admin");

Dries's avatar
 
Dries committed
7 8
function block_help() {
 ?>
Dries's avatar
 
Dries committed
9 10 11 12
  <P>Blocks are the boxes visible in the side bars on the left- and right-hand side of the website.  They are either exported by the engine or by any of the active modules.  To really get your teeth into a drupal website, you are going to have to deal with blocks and administering blocks in a fairly sophisticated fashion.  This means you will need to understand how the block placement strategy works.</P>
  <P>The placement of blocks is delegated to the administrator. In most cases (i.e., the "custom" blocks), the user has complete control -- using preferences -- over whether or not they are enabled.</P>
  <P>An administrator can lay out and arrange the available blocks to fit in two regions: "left" and "right".  Regions simply contain blocks.  In addition, an administrator can assign each block (within a region) a weight to sort them vertically.  The heavier blocks will sink and the lighter blocks will be positioned nearer the top.</P>
  <P>As mentioned, blocks may be arranged to fit in two regions: left and right.  For theme builders, each region is identified by a corresponding constant: "left" and "right".</P>
Dries's avatar
 
Dries committed
13
 <?php
Dries's avatar
 
Dries committed
14 15
}

Dries's avatar
 
Dries committed
16 17 18 19
function block_page() {
  global $theme;

  $result = db_query("SELECT * FROM blocks WHERE status = 1 ORDER BY module");
Dries's avatar
 
Dries committed
20

Dries's avatar
 
Dries committed
21 22 23 24
  $theme->header();
  print "<TABLE BORDER=\"0\">\n";
  while ($block = db_fetch_object($result)) {
    if ($state % 3 == 0) print " <TR>\n";
Dries's avatar
 
Dries committed
25
    print "  <TD ALIGN=\"center\" VALIGN=\"top\" WIDTH=\"33%\">\n";
Dries's avatar
 
Dries committed
26 27 28 29 30
    $blocks = module_execute($block->module, "block");
    $theme->box($blocks[$block->offset]["subject"], $blocks[$block->offset]["content"]);
    print " </TD>\n";
    if ($state % 3 == 2) print " </TR>\n";
    $state += 1;
Dries's avatar
 
Dries committed
31
  }
Dries's avatar
 
Dries committed
32 33 34
  print "</TABLE>\n";
  $theme->footer();
}
Dries's avatar
 
Dries committed
35 36 37

function block_admin_save($edit) {
  foreach ($edit as $key=>$value) {
Dries's avatar
 
Dries committed
38
    db_query("UPDATE blocks SET region = '". check_input($value[region]) ."', status = '". check_input($value[status]) ."', weight = '". check_input($value[weight]) ."' WHERE name = '". check_input($key) ."'");
Dries's avatar
 
Dries committed
39 40 41 42 43 44
  }
}

function block_admin_display() {
  global $repository;

Dries's avatar
 
Dries committed
45
  $result = db_query("SELECT * FROM blocks ORDER BY module");
Dries's avatar
 
Dries committed
46

Dries's avatar
 
Dries committed
47 48 49
  // Generate output:
  $output .= "<FORM ACTION=\"admin.php?mod=block\" METHOD=\"post\">\n";
  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
Dries's avatar
 
Dries committed
50
  $output .= " <TR><TH>block</TH><TH>module</TH><TH>status</TH><TH>weight</TH><TH>region</TH></TR>\n";
Dries's avatar
 
Dries committed
51

Dries's avatar
 
Dries committed
52 53 54
  while ($block = db_fetch_object($result)) {
    $module = ($repository[$block->module]["admin"]) ? "<A HREF=\"admin.php?mod=$block->module\">$block->module</A>" : $block->module;

Dries's avatar
 
Dries committed
55
    $status .= "<SELECT NAME=\"edit[$block->name][status]\">\n";
Dries's avatar
 
Dries committed
56 57
    $status .= " <OPTION VALUE=\"2\"". (($block->status == 2) ? " SELECTED" : "") .">enabled: always</OPTION>\n";
    $status .= " <OPTION VALUE=\"1\"". (($block->status == 1) ? " SELECTED" : "") .">enabled: custom</OPTION>\n";
Dries's avatar
 
Dries committed
58 59 60
    $status .= " <OPTION VALUE=\"0\"". (($block->status == 0) ? " SELECTED" : "") .">disabled</OPTION>\n";
    $status .= "</SELECT>\n";

Dries's avatar
 
Dries committed
61 62 63 64 65 66 67 68 69 70 71 72
    $weight .= "<SELECT NAME=\"edit[$block->name][weight]\">\n";
    for ($count = 0; $count < 10; $count++) {
      $weight .= "<OPTION VALUE=\"$count\"". (($block->weight == $count) ? " SELECTED" : "") .">$count</OPTION>\n";
    }
    $weight .= "</SELECT>\n";

    $region .= "<SELECT NAME=\"edit[$block->name][region]\">\n";
    $region .= " <OPTION VALUE=\"0\"". (($block->region == 0) ? " SELECTED" : "") .">left</OPTION>\n";
    $region .= " <OPTION VALUE=\"1\"". (($block->region == 1) ? " SELECTED" : "") .">right</OPTION>\n";
    $region .= "</SELECT>\n";

    $output .= " <TR><TD>". $block->name ."</TD><TD ALIGN=\"center\">$module</TD><TD>$status</TD><TD>$weight</TD><TD>$region</TD></TR>\n";
Dries's avatar
 
Dries committed
73

Dries's avatar
 
Dries committed
74
    unset($status);
Dries's avatar
 
Dries committed
75 76
    unset($weight);
    unset($region);
Dries's avatar
 
Dries committed
77
  }
Dries's avatar
 
Dries committed
78

Dries's avatar
 
Dries committed
79 80 81 82 83 84 85
  $output .= "</TABLE>\n";
  $output .= "<INPUT NAME=\"op\" TYPE=\"submit\" VALUE=\"Save blocks\">\n";
  $output .= "</FORM>\n";

  print $output;
}

Dries's avatar
 
Dries committed
86 87 88 89 90 91 92 93 94 95 96
function block_admin_overview() {

  $result = db_query("SELECT * FROM blocks WHERE status > 0 AND region = 0 ORDER BY weight");
  $lblocks .= "<TABLE BORDER=\"0\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  while ($block = db_fetch_object($result)) $lblocks .= " <TR><TD NOWRAP>". ($block->status == 2 ? "<B>$block->name</B>" : $block->name) ."</TD><TD>$block->weight</TD></TR>\n";
  $lblocks .= "</TABLE>\n";

  $result = db_query("SELECT * FROM blocks WHERE status > 0 AND region = 1 ORDER BY weight");
  $rblocks .= "<TABLE BORDER=\"0\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  while ($block = db_fetch_object($result)) $rblocks .= " <TR><TD NOWRAP>". ($block->status == 2 ? "<B>$block->name</B>" : $block->name) ."</TD><TD>$block->weight</TD></TR>\n";
  $rblocks .= "</TABLE>\n";
Dries's avatar
 
Dries committed
97

Dries's avatar
 
Dries committed
98 99
  $output .= "<P><B>layout 1:</B></P>\n";
  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
Dries's avatar
 
Dries committed
100
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"3\">header</TD></TR>\n";
Dries's avatar
 
Dries committed
101
  $output .= " <TR><TD>\n". ($lblocks ? $lblocks : "&nbsp;") ."</TD><TD WIDTH=\"300\">&nbsp;</TD><TD>\n". ($rblocks ? $rblocks : "&nbsp;") ."</TD></TR>\n";
Dries's avatar
 
Dries committed
102
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"3\">footer</TD></TR>\n";
Dries's avatar
 
Dries committed
103 104 105 106 107 108 109 110 111
  $output .= "</TABLE>\n";

  $result = db_query("SELECT * FROM blocks WHERE status > 0 ORDER BY weight");
  $blocks .= "<TABLE BORDER=\"0\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  while ($block = db_fetch_object($result)) $blocks .= " <TR><TD NOWRAP>". ($block->status == 2 ? "<B>$block->name</B>" : $block->name) ."</TD><TD>$block->weight</TD></TR>\n";
  $blocks .= "</TABLE>\n";

  $output .= "<P><B>layout 2:</B></P>\n";
  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
Dries's avatar
 
Dries committed
112
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"2\">header</TD></TR>\n";
Dries's avatar
 
Dries committed
113
  $output .= " <TR><TD WIDTH=\"400\">&nbsp;</TD><TD>\n". ($blocks ? $blocks : "&nbsp;") ."</TD></TR>\n";
Dries's avatar
 
Dries committed
114
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"2\">footer</TD></TR>\n";
Dries's avatar
 
Dries committed
115 116 117 118
  $output .= "</TABLE>\n";

  $output .= "<P><B>layout 3:</B></P>\n";
  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
Dries's avatar
 
Dries committed
119
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"2\">header</TD></TR>\n";
Dries's avatar
 
Dries committed
120
  $output .= " <TR><TD>\n". ($blocks ? $blocks : "&nbsp;") ."</TD><TD WIDTH=\"400\">&nbsp;</TD></TR>\n";
Dries's avatar
 
Dries committed
121
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"2\">footer</TD></TR>\n";
Dries's avatar
 
Dries committed
122 123 124 125 126
  $output .= "</TABLE>\n";

  print $output;
}

Dries's avatar
 
Dries committed
127 128
function block_admin() {
  global $op, $edit;
Dries's avatar
 
Dries committed
129

Dries's avatar
 
Dries committed
130
  print "<SMALL><A HREF=\"admin.php?mod=block\">configure</A> | <A HREF=\"admin.php?mod=block&op=overview\">overview</A> | <A HREF=\"admin.php?mod=block&op=help\">help</A></SMALL><HR>\n";
Dries's avatar
 
Dries committed
131 132

  switch ($op) {
Dries's avatar
 
Dries committed
133 134 135 136 137 138
    case "help":
      block_help();
      break;
    case "overview":
      block_admin_overview();
      break;
Dries's avatar
 
Dries committed
139 140
    case "Save blocks":
      block_admin_save($edit);
Dries's avatar
 
Dries committed
141 142 143
      // fall through
    default:
      block_admin_display();
Dries's avatar
 
Dries committed
144
  }
Dries's avatar
 
Dries committed
145

Dries's avatar
 
Dries committed
146 147 148
}

?>