<?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 &lt;%LinkDB%&gt;, Admins can add links (&lt;%LinkDB(linkform)%&gt;) and categories (&lt;%LinkDB(catform)%&gt;) 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&amp;name=LinkDB&amp;type=deletecategory&amp;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&amp;name=LinkDB&amp;type=deleteurl&amp;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)."'");
	}
}
 
?>
np_linkdb_code.txt · Last modified: 2007/11/13 23:47 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki