All pastes #280314 Raw Edit

Stuff

public php v1 · immutable
·published 2006-12-15 20:37 UTC
rendered paste body
function views_bookmark_page($how = 'mark', $nid = '', $vbid = '') {  // anonymous users can't create bookmarks with this system.  global $user;  if (!$user || !$user->uid) {    return drupal_access_denied();   }  $roles = array_keys($user->roles);  if ($nid && $node = node_load($nid));  if (!$node)  {    return drupal_access_denied();   }  $result = db_result(db_query("SELECT type FROM {views_bookmark_nodetypes} WHERE vbid = %d AND type = '%s'", $vbid, $node->type));  if (!$result) {    return drupal_access_denied();  }  $bookmark = db_fetch_object(db_query("SELECT * FROM {views_bookmarks} WHERE vbid = %d", $vbid));  $access = explode(', ', $bookmark->roles);  if (!array_intersect($access, $roles)) {    return drupal_access_denied();  }  // Finally! We have all our ducks in a row. Almost.  $uid = $bookmark->global ? 0 : $user->uid;  $bookmarked = db_result(db_query("SELECT vbid FROM {views_bookmark_nodes} WHERE vbid = %d AND uid = %d AND nid = %d", $vbid, $uid, $nid));  if ($bookmarked && $how == 'unmark') {    db_query("DELETE FROM {views_bookmark_nodes} WHERE vbid = %d AND uid = %d AND nid = %d", $vbid, $uid, $nid);  }  elseif (!$bookmarked && $how == 'mark') {    db_query("INSERT INTO {views_bookmark_nodes} (vbid, uid, nid) VALUES (%d, %d, %d)", $vbid, $uid, $nid);  }    // Update the bookmark count for this node  $count = db_result(db_query('SELECT count(*) FROM {views_bookmark_nodes} WHERE vbid = %d AND nid = %d', $vbid, $nid));  $result = db_query('UPDATE {views_bookmark_node_count} set count = %d WHERE vbid = %d AND nid = %d', $count, $vbid, $nid);  if (!db_affected_rows()) {    db_query('INSERT INTO {views_bookmark_node_count} VALUES (%d, %d, %d)', $vbid, $nid, $count);  }    drupal_goto(referer_uri());}//EATE TABLE views_bookmark_nodes_count (//                  vbid int(10) unsigned NOT NULL default '0',//                  nid int(10) unsigned NOT NULL default '0',//                  count int(10) unsigned NOT NULL default '0',//                  KEY (vbid, nid)// ---------------------------------------------------------------------------// Views hooks/** * Implementation of hook_views_tables */function views_bookmark_views_tables() {  // This creates a pseudo table for each bookmark. Doing anything  // less would make it harder to filter on multiple bookmarks.  $result = db_query("SELECT * from {views_bookmarks} ORDER BY title");  while ($bookmark = db_fetch_object($result)) {    $table = array(      "name" => "views_bookmark_nodes",       "provider" => "views_bookmark",      "join" => array(        "left" => array(          "table" => "node",          "field" => "nid"        ),         "right" => array(          "field" => "nid"        ),        "extra" => array(          'vbid' => $bookmark->vbid        ),      ),      "fields" => array(        "vbid" => array(          'name' => t("Bookmark: Ops for %s", array("%s" => $bookmark->title)),          'handler' => 'views_bookmark_ops_handler',          'query_handler' => 'views_bookmark_ops_qhandler',          'vbid' => $bookmark->vbid,        ),      ),      "filters" => array(        "uid" => array(          'name' => t("Bookmark: %s", array("%s" => $bookmark->title)),          'list' => array('NULL' => 'Marked'),          // Do not be alarmed by the reversal. IS NOT NULL means          // is marked.          'operator' => array('IS NOT' => "Is", 'IS' => "Is Not"),          'handler' => 'views_bookmark_handler',          'help' => t("This will filter a only nodes that contain the '%s' mark.", array("%s" => $bookmark->title)),        ),      ),    );    // if bookmark isn't global, ensure it matches only for the current    // user.    if (!$bookmark->global) {      $table['join']['extra']['uid'] = "***CURRENT_USER***";    }    $tables["views_bookmark_nodes_$bookmark->vbid"] = $table;    $table = array(      "name" => "views_bookmarks",       "provider" => "views_bookmark",      "join" => array(        "left" => array(          "table" => "views_bookmark_nodes_$bookmark->vbid", // pseudo          "field" => "vbid"        ),         "right" => array(          "field" => "vbid"        ), // no need for extra because the table it links through already has that      ),    );    $tables["views_bookmarks_$bookmark->vbid"] = $table;    $table = array(      "name" => "views_bookmark_nodetypes",       "provider" => "views_bookmark",      "join" => array(        "left" => array(          "table" => "node",          "field" => "type"        ),         "right" => array(          "field" => "type"        ),        "extra" => array(          'vbid' => $bookmark->vbid        ),      ),    );    $tables["views_bookmark_nodetypes_$bookmark->vbid"] = $table;        $table = array(      "name" => "views_bookmark_node_count",       "provider" => "views_bookmark",      "join" => array(        "left" => array(          "table" => "node",          "field" => "nid"        ),         "right" => array(          "field" => "nid"        ),        "extra" => array(          'vbid' => $bookmark->vbid        ),      ),      "fields" => array(        "count" => array(          'name' => t("Bookmark: Count for %s", array("%s" => $bookmark->title)),          'handler' => 'views_bookmark_ops_handler',          'query_handler' => 'views_bookmark_ops_qhandler',          'vbid' => $bookmark->vbid,        ),      ),    );    $tables["views_bookmark_node_count"] = $table;      }  return $tables;}