<?php /* Version history: - 0.2 (2003-10-05): fixed layout problems : * each catagory is rendered as a separate <ul></ul> element * catagory titles are rendered as the first <li> element with class="title" CSS style sheet formatting can be applied more specifically to the title of the catagory known problems: * the redirect.php is still a dummy.. for now.. using index.php as a place holder - 0.1 (2003-03-03): initial version */ class NP_LinkDB extends NucleusPlugin { function getName() { return 'Link Database'; } function getAuthor() { return 'Matt Stine'; } function getURL() { return 'http://www.mattsbistro.com/'; } function getVersion() { return '0.1'; } function getDescription() { return 'List can be shown using <%LinkDB%>, Admins can add links (<%LinkDB(linkform)%>) and categories (<%LinkDB(catform)%>) which appear alphabetically by category then by link. Admins can also delete links and categories (cascading) from the list.'; } function getTableList() { return array('nucleus_plug_linkdb_links','nucleus_plug_linkdb_categories'); } function install() { sql_query("CREATE TABLE nucleus_plug_linkdb_links (id int(11) NOT NULL auto_increment, title varchar(128) NOT NULL default '', url varchar(255) NOT NULL default '', description text, categoryId int(11) NOT NULL default '0', PRIMARY KEY (id)) TYPE=MyISAM;"); sql_query("CREATE TABLE nucleus_plug_linkdb_categories (id int(11) NOT NULL auto_increment, title varchar(128) NOT NULL default '', PRIMARY KEY(id)) TYPE=MyISAM;"); } function unInstall() { sql_query('DROP TABLE nucleus_plug_linkdb_links'); sql_query('DROP TABLE nucleus_plug_linkdb_categories'); } function init() { } function doSkinVar($skinType, $what = 'list') { global $member; if ($what == 'linkform') { $category_query = 'SELECT id, title FROM nucleus_plug_linkdb_categories ORDER BY title'; $categories = sql_query($category_query); $this->showAddForm($categories); return; } else if ($what == 'catform') { $this->showAddCategoryForm(); return; } $admin = $member->isAdmin(); $query = 'SELECT links.id link_id, links.url url, links.title link_title, links.description description, links.categoryId link_cat_id, categories.id cat_id, categories.title cat_title FROM nucleus_plug_linkdb_links links, nucleus_plug_linkdb_categories categories WHERE links.categoryId = categories.id ORDER BY cat_title, link_title'; $sites = sql_query($query); $last_cat = ""; $count = 0; while ($site = mysql_fetch_object($sites)) { $current_cat = $site->cat_title; if ($current_cat != $last_cat) { if ($count > 0) { /*there's a category on ahead of this one*/ echo '</ul>'; echo "\n"; } echo '<ul><li class="title">',htmlentities($site->cat_title); if ($admin) { echo ' <a href="action.php?action=plugin&name=LinkDB&type=deletecategory&id=',htmlentities($site->cat_id),'">[delete]</a>'; } echo '</li>'; echo "\n"; $last_cat = $current_cat; } echo '<li><a href="',htmlentities($site->url),'" '; if ($site->alt) echo 'title="',htmlentities($site->alt),'" '; echo 'title="',htmlentities($site->description),'">',htmlentities($site->link_title),'</a>'; if ($admin) { echo ' <a href="action.php?action=plugin&name=LinkDB&type=deleteurl&id=',htmlentities($site->link_id),'">[delete]</a>'; } /* if ($site->description != '') { echo ' - ',htmlentities($site->description); } */ echo '</li>'; echo "\n"; $count++; } if ($count > 0 ) { echo '</ul>'; echo "\n"; } } function doAction($type) { global $member; switch($type) { case 'addurl': if (!$member->isAdmin()) return 'You\'re not allowed!'; $url = requestVar('url'); $title = requestVar('title'); $category = requestVar('category'); $description = requestVar('desc'); $this->addURL($url, $title, $description, $category); $destURL = 'index.php'; break; case 'addcategory': if (!$member->isAdmin()) return 'You\'re not allowed!'; $category = requestVar('category'); $this->addCategory($category); $destURL = 'index.php'; break; case 'deleteurl': if (!$member->isAdmin()) return 'You\'re not allowed!'; $id = requestVar('id'); $this->deleteURL($id); $destURL = 'index.php'; break; case 'deletecategory': if (!$member->isAdmin()) return 'You\'re not allowed!'; $id = requestVar('id'); $this->deleteCategory($id); $destURL = 'index.php'; break; default: return 'Bad action type!'; } header('Location: ' . $destURL); exit; } /* * Helper methods */ function showAddForm($categories) { global $member; if ($member->isAdmin()) { ?> <form method="post" action="action.php"><div> <input type="hidden" name="action" value="plugin" /> <input type="hidden" name="name" value="LinkDB" /> <input type="hidden" name="type" value="addurl" /> <table><tr> <td><label for="siteurl">URL:</label></td> <td><input type="text" name="url" id="siteurl" value="http://" size="40" /></td> </tr><tr> <td><label for="sitetitle">Site Title:</label></td> <td><input type="text" name="title" id="sitetitle" value="Site title" size="40" /></td> </tr><tr> <td><label for="sitetitle">Site Description:</label></td> <td><textarea name="desc" id="sitedesc" value="Site description"/>Short site description.</textarea></td> </tr><tr> <td><label for="sitecategory">Site Category:</label></td> <td><select name="category" id="linkcategory"> <? while ($category = mysql_fetch_object($categories)) { echo '<option value="',htmlentities($category->id),'">',htmlentities($category->title),'</option>'; } ?> </select> </td> </tr><tr> <td>Submit site:</td> <td><input type="submit" value="Submit site" /></td> </tr></table> </div></form> <? } } function showAddCategoryForm() { global $member; if ($member->isAdmin()) { ?> <form method="post" action="action.php"><div> <input type="hidden" name="action" value="plugin" /> <input type="hidden" name="name" value="LinkDB" /> <input type="hidden" name="type" value="addcategory" /> <table><tr> <td><label for="linkcategory">Category:</label></td> <td><input type="text" name="category" id="linkcategory" value="Link category" size="40" /></td> </tr><tr> <td>Submit category:</td> <td><input type="submit" value="Submit category" /></td> </tr></table> </div></form> <? } } function addURL($url, $title, $desc, $category) { sql_query("INSERT INTO nucleus_plug_linkdb_links (url, title, description, categoryid) VALUES ('".addslashes($url)."','".addslashes($title)."','".addslashes($desc)."','".addslashes($category)."')"); } function addCategory($category) { sql_query("INSERT INTO nucleus_plug_linkdb_categories (title) VALUES ('".addslashes($category)."')"); } function deleteURL($id) { sql_query("DELETE FROM nucleus_plug_linkdb_links WHERE id='".addslashes($id)."'"); } function deleteCategory($id) { sql_query("DELETE FROM nucleus_plug_linkdb_categories WHERE id='".addslashes($id)."'"); sql_query("DELETE FROM nucleus_plug_linkdb_links WHERE categoryid='".addslashes($id)."'"); } } ?>