Newer
Older
patches / scuttle-admin.diff
@Andreas Jaggi Andreas Jaggi on 27 Feb 2013 7 KB initial import
Index: services/tagservice.php
===================================================================
--- services/tagservice.php	(revision 4)
+++ services/tagservice.php	(working copy)
@@ -138,6 +138,25 @@
         return true;
     }
 
+    function deleteTagsForUser($uId) {
+	$qmask = 'DELETE FROM %s USING %s, %s WHERE %s.bId = %s.bId AND %s.uId = %d';
+	$query = sprintf($qmask,
+		$this->getTableName(),
+		$this->getTableName(),
+		$GLOBALS['tableprefix'].'bookmarks',
+		$this->getTableName(),
+		$GLOBALS['tableprefix'].'bookmarks',
+		$GLOBALS['tableprefix'].'bookmarks',
+		$uId);
+
+        if (!($dbresult =& $this->db->sql_query($query))) {
+            message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db);
+            return false;
+        }
+
+        return true;
+    }
+
     function &getTagsForBookmark($bookmarkid) {
         if (!is_int($bookmarkid)) {
             message_die(GENERAL_ERROR, 'Could not get tags (invalid bookmarkid)', '', __LINE__, __FILE__, $query);
Index: services/userservice.php
===================================================================
--- services/userservice.php	(revision 4)
+++ services/userservice.php	(working copy)
@@ -126,7 +126,13 @@
     }
 
     function isAdmin($userid) {
-        return false; //not implemented yet
+	if ( ($userinfo = $this->getUser($userid)) ) {
+		if ( $userinfo['uAdmin'] == 1 ) {
+			return true;
+		}
+	}
+
+	return false;
     }
 
     function getCurrentUserId() {
@@ -340,6 +346,17 @@
         return true;
     }
 
+    function deleteUser($uId) {
+    	$query = 'DELETE FROM '. $this->getTableName() .' WHERE uId = '. intval($uId);
+
+        if (!($dbresult = & $this->db->sql_query($query))) {
+            message_die(GENERAL_ERROR, 'Could not delete user', '', __LINE__, __FILE__, $query, $this->db);
+            return false;
+        }
+
+	return true;
+    }
+
     function sanitisePassword($password) {
         return sha1(trim($password));
     }
@@ -421,6 +446,23 @@
 		}
 	}
 
+	function getAllUsers ( ) { 
+		$query = 'SELECT * FROM '. $this->getTableName();
+
+		if (! ($dbresult =& $this->db->sql_query($query)) ) {
+		    message_die(GENERAL_ERROR, 'Could not get users', '', __LINE__, __FILE__, $query, $this->db);
+		    return false;
+		}
+
+		$rows = array();
+
+		while ( $row = $this->db->sql_fetchrow($dbresult) ) {
+			$rows[] = $row;
+		}
+
+		return $rows;
+	}
+
     // Properties
     function getTableName()       { return $this->tablename; }
     function setTableName($value) { $this->tablename = $value; }
Index: services/bookmarkservice.php
===================================================================
--- services/bookmarkservice.php	(revision 4)
+++ services/bookmarkservice.php	(working copy)
@@ -385,6 +385,17 @@
         return true;
     }
 
+    function deleteBookmarksForUser($uId) {
+        $query = 'DELETE FROM '. $GLOBALS['tableprefix'] .'bookmarks WHERE uId = '. intval($uId);
+
+        if (!($dbresult = & $this->db->sql_query($query))) {
+            message_die(GENERAL_ERROR, 'Could not delete bookmarks', '', __LINE__, __FILE__, $query, $this->db);
+            return false;
+        }
+
+        return true;
+    }
+
     function countOthers($address) {
         if (!$address) {
             return false;
Index: admin.php
===================================================================
--- admin.php	(revision 0)
+++ admin.php	(revision 0)
@@ -0,0 +1,81 @@
+<?php
+
+/***************************************************************************
+Copyright (C) 2004 - 2006 Scuttle project, (C) 2006 Andreas Jaggi
+http://sourceforge.net/projects/scuttle/
+http://scuttle.org/
+http://x-way.waterwave.ch/
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+***************************************************************************/
+
+require_once('header.inc.php');
+
+$userservice = & ServiceFactory :: getServiceInstance('UserService');
+$tagservice = & ServiceFactory :: getServiceInstance('TagService');
+$bookmarkservice = & ServiceFactory :: getServiceInstance('BookmarkService');
+$templateservice = & ServiceFactory :: getServiceInstance('TemplateService');
+
+// Header variables
+$tplVars['subtitle'] = T_('Manage users');
+$tplVars['loadjs'] = true;
+
+if ( !$userservice->isLoggedOn() ) {
+    header('Location: '. createURL('login', ''));
+    exit();
+}
+
+$currentUser = $userservice->getCurrentUser();
+$currentUserID = $userservice->getCurrentUserId();
+$currentUsername = $currentUser[$userservice->getFieldName('username')];
+
+if ( !$userservice->isAdmin($currentUserID) ) {
+    header('Location: '. createURL('bookmarks', $currentUsername));
+    exit();
+}
+
+@list($url, $action, $user) = isset($_SERVER['PATH_INFO']) ? explode('/', $_SERVER['PATH_INFO']) : NULL;
+
+if ( $action ) {
+	switch ( $action ) {
+		case 'delete':
+			if ( $user && ($userinfo = $userservice->getUserByUsername($user)) ) {
+				$uId = $userinfo['uId'];
+
+				$userservice->deleteUser($uId);
+				$tagservice->deleteTagsForUser($uId);
+				// XXX: don't delete bookmarks before tags, else tags can't be deleted !!!
+				$bookmarkservice->deleteBookmarksForUser($uId);
+
+				$tplVars['msg'] = sprintf(T_('%s and all his bookmarks and tags were deleted.'), $user);
+			}
+			break;
+		default:
+			// DO NOTHING
+	}
+}
+
+$templatename = 'userlist.tpl';
+$users =& $userservice->getAllUsers();
+
+if ( !is_array($users) ) {
+	$users = array();
+}
+
+$tplVars['users'] =& $users;
+
+$templateservice->loadTemplate($templatename, $tplVars);
+
+?>
Index: templates/userlist.tpl.php
===================================================================
--- templates/userlist.tpl.php	(revision 0)
+++ templates/userlist.tpl.php	(revision 0)
@@ -0,0 +1,27 @@
+<?php
+
+$userservice =& ServiceFactory::getServiceInstance('UserService');
+
+$this->includeTemplate($GLOBALS['top_include']);
+
+echo '<ol id="bookmarks">';
+
+foreach(array_keys($users) as $key) {
+
+	echo '<li class="xfolkentry">'."\n";
+
+	echo '<div class="link">';
+	echo '<a href="'.createURL('profile', $users[$key][$userservice->getFieldname('username')]).'">'.$users[$key][$userservice->getFieldName('username')].'</a>';
+	echo '</div>';
+
+	echo '<div class="meta">';
+	echo '<a href="'.createURL('admin','delete/'.$users[$key][$userservice->getFieldname('username')]).'" onclick="return confirm(\''.T_('Are you sure?').'\');">'.T_('Delete').'</a>';
+	echo '</div>';
+
+	echo '</li>'."\n";
+}
+
+$this->includeTemplate('sidebar.tpl');
+$this->includeTemplate($GLOBALS['bottom_include']);
+
+?>
Index: templates/toolbar.inc.php
===================================================================
--- templates/toolbar.inc.php	(revision 4)
+++ templates/toolbar.inc.php	(working copy)
@@ -3,9 +3,17 @@
 if ($userservice->isLoggedOn()) {
     $cUser = $userservice->getCurrentUser();
     $cUsername = $cUser[$userservice->getFieldName('username')];
+    $isAdmin = $userservice->isAdmin($cUser[$userservice->getFieldname('primary')]);
 ?>
 
     <ul id="navigation">
+<?php
+	if ( $isAdmin ) {
+?>
+        <li><a href="<?php echo createURL('admin', ''); ?>"><?php echo T_('Admin'); ?></a></li>
+<?php
+	}
+?>
         <li><a href="<?php echo createURL('bookmarks', $cUsername); ?>"><?php echo T_('Bookmarks'); ?></a></li>
         <li><a href="<?php echo createURL('watchlist', $cUsername); ?>"><?php echo T_('Watchlist'); ?></a></li>
         <li><a href="<?php echo createURL('bookmarks', $cUsername . '?action=add'); ?>"><?php echo T_('Add a Bookmark'); ?></a></li>