93 lines
3.5 KiB
Plaintext
93 lines
3.5 KiB
Plaintext
<?php
|
|
// $Id$
|
|
|
|
function title_help($section) {
|
|
$output = "";
|
|
|
|
switch ($section) {
|
|
case 'admin/system/modules#description':
|
|
$output = t("Enables users to link to stories, articles or similar content by title.");
|
|
break;
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Implementation of hook_link().
|
|
*/
|
|
function title_link($type) {
|
|
if ($type == 'system') {
|
|
menu('title', t('search'), user_access('access content') ? 'title_page' : MENU_DENIED, 0, MENU_HIDE, MENU_LOCKED);
|
|
}
|
|
}
|
|
|
|
function title_page() {
|
|
|
|
$title = urldecode(arg(1));
|
|
$result = db_query("SELECT n.*, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.title = '%s' AND n.status = 1 ORDER BY n.created DESC", $title);
|
|
|
|
$title = trim(str_replace(array('_', '%', '*'), ' ', $title));
|
|
if (db_num_rows($result) == 0) {
|
|
// No node with exact title found, try substring.
|
|
$result = db_query("SELECT n.*, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.title LIKE '%%%s%%' AND n.status = 1 ORDER BY n.created DESC", $title);
|
|
}
|
|
|
|
if (db_num_rows($result) == 0 && module_exist("search")) {
|
|
// still no matches ... return a full text search
|
|
search_view($title);
|
|
}
|
|
else if (db_num_rows($result) == 1) {
|
|
$node = db_fetch_object($result);
|
|
$node = node_load(array("nid" => $node->nid));
|
|
print theme("page", node_show($node, NULL), $node->title);
|
|
}
|
|
else {
|
|
$header = array(t("Type"), t("Title"), t("Author"));
|
|
while ($node = db_fetch_object($result)) {
|
|
$type = ucfirst(module_invoke($node->type, "node", "name"));
|
|
$title = l($node->title, "node/view/$node->nid");
|
|
$author = format_name($node);
|
|
$rows[] = array(array("data" => $type, "class" => "type"), array("data" => $title, "class" => "content"), array("data" => $author, "class" => "author"));
|
|
}
|
|
|
|
$output = "<div id=\"title\">";
|
|
$output .= theme("table", $header, $rows);
|
|
$output .= "</div>";
|
|
|
|
drupal_set_title(t("Matching Posts"));
|
|
print theme("page", $output);
|
|
}
|
|
}
|
|
|
|
function title_filter($op, $text = "") {
|
|
switch ($op) {
|
|
case "name":
|
|
return t("Title filter");
|
|
case "process":
|
|
return _title_filter_process($text);
|
|
case "settings":
|
|
return _title_filter_settings($text);
|
|
default:
|
|
return $text;
|
|
}
|
|
}
|
|
|
|
// filter [node title|description] links. '|description' is optional.
|
|
function _title_filter_process($text) {
|
|
$pattern = '\[([^\|\]\n]+)(?>\|?)([^\]\n]*)\]'; // $1 == title: matches at least 1 char up to the first '|' or ']'
|
|
// $2 == text: matches all after a following '|' (if there is) up to the next ']'. may include '|'s.
|
|
$replacement = 'l(\'$2\' ? \'$2\' : \'$1\', \'title/\'. urlencode(\'$1\'))';
|
|
return preg_replace("/$pattern/e", $replacement, $text);
|
|
}
|
|
|
|
function _title_filter_settings() {
|
|
return form_group(t("Title filter"), t("Wiki-like [node title|text] links are enabled. These shortcuts generate a link labeled 'text' to the node with the title 'node title'. If you omit '|text', the label becomes 'node title'. You may use a substring of a node title if desired. When multiple matching titles are found, a list of matching nodes will be displayed. If no matching titles are found, a full-text search is returned."));
|
|
}
|
|
|
|
function title_compose_tips() {
|
|
return array(t("You may quickly link to another node using this syntax: <em>[node title|text]</em>. This will generate a link labeled 'text' to the node with the title 'node title'. If you omit '|text', the label becomes 'node title'."));
|
|
}
|
|
|
|
?>
|