ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilDataLoader.php
Go to the documentation of this file.
1 <?php
2  /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
13  {
14 
20  function setEnableLog($a_val)
21  {
22  $this->enable_log = $a_val;
23  }
24 
30  function getEnableLog()
31  {
32  return $this->enable_log;
33  }
34 
41  function log($a_str)
42  {
43  if ($this->getEnableLog())
44  {
45  echo "<br>".$a_str; flush();
46  }
47  }
48 
55  function generateUsers($a_login_base = "learner", $a_start = 1,
56  $a_end = 1000, $a_firstname = "John", $a_lastname_base = "Learner", $a_pw = "learnerpw",
57  $a_email = "de@de.de", $a_gender = "m", $a_lang = "en")
58  {
59  global $rbacadmin;
60 
61  // new users
62  $this->log("Creating Users");
63  for ($i = $a_start; $i <= $a_end; $i++)
64  {
65  $this->log($a_login_base.$i);
66  $user = new ilObjUser();
67  $user->setLogin($a_login_base.$i);
68  $user->setFirstname($a_firstname);
69  $user->setLastname($a_lastname_base." ".$i);
70  $user->setGender($a_gender);
71  $user->setEmail($a_email);
72  $user->setAgreeDate(ilUtil::now());
73  $user->setPasswd($a_pw, IL_PASSWD_PLAIN);
74  $user->setTitle($user->getFullname());
75  $user->setDescription($user->getEmail());
76  $user->setLastPasswordChangeTS( time() );
77  $user->setActive(true);
78  $user->setTimeLimitUnlimited(true);
79  $user->create();
80  $user->setLanguage($a_lang);
81  $user->saveAsNew(false);
82  $user->writePrefs();
83  $rbacadmin->assignUser(4, $user->getId(),true);
84  }
85  }
86 
93  function generateCategories($a_start = 1, $a_end = 500, $a_sub_cats_per_cat = 10, $a_title_base = "Category",
94  $a_node = "", $a_init_cnt = true, $a_depth = 1)
95  {
96  global $tree;
97 
98  include_once("./Modules/Category/classes/class.ilObjCategory.php");
99 
100  if ($a_init_cnt)
101  {
102  $this->item_cnt = $a_start;
103  $this->max_depth = ceil(log($a_end - $a_start, $a_sub_cats_per_cat));
104  }
105 
106  if ($a_depth > $this->max_depth)
107  {
108  return;
109  }
110 
111  if ($a_node == "")
112  {
113  $a_node = $tree->getRootId();
114  $this->log("Creating Categories");
115  }
116 
117  $sub_cat_cnt = 0;
118  $sub_cats = array();
119  while ($sub_cat_cnt < $a_sub_cats_per_cat && $this->item_cnt <= $a_end)
120  {
121  if ($this->item_cnt <= $a_end)
122  {
123  $this->log($a_title_base." ".$this->item_cnt);
124  $new_cat = new ilObjCategory();
125  $new_cat->setTitle($a_title_base." ".$this->item_cnt);
126  $new_cat->create();
127  $new_cat->createReference();
128  $new_cat->putInTree($a_node);
129  $new_cat->setPermissions($a_node);
130  $sub_cats[] = $new_cat;
131  $sub_cat_cnt++;
132  $this->item_cnt++;
133  }
134  }
135 
136  foreach ($sub_cats as $sub_cat)
137  {
138  $this->generateCategories($this->item_cnt, $a_end, $a_sub_cats_per_cat, $a_title_base,
139  $sub_cat->getRefId(), false, $a_depth + 1);
140  }
141  }
142 
149  function generateCourses($a_start = 1, $a_end = 500, $a_course_per_cat = 10,
150  $a_title_base = "Course")
151  {
152  global $tree;
153 
154  include_once("./Modules/Course/classes/class.ilObjCourse.php");
155 
156  $this->log("Creating Courses");
157 
158  $a_current = $a_start;
159 
160  // how many categories do we need?
161  $needed_cats = ceil(($a_end - $a_start + 1) / $a_course_per_cat);
162 
163  // get all categories and sort them by depth
164  $nodes = $tree->getFilteredSubTree($tree->getRootId(), array("adm", "crs", "fold", "grp"));
165  $nodes = ilUtil::sortArray($nodes, "depth", "desc");
166 
167  foreach ($nodes as $node)
168  {
169  if ($node["type"] == "cat" && $a_current <= $a_end)
170  {
171  for ($i = 1; $i <= $a_course_per_cat; $i++)
172  {
173  if ($a_current <= $a_end)
174  {
175  $this->log($a_title_base." ".$a_current);
176  $new_crs = new ilObjCourse();
177  $new_crs->setTitle($a_title_base." ".$a_current);
178  $new_crs->create();
179  $new_crs->createReference();
180  $new_crs->putInTree($node["child"]);
181  $new_crs->setPermissions($node["child"]);
182  $new_crs->initCourseMemberObject();
183 
184  $a_current++;
185  }
186  }
187  }
188  }
189  }
190 
197  function generateFiles($a_test_file, $a_files_per_course = 10, $a_title_base = "File")
198  {
199  global $tree;
200 
201  include_once("./Modules/File/classes/class.ilObjFile.php");
202 
203  $this->log("Creating Files");
204 
205  $a_current = $a_start;
206 
207  // get all categories and sort them by depth
208  $crs_ref_ids = ilUtil::_getObjectsByOperations("crs", "read",
209  0, $limit = 1000000);
210  $cnt = 1;
211  foreach ($crs_ref_ids as $rid)
212  {
213  for ($i = 1; $i <= $a_files_per_course; $i++)
214  {
215  $this->log($a_title_base." ".$cnt);
216  $fileObj = new ilObjFile();
217  $fileObj->setTitle($a_title_base." ".$cnt);
218  $fileObj->setFileName("file_".$cnt.".txt");
219  $fileObj->create();
220  $fileObj->createReference();
221  $fileObj->putInTree($rid);
222  $fileObj->setPermissions($rid);
223  $fileObj->createDirectory();
224  $fileObj->getUploadFile($a_test_file,
225  "file_".$cnt.".txt");
226  $cnt++;
227 
228  }
229  }
230  }
231 
238  function generateCalendarEntries($a_num_per_course = 10)
239  {
240  include_once("./Services/Calendar/classes/class.ilDateTime.php");
241  include_once("./Services/Calendar/classes/class.ilCalendarEntry.php");
242  include_once("./Services/Calendar/classes/class.ilCalendarCategoryAssignments.php");
243  include_once("./Services/Calendar/classes/class.ilCalendarCategories.php");
244 
245  $this->log("Creating Calendar Entries");
246 
247  $crs_ref_ids = ilUtil::_getObjectsByOperations("crs", "read",
248  0, $limit = 1000000);
249  $cnt = 1;
250  foreach ($crs_ref_ids as $rid)
251  {
252  $obj_id = ilObject::_lookupObjId($rid);
254 
255  $start = new ilDate(time(),IL_CAL_UNIX);
256  $end = new ilDate(time(),IL_CAL_UNIX);
257  $end->increment(IL_CAL_HOUR, 2);
258 
259  for ($i = 1; $i <= $a_num_per_course; $i++)
260  {
261  $this->log("Event ".$cnt);
262  $entry = new ilCalendarEntry();
263  $entry->setStart($start); //ilDateTiem
264  $entry->setEnd($end); //ilDateTiem
265  $entry->setFullday(false); //ilDateTiem
266  $entry->setTitle("Event ".$cnt); //ilDateTiem
267  $entry->save();
268  $id = $entry->getEntryId();
269  $ass = new ilCalendarCategoryAssignments($id);
270  $ass->addAssignment($cat_id);
271  $start->increment(IL_CAL_DAY, 1);
272  $end->increment(IL_CAL_DAY, 1);
273 //echo "-$cat_id-";
274 //echo "+".ilDatePresentation::formatDate($start)."+";
275 
276  $cnt++;
277  }
278  }
279  }
280 
288  {
289  global $ilDB;
290 
291  // mysql
292  if ($ilDB->getDBType() == "mysql")
293  {
294  $fp = fopen($file, 'r');
295  if (!$fp)
296  {
297  $this->log("Error reading file $file.");
298  return;
299  }
300  $this->log("Dropping Tables.");
301  $set = $ilDB->query("SHOW tables");
302  while ($rec = $ilDB->fetchAssoc($set))
303  {
304  foreach ($rec as $v)
305  {
306  $ilDB->query("DROP TABLE ".$v);
307  }
308  }
309 
310  $this->log("Read Dump.");
311  while(!feof($fp))
312  {
313  //$line = trim(fgets($fp, 200000));
314  $line = trim($this->getline($fp, "\n"));
315 
316  if ($line != "" && substr($line,0,1)!="#"
317  && substr($line,0,1)!="-")
318  {
319  //take line per line, until last char is ";"
320  if (substr($line,-1)==";")
321  {
322  //query is complete
323  $q .= " ".substr($line,0,-1);
324  $r = $ilDB->query($q);
325  if (mysql_errno() > 0)
326  {
327  echo "<br />ERROR: ".mysql_error().
328  "<br />SQL: $q";
329  return false;
330  }
331  unset($q);
332  unset($line);
333  } //if
334  else
335  {
336  $q .= " ".$line;
337  } //else
338  } //if
339  } //for
340 
341  fclose($fp);
342  }
343 
344  if ($ilDB->getDBType() == "oracle")
345  {
346  include_once("./setup/sql/ilDBTemplate.php");
347  setupILIASDatabase();
348  }
349  }
350 
354  function getline( $fp, $delim )
355  {
356  $result = "";
357  while( !feof( $fp ) )
358  {
359  $tmp = fgetc( $fp );
360  if( $tmp == $delim )
361  return $result;
362  $result .= $tmp;
363  }
364  return $result;
365  }
366 
372  function createDump($a_target_file, $a_dump_cmd, $a_db_user = "root",
373  $a_db_pw = "", $a_db_name = "loadtest")
374  {
375  $this->log("Writing Dump");
376  $a_pw = ($a_pwd == "")
377  ? ""
378  : " -p".$a_pw;
379  $cmd = $a_dump_cmd." -u".$a_db_user." ".$a_pw." --skip-lock-tables -Q --extended-insert=FALSE --default-character-set=utf8".
380  " --add-drop-table=FALSE --add-locks=FALSE --compatible=mysql40 ".$a_db_name." > ".$a_target_file;
381  if (!is_file($a_target_file))
382  {
383  $this->log("Something went wrong when writing the dump:<br>".$cmd);
384  }
385  }
386 
393  function writeUserCsv($a_target_file, $a_user_base_name = "learner")
394  {
395  global $ilDB;
396 
397  $this->log("Writing User CSV");
398  $set = $ilDB->query("SELECT * FROM usr_data");
399  $file = fopen($a_target_file, "w");
400  if ($file)
401  {
402  while ($rec = $ilDB->fetchAssoc($set))
403  {
404  if (substr($rec["login"], 0, strlen($a_user_base_name)) == $a_user_base_name)
405  {
406  fwrite($file, $rec["login"]."\n");
407  }
408  }
409  fclose($file);
410  }
411  else
412  {
413  $this->log("Could not write USer CSV.");
414  }
415 
416  }
417 
424  function writeCourseCsv($a_target_file)
425  {
426  global $ilDB;
427 
428  $this->log("Writing Course CSV");
429  $crs_ref_ids = ilUtil::_getObjectsByOperations("crs", "read",
430  0, $limit = 1000000);
431  $file = fopen($a_target_file, "w");
432  if ($file)
433  {
434  foreach ($crs_ref_ids as $r)
435  {
436  fwrite($file, $r."\n");
437  }
438  fclose($file);
439  }
440  else
441  {
442  $this->log("Could not write Course CSV.");
443  }
444 
445  }
446 
453  function writeCategoryCsv($a_target_file)
454  {
455  global $ilDB;
456 
457  $this->log("Writing Category CSV");
458  $cat_ref_ids = ilUtil::_getObjectsByOperations("cat", "read",
459  0, $limit = 1000000);
460  $file = fopen($a_target_file, "w");
461  if ($file)
462  {
463  foreach ($cat_ref_ids as $r)
464  {
465  fwrite($file, $r."\n");
466  }
467  fclose($file);
468  }
469  else
470  {
471  $this->log("Could not write Category CSV.");
472  }
473 
474  }
475 
480  function assignUsersAsCourseMembers($a_user_login_base = "learner",
481  $a_start = 1, $a_end = 100)
482  {
483  global $ilDB;
484 
485  $this->log("Assigning Course Members");
486  $set = $ilDB->query("SELECT usr_id, login FROM usr_data WHERE ".
487  " login LIKE ".$ilDB->quote($a_user_login_base."%", "text")
488  );
489  $user_ids = array();
490  while ($rec = $ilDB->fetchAssoc($set))
491  {
492  $rest = substr($rec["login"], strlen($a_user_login_base));
493  if (is_numeric($rest) &&
494  ((int) $rest >= $a_start && (int) $rest <= $a_end))
495  {
496  $user_ids[] = $rec["usr_id"];
497  }
498  }
499  $cnt = 1;
500  $crs_ref_ids = ilUtil::_getObjectsByOperations("crs", "read",
501  0, $limit = 1000000);
502  include_once "./Modules/Course/classes/class.ilCourseParticipants.php";
503  foreach ($crs_ref_ids as $r)
504  {
505  $crs_id = ilObject::_lookupObjId($r);
506  $mem_obj = ilCourseParticipants::_getInstanceByObjId($crs_id);
507  foreach ($user_ids as $u)
508  {
509  $this->log("$cnt: add user $u as member to course ".$crs_id);
510  $mem_obj->add($u, 1);
511  $cnt++;
512  }
513  }
514  }
515 
520  {
521  global $ilDB;
522 
523  $this->log("Remove Desktop Items.");
524  $ilDB->manipulate("DELETE FROM desktop_item");
525  }
526 
531  {
532  global $ilDB;
533 
534  $this->log("Deactivate calendars on personal desktop.");
535  $set = $ilDB->query("SELECT * FROM usr_data");
536  while ($rec = $ilDB->fetchAssoc($set))
537  {
538  $ilDB->manipulate("REPLACE INTO il_block_setting ".
539  "(type, user_id, block_id, setting, value) VALUES (".
540  $ilDB->quote("pdcal", "text").",".
541  $ilDB->quote($rec["usr_id"], "integer").",".
542  $ilDB->quote(0, "integer").",".
543  $ilDB->quote("detail", "text").",".
544  $ilDB->quote(0, "integer").
545  ")");
546  }
547  }
548 
549 
550  }
551 ?>