dokeos-backup
[ class tree: dokeos-backup ] [ index: dokeos-backup ] [ all elements ]

Source for file CourseRecycler.class.php

Documentation is available at CourseRecycler.class.php

  1. <?php
  2. // $Id: CourseRecycler.class.php 12117 2007-04-24 22:06:36Z pcool $
  3. /*
  4. ============================================================================== 
  5.     Dokeos - elearning and course management software
  6.     
  7.     Copyright (c) 2004 Dokeos S.A.
  8.     Copyright (c) 2003 Ghent University (UGent)
  9.     Copyright (c) 2001 Universite catholique de Louvain (UCL)
  10.     Copyright (c) Bart Mollet (bart.mollet@hogent.be)
  11.     
  12.     For a full list of contributors, see "credits.txt".
  13.     The full license can be read in "license.txt".
  14.     
  15.     This program is free software; you can redistribute it and/or
  16.     modify it under the terms of the GNU General Public License
  17.     as published by the Free Software Foundation; either version 2
  18.     of the License, or (at your option) any later version.
  19.     
  20.     See the GNU General Public License for more details.
  21.     
  22.     Contact address: Dokeos, 44 rue des palais, B-1030 Brussels, Belgium
  23.     Mail: info@dokeos.com
  24. ============================================================================== 
  25. */
  26. require_once ('Course.class.php');
  27. require_once ('rmdirr.php');
  28. /**
  29.  * Class to delete items from a Dokeos-course
  30.  * @author Bart Mollet <bart.mollet@hogent.be>
  31.  * @package dokeos.backup
  32.  */
  33. {
  34.     /**
  35.      * A course-object with the items to delete
  36.      */
  37.     var $course;
  38.     /**
  39.      * Create a new CourseRecycler
  40.      * @param course $course The course-object which contains the items to
  41.      *  delete
  42.      */
  43.     function CourseRecycler($course)
  44.     {
  45.         $this->course = $course;
  46.     }
  47.     /**
  48.      * Delete all items from the course.
  49.      * This deletes all items in the course-object from the current Dokeos-
  50.      * course
  51.      */
  52.     function recycle()
  53.     {
  54.         $table_linked_resources Database :: get_course_table(TABLE_LINKED_RESOURCES$this->course->destination_db);
  55.         $table_item_properties Database::get_course_table(TABLE_ITEM_PROPERTY);
  56.         foreach ($this->course->resources as $type => $resources)
  57.         {
  58.             foreach ($resources as $id => $resource)
  59.             {
  60.                 $sql "DELETE FROM ".$table_linked_resources." WHERE (source_type = '".$type."' AND source_id = '".$id."') OR (resource_type = '".$type."' AND resource_id = '".$id."')  ";
  61.                 api_sql_query($sql,__FILE__,__LINE__);
  62.                 $sql "DELETE FROM ".$table_item_properties." WHERE tool ='".$resource->get_tool()."' AND ref=".$id;
  63.                 api_sql_query($sql);
  64.             }
  65.         }
  66.         $this->recycle_links();
  67.         $this->recycle_link_categories();
  68.         $this->recycle_events();
  69.         $this->recycle_announcements();
  70.         $this->recycle_documents();
  71.         //$this->recycle_forums();
  72.         //$this->recycle_forum_categories();
  73.         $this->recycle_quizzes();
  74.         $this->recycle_surveys();
  75.         $this->recycle_learnpaths();
  76.         $this->recycle_cours_description();
  77.     }
  78.     /**
  79.      * Delete documents
  80.      */
  81.     function recycle_documents()
  82.     {
  83.         if ($this->course->has_resources(RESOURCE_DOCUMENT))
  84.         {
  85.             $table Database :: get_course_table(TABLE_DOCUMENT);
  86.             foreach ($this->course->resources[RESOURCE_DOCUMENTas $id => $document)
  87.             {
  88.                 rmdirr($this->course->backup_path.'/'.$document->path);
  89.             }
  90.             $ids implode(','(array_keys($this->course->resources[RESOURCE_DOCUMENT])));
  91.             $sql "DELETE FROM ".$table." WHERE id IN(".$ids.")";
  92.             api_sql_query($sql,__FILE__,__LINE__);
  93.         }
  94.     }
  95.     /**
  96.      * Delete links
  97.      */
  98.     function recycle_links()
  99.     {
  100.         if ($this->course->has_resources(RESOURCE_LINK))
  101.         {
  102.             $table Database :: get_course_table(TABLE_LINK);
  103.             $ids implode(','(array_keys($this->course->resources[RESOURCE_LINK])));
  104.             $sql "DELETE FROM ".$table." WHERE id IN(".$ids.")";
  105.             api_sql_query($sql,__FILE__,__LINE__);
  106.         }
  107.     }
  108.     /**
  109.      * Delete forums
  110.      */
  111.     function recycle_forums()
  112.     {
  113.         if ($this->course->has_resources(RESOURCE_FORUM))
  114.         {
  115.             $table_forum Database :: get_course_table(TABLE_FORUM);
  116.             $table_thread Database :: get_course_table(TABLE_FORUM_THREAD);
  117.             $table_post Database :: get_course_table(TABLE_FORUM_POST);
  118.             $forum_ids implode(','(array_keys($this->course->resources[RESOURCE_FORUM])));
  119.             $sql "DELETE FROM ".$table_post." WHERE forum_id IN(".$forum_ids.")";
  120.             api_sql_query($sql,__FILE__,__LINE__);
  121.             $sql "DELETE FROM ".$table_thread." WHERE forum_id IN(".$forum_ids.")";
  122.             api_sql_query($sql,__FILE__,__LINE__);
  123.             $sql "DELETE FROM ".$table_forum." WHERE forum_id IN(".$forum_ids.")";
  124.             api_sql_query($sql,__FILE__,__LINE__);
  125.         }
  126.     }
  127.     /**
  128.      * Delete forum-categories
  129.      * Deletes all forum-categories from current course without forums
  130.      */
  131.     function recycle_forum_categories()
  132.     {
  133.         $table_forum Database :: get_course_table(TABLE_FORUM);
  134.         $table_forumcat Database :: get_course_table(TABLE_FORUM_CATEGORY);
  135.         $sql "SELECT fc.cat_id FROM ".$table_forumcat." fc LEFT JOIN ".$table_forum." f ON fc.cat_id=f.forum_category WHERE f.forum_id IS NULL";
  136.         $res api_sql_query($sql,__FILE__,__LINE__);
  137.         while ($obj mysql_fetch_object($res))
  138.         {
  139.             $sql "DELETE FROM ".$table_forumcat." WHERE cat_id = ".$obj->cat_id;
  140.             api_sql_query($sql,__FILE__,__LINE__);
  141.         }
  142.     }
  143.     /**
  144.      * Delete link-categories
  145.      * Deletes all empty link-categories (=without links) from current course
  146.      */
  147.     function recycle_link_categories()
  148.     {
  149.         $link_cat_table Database :: get_course_table(TABLE_LINK_CATEGORY);
  150.         $link_table Database :: get_course_table(TABLE_LINK);
  151.         $sql "SELECT lc.id FROM ".$link_cat_table." lc LEFT JOIN ".$link_table." l ON lc.id=l.category_id WHERE l.id IS NULL";
  152.         $res api_sql_query($sql,__FILE__,__LINE__);
  153.         while ($obj mysql_fetch_object($res))
  154.         {
  155.             $sql "DELETE FROM ".$link_cat_table." WHERE id = ".$obj->id;
  156.             api_sql_query($sql,__FILE__,__LINE__);
  157.         }
  158.     }
  159.     /**
  160.      * Delete events
  161.      */
  162.     function recycle_events()
  163.     {
  164.         if ($this->course->has_resources(RESOURCE_EVENT))
  165.         {
  166.             $table Database :: get_course_table(TABLE_AGENDA);
  167.             $ids implode(','(array_keys($this->course->resources[RESOURCE_EVENT])));
  168.             $sql "DELETE FROM ".$table." WHERE id IN(".$ids.")";
  169.             api_sql_query($sql,__FILE__,__LINE__);
  170.         }
  171.     }
  172.     /**
  173.      * Delete announcements
  174.      */
  175.     function recycle_announcements()
  176.     {
  177.         if ($this->course->has_resources(RESOURCE_ANNOUNCEMENT))
  178.         {
  179.             $table Database :: get_course_table(TABLE_ANNOUNCEMENT);
  180.             $ids implode(','(array_keys($this->course->resources[RESOURCE_ANNOUNCEMENT])));
  181.             $sql "DELETE FROM ".$table." WHERE id IN(".$ids.")";
  182.             api_sql_query($sql,__FILE__,__LINE__);
  183.         }
  184.     }
  185.     /**
  186.      * Recycle quizzes - doesn't remove the questions and their answers, as they might still be used later
  187.      */
  188.     function recycle_quizzes()
  189.     {
  190.         if ($this->course->has_resources(RESOURCE_QUIZ))
  191.         {
  192.             //$table_qui_que = Database :: get_course_table(TABLE_QUIZ_QUESTION);
  193.             //$table_qui_ans = Database :: get_course_table(TABLE_QUIZ_ANSWER);
  194.             $table_qui Database :: get_course_table(TABLE_QUIZ_TEST);
  195.             $table_rel Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION);
  196.             $ids implode(','(array_keys($this->course->resources[RESOURCE_QUIZ])));
  197.             $sql "DELETE FROM ".$table_qui." WHERE id IN(".$ids.")";
  198.             api_sql_query($sql,__FILE__,__LINE__);
  199.             $sql "DELETE FROM ".$table_rel." WHERE exercice_id IN(".$ids.")";
  200.             api_sql_query($sql,__FILE__,__LINE__);
  201.         }
  202.     }
  203.     /**
  204.      * Recycle surveys - removes everything
  205.      */
  206.     function recycle_surveys()
  207.     {
  208.         if ($this->course->has_resources(RESOURCE_SURVEY))
  209.         {
  210.             $table_survey Database :: get_course_table(TABLE_SURVEY);
  211.             $table_survey_q Database :: get_course_table(TABLE_SURVEY_QUESTION);
  212.             $table_survey_q_o Database :: get_course_table(TABLE_SURVEY_QUESTION_OPTION);
  213.             $table_survey_a Database :: get_course_Table(TABLE_SURVEY_ANSWER);
  214.             $table_survey_i Database :: get_course_table(TABLE_SURVEY_INVITATION);
  215.             $ids implode(','(array_keys($this->course->resources[RESOURCE_SURVEY])));
  216.             $sql "DELETE FROM ".$table_survey_i." ";
  217.             api_sql_query($sql,__FILE__,__LINE__);
  218.             $sql "DELETE FROM ".$table_survey_a." WHERE survey_id IN(".$ids.")";
  219.             api_sql_query($sql,__FILE__,__LINE__);
  220.             $sql "DELETE FROM ".$table_survey_q_o." WHERE survey_id IN(".$ids.")";
  221.             api_sql_query($sql,__FILE__,__LINE__);
  222.             $sql "DELETE FROM ".$table_survey_q." WHERE survey_id IN(".$ids.")";
  223.             api_sql_query($sql,__FILE__,__LINE__);
  224.             $sql "DELETE FROM ".$table_survey." WHERE survey_id IN(".$ids.")";
  225.             api_sql_query($sql,__FILE__,__LINE__);
  226.         }
  227.     }
  228.     /**
  229.      * Recycle learnpaths
  230.      */
  231.     function recycle_learnpaths()
  232.     {
  233.         if ($this->course->has_resources(RESOURCE_LEARNPATH))
  234.         {
  235.             $table_main Database :: get_course_table(TABLE_LP_MAIN);
  236.             $table_item Database :: get_course_table(TABLE_LP_ITEM);
  237.             $table_view Database :: get_course_table(TABLE_LP_VIEW);
  238.             $table_iv   Database :: get_course_table(TABLE_LP_ITEM_VIEW);
  239.             $table_iv_int Database :: get_course_table(TABLE_LP_IV_INTERACTION);
  240.             $table_tool Database::get_course_table(TABLE_TOOL_LIST);
  241.             foreach($this->course->resources[RESOURCE_LEARNPATHas $id => $learnpath)
  242.             {
  243.                 //remove links from course homepage
  244.                 $sql "DELETE FROM $table_tool WHERE link LIKE '%lp_controller.php%lp_id=$id%' AND image='scormbuilder.gif'";
  245.                 api_sql_query($sql,__FILE__,__LINE__);
  246.                 //remove elements from lp_* tables (from bottom-up) by removing interactions, then item_view, then views and items, then paths
  247.                 $sql_items "SELECT id FROM $table_item WHERE lp_id=$id";
  248.                 $res_items api_sql_query($sql_items,__FILE__,__LINE__);
  249.                 while ($row_item Database::fetch_array($res_items))
  250.                 {
  251.                     //get item views
  252.                     $sql_iv "SELECT id FROM $table_iv WHERE lp_item_id=".$row_item['id'];
  253.                     $res_iv api_sql_query($sql_iv,__FILE__,__LINE__);
  254.                     while ($row_iv Database::fetch_array($res_iv))
  255.                     {
  256.                         //delete interactions
  257.                         $sql_iv_int_del "DELETE FROM $table_iv_int WHERE lp_iv_id = ".$row_iv['id'];
  258.                         $res_iv_int_del api_sql_query($sql_iv_int_del,__FILE__,__LINE__);
  259.                     }
  260.                     //delete item views
  261.                     $sql_iv_del "DELETE FROM $table_iv WHERE lp_item_id=".$row_item['id'];
  262.                     $res_iv_del api_sql_query($sql_iv_del,__FILE__,__LINE__);
  263.                 }
  264.                 //delete items
  265.                 $sql_items_del "DELETE FROM $table_item WHERE lp_id=$id";
  266.                 $res_items_del api_sql_query($sql_items_del,__FILE__,__LINE__);
  267.                 //delete views
  268.                 $sql_views_del "DELETE FROM $table_view WHERE lp_id=$id";
  269.                 $res_views_del api_sql_query($sql_views_del,__FILE__,__LINE__);
  270.                 //delete lps
  271.                 $sql_del "DELETE FROM $table_main WHERE id = $id";
  272.                 $res_del api_sql_query($sql_del,__FILE__,__LINE__);
  273.             }
  274.         }
  275.     }
  276.     /**
  277.      * Delete course description
  278.      */
  279.     function recycle_cours_description()
  280.     {
  281.         if ($this->course->has_resources(RESOURCE_COURSEDESCRIPTION))
  282.         {
  283.             $table Database :: get_course_table(TABLE_COURSE_DESCRIPTION);
  284.             $ids implode(','(array_keys($this->course->resources[RESOURCE_COURSEDESCRIPTION])));
  285.             $sql "DELETE FROM ".$table." WHERE id IN(".$ids.")";
  286.             api_sql_query($sql,__FILE__,__LINE__);
  287.         }
  288.     }
  289. }
  290. ?>

Documentation generated on Thu, 12 Jun 2008 13:12:24 -0500 by phpDocumentor 1.4.1