6
6
require_once BASE_PATH .'/core/models/dao/AssetstoreDao.php ' ;
7
7
require_once BASE_PATH .'/core/controllers/components/UploadComponent.php ' ;
8
8
9
+ define ("MIDAS2_RESOURCE_BITSTREAM " , 0 );
10
+ define ("MIDAS2_RESOURCE_BUNDLE " , 1 );
11
+ define ("MIDAS2_RESOURCE_ITEM " , 2 );
12
+ define ("MIDAS2_RESOURCE_COLLECTION " , 3 );
13
+ define ("MIDAS2_RESOURCE_COMMUNITY " , 4 );
14
+ define ("MIDAS2_POLICY_READ " , 0 );
15
+ define ("MIDAS2_POLICY_WRITE " , 1 );
16
+ define ("MIDAS2_POLICY_DELETE " , 2 );
17
+ define ("MIDAS2_POLICY_ADD " , 3 );
18
+ define ("MIDAS2_POLICY_REMOVE " , 4 );
19
+
9
20
/** Migration tool*/
10
21
class MIDAS2MigrationComponent extends AppComponent
11
22
{
@@ -34,7 +45,9 @@ private function _createFolderForItem($collectionId, $parentFolderid)
34
45
$ Folderpolicygroup = $ modelLoader ->loadModel ("Folderpolicygroup " );
35
46
$ Folderpolicyuser = $ modelLoader ->loadModel ("Folderpolicyuser " );
36
47
$ Itempolicygroup = $ modelLoader ->loadModel ("Itempolicygroup " );
37
-
48
+ $ Itempolicyuser = $ modelLoader ->loadModel ("Itempolicyuser " );
49
+ $ User = $ modelLoader ->loadModel ("User " );
50
+
38
51
$ colquery = pg_query ("SELECT i.item_id,mtitle.text_value AS title,mabstract.text_value AS abstract " .
39
52
"FROM item AS i " .
40
53
"LEFT JOIN metadatavalue AS mtitle ON (i.item_id = mtitle.item_id AND mtitle.metadata_field_id = 64) " .
@@ -74,6 +87,33 @@ private function _createFolderForItem($collectionId, $parentFolderid)
74
87
$ policyValue = $ policy ->getPolicy ();
75
88
$ Folderpolicyuser ->createPolicy ($ user , $ folderDao , $ policyValue );
76
89
}
90
+
91
+ // Add specific MIDAS policies for users (not dealing with groups)
92
+ $ policyquery = pg_query ("SELECT max(action_id) AS actionid,eperson.eperson_id,eperson.email
93
+ FROM resourcepolicy
94
+ LEFT JOIN eperson ON (eperson.eperson_id=resourcepolicy.eperson_id)
95
+ WHERE epersongroup_id IS NULL AND resource_type_id= " .MIDAS2_RESOURCE_ITEM .
96
+ " AND resource_id= " .$ item_id ." GROUP BY eperson.eperson_id,email " );
97
+
98
+ while ($ policyquery_array = pg_fetch_array ($ policyquery ))
99
+ {
100
+ $ actionid = $ policyquery_array ['actionid ' ];
101
+ $ email = $ policyquery_array ['email ' ];
102
+ if ($ actionid > 1 )
103
+ {
104
+ $ policyValue = MIDAS_POLICY_ADMIN ;
105
+ }
106
+ else if ($ actionid == 1 )
107
+ {
108
+ $ policyValue = MIDAS_POLICY_WRITE ;
109
+ }
110
+ else
111
+ {
112
+ $ policyValue = MIDAS_POLICY_READ ;
113
+ }
114
+ $ userDao = $ User ->getByEmail ($ email );
115
+ $ Folderpolicyuser ->createPolicy ($ userDao , $ folderDao , $ policyValue );
116
+ }
77
117
}
78
118
catch (Zend_Exception $ e )
79
119
{
@@ -95,11 +135,44 @@ private function _createFolderForItem($collectionId, $parentFolderid)
95
135
$ itemdao ->setName ($ filename );
96
136
$ Item ->save ($ itemdao );
97
137
98
- // Set the policy of the item
99
- //$this->Itempolicyuser->createPolicy($this->userSession->Dao, $item, MIDAS_POLICY_ADMIN);
100
- $ anonymousGroup = $ Group ->load (MIDAS_GROUP_ANONYMOUS_KEY );
101
- $ Itempolicygroup ->createPolicy ($ anonymousGroup , $ itemdao , MIDAS_POLICY_READ );
102
-
138
+ // Just check if the group anonymous can access the item
139
+ $ policyquery = pg_query ("SELECT policy_id FROM resourcepolicy WHERE resource_type_id= " .MIDAS2_RESOURCE_ITEM .
140
+ " AND resource_id= " .$ item_id ." AND epersongroup_id=0 " );
141
+ $ privacy = MIDAS_COMMUNITY_PRIVATE ;
142
+ if (pg_num_rows ($ policyquery )>0 )
143
+ {
144
+ $ anonymousGroup = $ Group ->load (MIDAS_GROUP_ANONYMOUS_KEY );
145
+ $ Itempolicygroup ->createPolicy ($ anonymousGroup , $ itemdao , MIDAS_POLICY_READ );
146
+ }
147
+
148
+ // Add specific MIDAS policies for users
149
+ $ policyquery = pg_query ("SELECT max(action_id) AS actionid,eperson.eperson_id,eperson.email
150
+ FROM resourcepolicy
151
+ LEFT JOIN eperson ON (eperson.eperson_id=resourcepolicy.eperson_id)
152
+ WHERE epersongroup_id IS NULL AND resource_type_id= " .MIDAS2_RESOURCE_ITEM .
153
+ " AND resource_id= " .$ item_id ." GROUP BY eperson.eperson_id,email " );
154
+
155
+ while ($ policyquery_array = pg_fetch_array ($ policyquery ))
156
+ {
157
+ $ actionid = $ policyquery_array ['actionid ' ];
158
+ $ email = $ policyquery_array ['email ' ];
159
+ if ($ actionid > 1 )
160
+ {
161
+ $ policyValue = MIDAS_POLICY_ADMIN ;
162
+ }
163
+ else if ($ actionid == 1 )
164
+ {
165
+ $ policyValue = MIDAS_POLICY_WRITE ;
166
+ }
167
+ else
168
+ {
169
+ $ policyValue = MIDAS_POLICY_READ ;
170
+ }
171
+ $ userDao = $ User ->getByEmail ($ email );
172
+ // Set the policy of the item
173
+ $ Itempolicyuser ->createPolicy ($ userDao , $ itemdao , $ policyValue );
174
+ }
175
+
103
176
// Add the item to the current directory
104
177
$ Folder ->addItem ($ folderDao , $ itemdao );
105
178
@@ -111,7 +184,7 @@ private function _createFolderForItem($collectionId, $parentFolderid)
111
184
112
185
// Add the metadata
113
186
$ MetadataModel = $ modelLoader ->loadModel ("Metadata " );
114
- // Register the common metadata (this should move to the main function
187
+ // Register the common metadata (this should move to the main function)
115
188
try
116
189
{
117
190
$ MetadataModel ->addMetadata (MIDAS_METADATA_GLOBAL ,'contributor ' ,'author ' ,'Author of the data ' );
@@ -194,7 +267,8 @@ private function _createFolderForCollection($communityId, $parentFolderid)
194
267
{
195
268
set_time_limit (0 );
196
269
$ modelLoader = new MIDAS_ModelLoader ;
197
- $ Folder = $ modelLoader ->loadModel ("Folder " );
270
+ $ Folder = $ modelLoader ->loadModel ("Folder " );
271
+ $ User = $ modelLoader ->loadModel ("User " );
198
272
$ Folderpolicygroup = $ modelLoader ->loadModel ("Folderpolicygroup " );
199
273
$ Folderpolicyuser = $ modelLoader ->loadModel ("Folderpolicyuser " );
200
274
@@ -227,8 +301,35 @@ private function _createFolderForCollection($communityId, $parentFolderid)
227
301
$ policyValue = $ policy ->getPolicy ();
228
302
$ Folderpolicyuser ->createPolicy ($ user , $ folderDao , $ policyValue );
229
303
}
304
+
305
+ // Add specific MIDAS policies for users (not dealing with groups)
306
+ $ policyquery = pg_query ("SELECT max(action_id) AS actionid,eperson.eperson_id,eperson.email
307
+ FROM resourcepolicy
308
+ LEFT JOIN eperson ON (eperson.eperson_id=resourcepolicy.eperson_id)
309
+ WHERE epersongroup_id IS NULL AND resource_type_id= " .MIDAS2_RESOURCE_COLLECTION .
310
+ " AND resource_id= " .$ collection_id ." GROUP BY eperson.eperson_id,email " );
311
+
312
+ while ($ policyquery_array = pg_fetch_array ($ policyquery ))
313
+ {
314
+ $ actionid = $ policyquery_array ['actionid ' ];
315
+ $ email = $ policyquery_array ['email ' ];
316
+ if ($ actionid > 1 )
317
+ {
318
+ $ policyValue = MIDAS_POLICY_ADMIN ;
319
+ }
320
+ else if ($ actionid == 1 )
321
+ {
322
+ $ policyValue = MIDAS_POLICY_WRITE ;
323
+ }
324
+ else
325
+ {
326
+ $ policyValue = MIDAS_POLICY_READ ;
327
+ }
328
+ $ userDao = $ User ->getByEmail ($ email );
329
+ $ Folderpolicyuser ->createPolicy ($ userDao , $ folderDao , $ policyValue );
330
+ }
230
331
}
231
- catch (Zend_Exception $ e )
332
+ catch (Zend_Exception $ e )
232
333
{
233
334
$ this ->getLogger ()->info ($ e ->getMessage ());
234
335
//Zend_Debug::dump($e);
@@ -290,6 +391,34 @@ private function _createFolderForCommunity($communityidMIDAS2, $parentFolderid)
290
391
$ policyValue = $ policy ->getPolicy ();
291
392
$ Folderpolicyuser ->createPolicy ($ user , $ folderDao , $ policyValue );
292
393
}
394
+
395
+ // Add specific MIDAS policies for users (not dealing with groups)
396
+ $ policyquery = pg_query ("SELECT max(action_id) AS actionid,eperson.eperson_id,eperson.email
397
+ FROM resourcepolicy
398
+ LEFT JOIN eperson ON (eperson.eperson_id=resourcepolicy.eperson_id)
399
+ WHERE epersongroup_id IS NULL AND resource_type_id= " .MIDAS2_RESOURCE_COMMUNITY .
400
+ " AND resource_id= " .$ community_id ." GROUP BY eperson.eperson_id,email " );
401
+
402
+ while ($ policyquery_array = pg_fetch_array ($ policyquery ))
403
+ {
404
+ $ actionid = $ policyquery_array ['actionid ' ];
405
+ $ email = $ policyquery_array ['email ' ];
406
+ if ($ actionid > 1 )
407
+ {
408
+ $ policyValue = MIDAS_POLICY_ADMIN ;
409
+ }
410
+ else if ($ actionid == 1 )
411
+ {
412
+ $ policyValue = MIDAS_POLICY_WRITE ;
413
+ }
414
+ else
415
+ {
416
+ $ policyValue = MIDAS_POLICY_READ ;
417
+ }
418
+ $ userDao = $ User ->getByEmail ($ email );
419
+
420
+ $ Folderpolicyuser ->createPolicy ($ user , $ folderDao , $ policyValue );
421
+ }
293
422
}
294
423
catch (Zend_Exception $ e )
295
424
{
@@ -343,6 +472,7 @@ function migrate($userid)
343
472
344
473
// STEP 1: Import the users
345
474
$ User = $ modelLoader ->loadModel ("User " );
475
+ $ Group = $ modelLoader ->loadModel ("Group " );
346
476
$ query = pg_query ("SELECT email,password,firstname,lastname FROM eperson " );
347
477
while ($ query_array = pg_fetch_array ($ query ))
348
478
{
@@ -377,9 +507,44 @@ function migrate($userid)
377
507
try
378
508
{
379
509
// Check the policies for the community
510
+ // If anonymous can access then we set it public
511
+ $ policyquery = pg_query ("SELECT policy_id FROM resourcepolicy WHERE resource_type_id= " .MIDAS2_RESOURCE_COMMUNITY .
512
+ " AND resource_id= " .$ community_id ." AND epersongroup_id=0 " );
513
+ $ privacy = MIDAS_COMMUNITY_PRIVATE ;
514
+ if (pg_num_rows ($ policyquery )>0 )
515
+ {
516
+ $ privacy = MIDAS_COMMUNITY_PUBLIC ;
517
+ }
518
+ $ communityDao = $ Community ->createCommunity ($ name , $ short_description , $ privacy , NULL ); // no user
519
+
520
+ // Add the users to the community
521
+ // MIDAS2 was not using the group heavily so we ignore them. This would have to be a manual step
522
+ $ policyquery = pg_query ("SELECT max(action_id) AS actionid,eperson.eperson_id,eperson.email
523
+ FROM resourcepolicy
524
+ LEFT JOIN eperson ON (eperson.eperson_id=resourcepolicy.eperson_id)
525
+ WHERE epersongroup_id IS NULL AND resource_type_id= " .MIDAS2_RESOURCE_COMMUNITY .
526
+ " AND resource_id= " .$ community_id ." GROUP BY eperson.eperson_id,email " );
527
+
528
+ while ($ policyquery_array = pg_fetch_array ($ policyquery ))
529
+ {
530
+ $ actionid = $ policyquery_array ['actionid ' ];
531
+ $ email = $ policyquery_array ['email ' ];
532
+ if ($ actionid > 1 )
533
+ {
534
+ $ memberGroupDao = $ communityDao ->getAdminGroup ();
535
+ }
536
+ else if ($ actionid == 1 )
537
+ {
538
+ $ memberGroupDao = $ communityDao ->getModeratorGroup ();
539
+ }
540
+ else
541
+ {
542
+ $ memberGroupDao = $ communityDao ->getMemberGroup ();
543
+ }
544
+ $ userDao = $ User ->getByEmail ($ email );
545
+ $ Group ->addUser ($ memberGroupDao ,$ userDao );
546
+ }
380
547
381
-
382
- $ communityDao = $ Community ->createCommunity ($ name , $ short_description , MIDAS_COMMUNITY_PUBLIC , NULL ); // no user
383
548
}
384
549
catch (Zend_Exception $ e )
385
550
{
0 commit comments