@@ -54,7 +54,10 @@ public function __construct()
54
54
'groups ' => array ('type ' => MIDAS_MANY_TO_MANY , 'model ' => 'Group ' , 'table ' => 'user2group ' , 'parent_column ' => 'user_id ' , 'child_column ' => 'group_id ' ),
55
55
'invitations ' => array ('type ' => MIDAS_ONE_TO_MANY , 'model ' => 'CommunityInvitation ' , 'parent_column ' => 'user_id ' , 'child_column ' => 'user_id ' ),
56
56
'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 ' ),
57
58
'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 ' )
58
61
);
59
62
$ this ->initialize (); // required
60
63
} // end __construct()
@@ -79,20 +82,88 @@ public function save($dao)
79
82
parent ::save ($ dao );
80
83
}
81
84
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 )
84
97
{
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 ();
89
104
foreach ($ invitations as $ invitation )
90
105
{
91
106
$ ciModel ->delete ($ invitation );
92
107
}
93
108
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
+ }
96
167
97
168
/** plus one view*/
98
169
function incrementViewCount ($ userDao )
0 commit comments