Skip to content
This repository was archived by the owner on Sep 10, 2021. It is now read-only.

Commit 12f2c5d

Browse files
committed
ENH: refs #0340. Implement UserModel::delete()
It performs a robust delete of all core user data and issue a callback so that modules can delete or change their user related records as well.
1 parent e033cbe commit 12f2c5d

File tree

3 files changed

+90
-18
lines changed

3 files changed

+90
-18
lines changed

core/models/base/UserModelBase.php

Lines changed: 79 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ public function __construct()
5454
'groups' => array('type' => MIDAS_MANY_TO_MANY, 'model' => 'Group', 'table' => 'user2group', 'parent_column' => 'user_id', 'child_column' => 'group_id'),
5555
'invitations' => array('type' => MIDAS_ONE_TO_MANY, 'model' => 'CommunityInvitation', 'parent_column' => 'user_id', 'child_column' => 'user_id'),
5656
'folderpolicyuser' => array('type' => MIDAS_ONE_TO_MANY, 'model' => 'Folderpolicyuser', 'parent_column' => 'user_id', 'child_column' => 'user_id'),
57+
'itempolicyuser' => array('type' => MIDAS_ONE_TO_MANY, 'model' => 'Itempolicyuser', 'parent_column' => 'user_id', 'child_column' => 'user_id'),
5758
'feeds' => array('type' => MIDAS_ONE_TO_MANY, 'model' => 'Feed', 'parent_column' => 'user_id', 'child_column' => 'user_id'),
59+
'feedpolicyuser' => array('type' => MIDAS_ONE_TO_MANY, 'model' => 'Feedpolicyuser', 'parent_column' => 'user_id', 'child_column' => 'user_id'),
60+
'itemrevisions' => array('type' => MIDAS_ONE_TO_MANY, 'model' => 'ItemRevision', 'parent_column' => 'user_id', 'child_column' => 'user_id')
5861
);
5962
$this->initialize(); // required
6063
} // end __construct()
@@ -79,20 +82,88 @@ public function save($dao)
7982
parent::save($dao);
8083
}
8184

82-
/** delete*/
83-
public function delete($dao)
85+
/**
86+
* Deletes a user and all record of their existence, including:
87+
* -Community invitations
88+
* -Policies (folder, item, and feed)
89+
* -User's folder tree
90+
* -Group memberships
91+
* -Itemrevision upload records (replace with superadmin)
92+
* -Feeds
93+
* Issues the CALLBACK_CORE_USER_DELETED signal that modules can use to handle user deletion events,
94+
* passing the argument 'userDao'. Signal is emitted before any core data is deleted.
95+
*/
96+
public function delete($user)
8497
{
85-
//TODO
86-
$modelLoad = new MIDAS_ModelLoader();
87-
$ciModel = $modelLoad->loadModel('CommunityInvitation');
88-
$invitations = $dao->getInvitations();
98+
Zend_Registry::get('notifier')->callback('CALLBACK_CORE_USER_DELETED', array('userDao' => $user));
99+
$modelLoader = new MIDAS_ModelLoader();
100+
101+
// Delete any community invitations for this user
102+
$ciModel = $modelLoader->loadModel('CommunityInvitation');
103+
$invitations = $user->getInvitations();
89104
foreach($invitations as $invitation)
90105
{
91106
$ciModel->delete($invitation);
92107
}
93108

94-
parent::delete($dao);
95-
}// delete
109+
// Delete this user's folder tree recursively
110+
$folderModel = $modelLoader->loadModel('Folder');
111+
$folderModel->delete($user->getFolder(), true);
112+
113+
// Delete remaining folder policies for the user
114+
$folderpolicyuserModel = $modelLoader->loadModel('Folderpolicyuser');
115+
$folderpolicies = $user->getFolderpolicyuser();
116+
foreach($folderpolicies as $folderpolicy)
117+
{
118+
$folderpolicyuserModel->delete($folderpolicy);
119+
}
120+
121+
// Delete remaining item policies for the user
122+
$itempolicyuserModel = $modelLoader->loadModel('Itempolicyuser');
123+
$itempolicies = $user->getItempolicyuser();
124+
foreach($itempolicies as $itempolicy)
125+
{
126+
$itempolicyuserModel->delete($itempolicy);
127+
}
128+
129+
// Delete all user's feeds
130+
$feedModel = $modelLoader->loadModel('Feed');
131+
$feeds = $user->getFeeds();
132+
foreach($feeds as $feed)
133+
{
134+
$feedModel->delete($feed);
135+
}
136+
137+
// Delete remaining feed policies for the user
138+
$feedpolicyuserModel = $modelLoader->loadModel('Feedpolicyuser');
139+
$feedpolicies = $user->getFeedpolicyuser();
140+
foreach($feedpolicies as $feedpolicy)
141+
{
142+
$feedpolicyuserModel->delete($feedpolicy);
143+
}
144+
145+
// Remove the user from all groups
146+
$groupModel = $modelLoader->loadModel('Group');
147+
$groups = $user->getGroups();
148+
foreach($groups as $group)
149+
{
150+
$groupModel->removeUser($group, $user);
151+
}
152+
153+
// Remove references to this user as the uploader of item revisions (replace with superadmin)
154+
$settingModel = $modelLoader->loadModel('Setting');
155+
$adminId = $settingModel->getValueByName('adminuser');
156+
$itemRevisionModel = $modelLoader->loadModel('ItemRevision');
157+
$itemRevisions = $user->getItemrevisions();
158+
foreach($itemRevisions as $revision)
159+
{
160+
$revision->setUserId($adminId);
161+
$itemRevisionModel->save($revision);
162+
}
163+
164+
// Delete the user record
165+
parent::delete($user);
166+
}
96167

97168
/** plus one view*/
98169
function incrementViewCount($userDao)

core/models/pdo/FeedModel.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -245,31 +245,31 @@ function addCommunity($feed, $community)
245245
} // end addCommunity
246246

247247
/** Delete Dao
248-
* @param FeedDao $feeDao
248+
* @param FeedDao $feedDao
249249
*/
250-
function delete($feeDao)
250+
function delete($feedDao)
251251
{
252252
$this->ModelLoader = new MIDAS_ModelLoader();
253-
$feedpolicygroups = $feeDao->getFeedpolicygroup();
253+
$feedpolicygroups = $feedDao->getFeedpolicygroup();
254254
$feedpolicygroupModel = $this->ModelLoader->loadModel('Feedpolicygroup');
255255
foreach($feedpolicygroups as $f)
256256
{
257257
$feedpolicygroupModel->delete($f);
258258
}
259259

260-
$feedpolicyuser = $feeDao->getFeedpolicyuser();
260+
$feedpolicyuser = $feedDao->getFeedpolicyuser();
261261
$feedpolicyuserModel = $this->ModelLoader->loadModel('Feedpolicyuser');
262262
foreach($feedpolicyuser as $f)
263263
{
264264
$feedpolicyuserModel->delete($f);
265265
}
266266

267-
$communities = $feeDao->getCommunities();
267+
$communities = $feedDao->getCommunities();
268268
foreach($communities as $c)
269269
{
270-
$this->database->removeLink('communities', $feeDao, $c);
270+
$this->database->removeLink('communities', $feedDao, $c);
271271
}
272-
return parent::delete($feeDao);
272+
return parent::delete($feedDao);
273273
} // end delete
274274

275275
} // end class

core/models/pdo/GroupModel.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,10 @@ function addUser($group, $user)
6666
$this->database->link('users', $group, $user);
6767
} // end function addItem
6868

69-
/** Remove an user from a group
70-
* @return void
71-
* */
69+
/**
70+
* Remove an user from a group. If you remove them from the "members" group for
71+
* a community, it removes them from all of that community's groups as well.
72+
*/
7273
function removeUser($group, $user)
7374
{
7475
if(!$group instanceof GroupDao)

0 commit comments

Comments
 (0)