|
From: <dj...@us...> - 2013-06-19 16:48:24
|
Revision: 11723
http://sourceforge.net/p/xoops/svn/11723
Author: djculex
Date: 2013-06-19 16:48:22 +0000 (Wed, 19 Jun 2013)
Log Message:
-----------
NEW : Added a sync class to remove orphans in smallworld module when accessing admin/index
Bugfix: When deleting user remove also settings and complaints of user and against user
Modified Paths:
--------------
XoopsModules/smallworld/trunk/smallworld/admin/index.php
XoopsModules/smallworld/trunk/smallworld/class/adminclass.php
XoopsModules/smallworld/trunk/smallworld/class/db.php
XoopsModules/smallworld/trunk/smallworld/preloads/core.php
Modified: XoopsModules/smallworld/trunk/smallworld/admin/index.php
===================================================================
--- XoopsModules/smallworld/trunk/smallworld/admin/index.php 2013-06-19 16:47:58 UTC (rev 11722)
+++ XoopsModules/smallworld/trunk/smallworld/admin/index.php 2013-06-19 16:48:22 UTC (rev 11723)
@@ -33,6 +33,8 @@
$admin = new SmallworldAdmin();
+$d = new SmallWorldDoSync;
+$d->checkOrphans ();
// Find oldest message and apply to template
$dfm = $admin->oldestMsg();
Modified: XoopsModules/smallworld/trunk/smallworld/class/adminclass.php
===================================================================
--- XoopsModules/smallworld/trunk/smallworld/class/adminclass.php 2013-06-19 16:47:58 UTC (rev 11722)
+++ XoopsModules/smallworld/trunk/smallworld/class/adminclass.php 2013-06-19 16:48:22 UTC (rev 11723)
@@ -456,4 +456,146 @@
return $text;
}
+}
+
+/*
+ * Does a sync to remove orphans from smallworld db
+ *
+ */
+
+class SmallWorldDoSync {
+ /**
+ * check for orphans (xoops_users <-> smallworld_users) and remove from smallworld
+ * @return void
+ */
+ function checkOrphans ()
+ {
+ global $xoopsDB;
+ $sql = "SELECT userid FROM ".$xoopsDB->prefix('smallworld_user')." WHERE userid NOT IN ( SELECT uid FROM ".$xoopsDB->prefix('users').")";
+ $result = $xoopsDB->queryF($sql);
+ if ($result) {
+ while ($r = $xoopsDB->fetchArray($result)) {
+ $this->deleteAccount($r['userid']);
+ }
+ }
+ }
+
+ /**
+ * deleteAccount function
+ * - Delete user account and associate rows across tables
+ * @param int $userid
+ * @return string
+ */
+ function deleteAccount($userid)
+ {
+ global $xoopsDB,$xoopsUser;
+ $user = new XoopsUser($userid);
+ $username = $user->uname();
+ $sql01 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_admin')." WHERE userid = '".$userid."'";
+ $sql02 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_comments')." WHERE uid_fk = '".$userid."'";
+ $sql03 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_followers')." WHERE me = '".$userid."' OR you = '".$userid."'";
+ $sql04 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_friends')." WHERE me = '".$userid."' OR you = '".$userid."'";
+ $sql05 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_images')." WHERE userid = '".$userid."'";
+ $sql06 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_messages')." WHERE uid_fk = '".$userid."'";
+ $sql07 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_user')." WHERE userid = '".$userid."'";
+ $sql08 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_vote')." WHERE user_id = '".$userid."'";
+ $sql09 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_complaints')." WHERE owner = '".$userid."' OR byuser_id = '".$userid."'";
+ $sql10 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_settings')." WHERE userid = '".$userid."'";
+
+ $result01 = $xoopsDB->queryF($sql01);
+ $result02 = $xoopsDB->queryF($sql02);
+ $result03 = $xoopsDB->queryF($sql03);
+ $result04 = $xoopsDB->queryF($sql04);
+ $result05 = $xoopsDB->queryF($sql05);
+ $result06 = $xoopsDB->queryF($sql06);
+ $result07 = $xoopsDB->queryF($sql07);
+ $result08 = $xoopsDB->queryF($sql08);
+ $result08 = $xoopsDB->queryF($sql09);
+ $result08 = $xoopsDB->queryF($sql10);
+ // Remove picture dir
+ $dirname = XOOPS_ROOT_PATH . '/uploads/albums_smallworld' . "/" . $userid . "/";
+ $this->smallworld_remDir ($userid, $dirname, $empty = false);
+ }
+
+ /**
+ * smallworld_remDir function
+ * - Remove user image dir in uploads.
+ * @param int $userid
+ * @param string $directory
+ * @param int $empty
+ * @return true
+ */
+ function smallworld_remDir ($userid, $directory, $empty = false)
+ {
+ if ($userid != '') {
+ if (substr($directory,-1) == "/") {
+ $directory = substr($directory, 0, -1);
+ }
+
+ if (!file_exists($directory) || !is_dir($directory)) {
+ return false;
+ } elseif (!is_readable($directory)) {
+ return false;
+ } else {
+ $directoryHandle = opendir($directory);
+ while ($contents = readdir($directoryHandle)) {
+ if ($contents != '.' && $contents != '..') {
+ $path = $directory . "/" . $contents;
+ if (is_dir($path)) {
+ $this->smallworld_remDir($userid, $path);
+ } else {
+ unlink($path);
+ }
+ }
+ }
+ closedir($directoryHandle);
+ if ($empty == false) {
+ if (!rmdir($directory)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ }
+
+ /**
+ * SmallworldDeleteDirectory function
+ * - Delete images from users on delete
+ * @param int $userid
+ * @return true
+ */
+ function SmallworldDeleteDirectory($userid)
+ {
+ $dirname = XOOPS_ROOT_PATH.'/uploads/albums_smallworld'."/".$userid."/";
+ if (is_dir($dirname)) {
+ $dir_handle = opendir($dirname);
+ }
+ if (!$dir_handle) {
+ return false;
+ }
+ while($file = readdir($dir_handle)) {
+ if ($file != "." && $file != "..") {
+ if (!is_dir($dirname."/".$file)) {
+ unlink($dirname."/".$file);
+ }
+ else {
+ $this->SmallworldDeleteDirectory($dirname.'/'.$file);
+ }
+ }
+ }
+ closedir($dir_handle);
+ rmdir($dirname);
+ return true;
+ }
}
\ No newline at end of file
Modified: XoopsModules/smallworld/trunk/smallworld/class/db.php
===================================================================
--- XoopsModules/smallworld/trunk/smallworld/class/db.php 2013-06-19 16:47:58 UTC (rev 11722)
+++ XoopsModules/smallworld/trunk/smallworld/class/db.php 2013-06-19 16:48:22 UTC (rev 11723)
@@ -560,6 +560,11 @@
. $xoopsDB->prefix('smallworld_user')." WHERE userid = '".$userid."'";
$sql08 = "DELETE FROM "
. $xoopsDB->prefix('smallworld_vote')." WHERE user_id = '".$userid."'";
+ $sql09 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_complaints')." WHERE owner = '".$userid."' OR byuser_id = '".$userid."'";
+ $sql10 = "DELETE FROM "
+ . $xoopsDB->prefix('smallworld_settings')." WHERE userid = '".$userid."'";
+
$result01 = $xoopsDB->queryF($sql01);
$result02 = $xoopsDB->queryF($sql02);
$result03 = $xoopsDB->queryF($sql03);
@@ -568,6 +573,8 @@
$result06 = $xoopsDB->queryF($sql06);
$result07 = $xoopsDB->queryF($sql07);
$result08 = $xoopsDB->queryF($sql08);
+ $result08 = $xoopsDB->queryF($sql09);
+ $result08 = $xoopsDB->queryF($sql10);
// Remove picture dir
$dirname = XOOPS_ROOT_PATH . '/uploads/albums_smallworld' . "/" . $userid . "/";
$this->smallworld_remDir ($userid, $dirname, $empty = false);
Modified: XoopsModules/smallworld/trunk/smallworld/preloads/core.php
===================================================================
--- XoopsModules/smallworld/trunk/smallworld/preloads/core.php 2013-06-19 16:47:58 UTC (rev 11722)
+++ XoopsModules/smallworld/trunk/smallworld/preloads/core.php 2013-06-19 16:48:22 UTC (rev 11723)
@@ -27,7 +27,7 @@
function eventCoreHeaderAddmeta()
{
- global $xoTheme,$xoopsUser,$xoopsConfig;
+ global $xoTheme,$xoopsUser,$xoopsConfig;
//Load language if not defined
smallworld_isDefinedLanguage ('_SMALLWORLD_SYSERROR', 'main.php');
|