ILIAS  Release_4_0_x_branch Revision 61816
 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->initDefaultRoles();
183  $new_crs->initCourseMemberObject();
184 
185  $a_current++;
186  }
187  }
188  }
189  }
190  }
191 
198  function generateFiles($a_test_file, $a_files_per_course = 10, $a_title_base = "File")
199  {
200  global $tree;
201 
202  include_once("./Modules/File/classes/class.ilObjFile.php");
203 
204  $this->log("Creating Files");
205 
206  $a_current = $a_start;
207 
208  // get all categories and sort them by depth
209  $crs_ref_ids = ilUtil::_getObjectsByOperations("crs", "read",
210  0, $limit = 1000000);
211  $cnt = 1;
212  foreach ($crs_ref_ids as $rid)
213  {
214  for ($i = 1; $i <= $a_files_per_course; $i++)
215  {
216  $this->log($a_title_base." ".$cnt);
217  $fileObj = new ilObjFile();
218  $fileObj->setTitle($a_title_base." ".$cnt);
219  $fileObj->setFileName("file_".$cnt.".txt");
220  $fileObj->create();
221  $fileObj->createReference();
222  $fileObj->putInTree($rid);
223  $fileObj->setPermissions($rid);
224  $fileObj->createDirectory();
225  $fileObj->getUploadFile($a_test_file,
226  "file_".$cnt.".txt");
227  $cnt++;
228 
229  }
230  }
231  }
232 
239  function generateCalendarEntries($a_num_per_course = 10)
240  {
241  include_once("./Services/Calendar/classes/class.ilDateTime.php");
242  include_once("./Services/Calendar/classes/class.ilCalendarEntry.php");
243  include_once("./Services/Calendar/classes/class.ilCalendarCategoryAssignments.php");
244  include_once("./Services/Calendar/classes/class.ilCalendarCategories.php");
245 
246  $this->log("Creating Calendar Entries");
247 
248  $crs_ref_ids = ilUtil::_getObjectsByOperations("crs", "read",
249  0, $limit = 1000000);
250  $cnt = 1;
251  foreach ($crs_ref_ids as $rid)
252  {
253  $obj_id = ilObject::_lookupObjId($rid);
255 
256  $start = new ilDate(time(),IL_CAL_UNIX);
257  $end = new ilDate(time(),IL_CAL_UNIX);
258  $end->increment(IL_CAL_HOUR, 2);
259 
260  for ($i = 1; $i <= $a_num_per_course; $i++)
261  {
262  $this->log("Event ".$cnt);
263  $entry = new ilCalendarEntry();
264  $entry->setStart($start); //ilDateTiem
265  $entry->setEnd($end); //ilDateTiem
266  $entry->setFullday(false); //ilDateTiem
267  $entry->setTitle("Event ".$cnt); //ilDateTiem
268  $entry->save();
269  $id = $entry->getEntryId();
270  $ass = new ilCalendarCategoryAssignments($id);
271  $ass->addAssignment($cat_id);
272  $start->increment(IL_CAL_DAY, 1);
273  $end->increment(IL_CAL_DAY, 1);
274 //echo "-$cat_id-";
275 //echo "+".ilDatePresentation::formatDate($start)."+";
276 
277  $cnt++;
278  }
279  }
280  }
281 
289  {
290  global $ilDB;
291 
292  // mysql
293  if ($ilDB->getDBType() == "mysql")
294  {
295  $fp = fopen($file, 'r');
296  if (!$fp)
297  {
298  $this->log("Error reading file $file.");
299  return;
300  }
301  $this->log("Dropping Tables.");
302  $set = $ilDB->query("SHOW tables");
303  while ($rec = $ilDB->fetchAssoc($set))
304  {
305  foreach ($rec as $v)
306  {
307  $ilDB->query("DROP TABLE ".$v);
308  }
309  }
310 
311  $this->log("Read Dump.");
312  while(!feof($fp))
313  {
314  //$line = trim(fgets($fp, 200000));
315  $line = trim($this->getline($fp, "\n"));
316 
317  if ($line != "" && substr($line,0,1)!="#"
318  && substr($line,0,1)!="-")
319  {
320  //take line per line, until last char is ";"
321  if (substr($line,-1)==";")
322  {
323  //query is complete
324  $q .= " ".substr($line,0,-1);
325  $r = $ilDB->query($q);
326  if (mysql_errno() > 0)
327  {
328  echo "<br />ERROR: ".mysql_error().
329  "<br />SQL: $q";
330  return false;
331  }
332  unset($q);
333  unset($line);
334  } //if
335  else
336  {
337  $q .= " ".$line;
338  } //else
339  } //if
340  } //for
341 
342  fclose($fp);
343  }
344 
345  if ($ilDB->getDBType() == "oracle")
346  {
347  include_once("./setup/sql/ilDBTemplate.php");
348  setupILIASDatabase();
349  }
350  }
351 
355  function getline( $fp, $delim )
356  {
357  $result = "";
358  while( !feof( $fp ) )
359  {
360  $tmp = fgetc( $fp );
361  if( $tmp == $delim )
362  return $result;
363  $result .= $tmp;
364  }
365  return $result;
366  }
367 
373  function createDump($a_target_file, $a_dump_cmd, $a_db_user = "root",
374  $a_db_pw = "", $a_db_name = "loadtest")
375  {
376  $this->log("Writing Dump");
377  $a_pw = ($a_pwd == "")
378  ? ""
379  : " -p".$a_pw;
380  $cmd = $a_dump_cmd." -u".$a_db_user." ".$a_pw." --skip-lock-tables -Q --extended-insert=FALSE --default-character-set=utf8".
381  " --add-drop-table=FALSE --add-locks=FALSE --compatible=mysql40 ".$a_db_name." > ".$a_target_file;
382  if (!is_file($a_target_file))
383  {
384  $this->log("Something went wrong when writing the dump:<br>".$cmd);
385  }
386  }
387 
394  function writeUserCsv($a_target_file, $a_user_base_name = "learner")
395  {
396  global $ilDB;
397 
398  $this->log("Writing User CSV");
399  $set = $ilDB->query("SELECT * FROM usr_data");
400  $file = fopen($a_target_file, "w");
401  if ($file)
402  {
403  while ($rec = $ilDB->fetchAssoc($set))
404  {
405  if (substr($rec["login"], 0, strlen($a_user_base_name)) == $a_user_base_name)
406  {
407  fwrite($file, $rec["login"]."\n");
408  }
409  }
410  fclose($file);
411  }
412  else
413  {
414  $this->log("Could not write USer CSV.");
415  }
416 
417  }
418 
425  function writeCourseCsv($a_target_file)
426  {
427  global $ilDB;
428 
429  $this->log("Writing Course CSV");
430  $crs_ref_ids = ilUtil::_getObjectsByOperations("crs", "read",
431  0, $limit = 1000000);
432  $file = fopen($a_target_file, "w");
433  if ($file)
434  {
435  foreach ($crs_ref_ids as $r)
436  {
437  fwrite($file, $r."\n");
438  }
439  fclose($file);
440  }
441  else
442  {
443  $this->log("Could not write Course CSV.");
444  }
445 
446  }
447 
454  function writeCategoryCsv($a_target_file)
455  {
456  global $ilDB;
457 
458  $this->log("Writing Category CSV");
459  $cat_ref_ids = ilUtil::_getObjectsByOperations("cat", "read",
460  0, $limit = 1000000);
461  $file = fopen($a_target_file, "w");
462  if ($file)
463  {
464  foreach ($cat_ref_ids as $r)
465  {
466  fwrite($file, $r."\n");
467  }
468  fclose($file);
469  }
470  else
471  {
472  $this->log("Could not write Category CSV.");
473  }
474 
475  }
476 
481  function assignUsersAsCourseMembers($a_user_login_base = "learner",
482  $a_start = 1, $a_end = 100)
483  {
484  global $ilDB;
485 
486  $this->log("Assigning Course Members");
487  $set = $ilDB->query("SELECT usr_id, login FROM usr_data WHERE ".
488  " login LIKE ".$ilDB->quote($a_user_login_base."%", "text")
489  );
490  $user_ids = array();
491  while ($rec = $ilDB->fetchAssoc($set))
492  {
493  $rest = substr($rec["login"], strlen($a_user_login_base));
494  if (is_numeric($rest) &&
495  ((int) $rest >= $a_start && (int) $rest <= $a_end))
496  {
497  $user_ids[] = $rec["usr_id"];
498  }
499  }
500  $cnt = 1;
501  $crs_ref_ids = ilUtil::_getObjectsByOperations("crs", "read",
502  0, $limit = 1000000);
503  include_once "./Modules/Course/classes/class.ilCourseParticipants.php";
504  foreach ($crs_ref_ids as $r)
505  {
506  $crs_id = ilObject::_lookupObjId($r);
507  $mem_obj = ilCourseParticipants::_getInstanceByObjId($crs_id);
508  foreach ($user_ids as $u)
509  {
510  $this->log("$cnt: add user $u as member to course ".$crs_id);
511  $mem_obj->add($u, 1);
512  $cnt++;
513  }
514  }
515  }
516 
521  {
522  global $ilDB;
523 
524  $this->log("Remove Desktop Items.");
525  $ilDB->manipulate("DELETE FROM desktop_item");
526  }
527 
532  {
533  global $ilDB;
534 
535  $this->log("Deactivate calendars on personal desktop.");
536  $set = $ilDB->query("SELECT * FROM usr_data");
537  while ($rec = $ilDB->fetchAssoc($set))
538  {
539  $ilDB->manipulate("REPLACE INTO il_block_setting ".
540  "(type, user_id, block_id, setting, value) VALUES (".
541  $ilDB->quote("pdcal", "text").",".
542  $ilDB->quote($rec["usr_id"], "integer").",".
543  $ilDB->quote(0, "integer").",".
544  $ilDB->quote("detail", "text").",".
545  $ilDB->quote(0, "integer").
546  ")");
547  }
548  }
549 
550 
551  }
552 ?>