Exemplo n.º 1
0
 function FillList($course_id, &$docs_rows, &$docs_possibilities, $folders = false, $show_unavailable = true)
 {
     global $JLMS_DB, $my;
     $JLMS_ACL =& JLMSFactory::getACL();
     $AND_ST = "";
     if (false !== ($enroll_period = JLMS_getEnrolPeriod($my->id, $course_id))) {
         $AND_ST = " AND IF(a.is_time_related, (a.show_period < '" . $enroll_period . "' ), 1) ";
     }
     $query = "SELECT a.*, b.file_name, c.name, c.username, c.name as author_name, dp.*, dp.doc_id as doc_perms_db, dp.doc_id as doc_perms, dp.p_manage as p_create, dp.p_publish as p_publish_childs" . "\n FROM #__lms_documents as a LEFT JOIN #__lms_files as b ON a.file_id = b.id AND a.folder_flag = 0 LEFT JOIN #__users as c ON a.owner_id = c.id" . "\n LEFT JOIN #__lms_documents_perms as dp ON  a.id = dp.doc_id AND dp.role_id = " . $JLMS_ACL->GetRole() . "\n WHERE a.course_id = '" . $course_id . "'" . $AND_ST . ($folders ? "\n AND a.folder_flag = 1" : "") . "\n ORDER BY a.parent_id, a.ordering, a.doc_name, c.username";
     $JLMS_DB->SetQuery($query);
     $rows = $JLMS_DB->LoadObjectList();
     if (!$folders) {
         // not only folders are present in 'rows' - we need to filter/remove unnecessary items
         $bad_in = array();
         $rows_n = array();
         for ($j = 0; $j < count($rows); $j++) {
             // TODO: redevelop this part of the code, DO NOT USE database queries within the for/while/foreach loops
             if ($rows[$j]->folder_flag == 3) {
                 // this is a file-library link
                 $query = "SELECT a.*, b.file_name" . "\n FROM #__lms_outer_documents as a LEFT JOIN #__lms_files as b ON a.file_id = b.id AND a.folder_flag = 0 " . "\n WHERE a.folder_flag = 0 AND a.id = " . $rows[$j]->file_id;
                 $JLMS_DB->SetQuery($query);
                 $out_row = $JLMS_DB->LoadObjectList();
                 if (count($out_row) && $out_row[0]->allow_link == 1) {
                     // resource is found in the Library
                     $rows[$j]->doc_name = $out_row[0]->doc_name;
                     $rows[$j]->doc_description = $out_row[0]->doc_description;
                     $rows[$j]->file_id = $out_row[0]->file_id;
                     $rows[$j]->file_name = $out_row[0]->file_name;
                 } else {
                     // there is no link in the Library (e.g. file-library file was removed or its permissions were changed)
                     if ($JLMS_ACL->CheckPermissions('docs', 'manage') && $show_unavailable) {
                         // show 'Resource is not available' message instead of a file
                         $rows[$j]->doc_name = _JLMS_LP_RESOURSE_ISUNAV;
                         $rows[$j]->is_link = 1;
                         $rows[$j]->author_name = '';
                     } else {
                         // remove item from the array
                         $g = 0;
                         $rows_n = array();
                         // What the f**k?....
                         for ($z = 0; $z < count($rows); $z++) {
                             if ($z != $j && !in_array($z, $bad_in)) {
                                 $g++;
                             } else {
                                 // populate array of the items which need to be removed from the list of files
                                 $bad_in[] = $j;
                             }
                         }
                     }
                 }
             }
         }
         if (count($bad_in)) {
             // remove 'not available' items from the list of files
             $rows_n = array();
             $g = 0;
             for ($z = 0; $z < count($rows); $z++) {
                 if (in_array($z, $bad_in)) {
                 } else {
                     $rows_n[$g] = $rows[$z];
                     $g++;
                 }
             }
             $rows = $rows_n;
         }
     }
     $rows = JLMS_GetTreeStructure($rows);
     $rows = AppendFileIcons_toList($rows);
     $possibilities = new stdClass();
     if (true) {
         //proceed in any case, even if we have 'ignore_permissions'
         // check notes about custom permissions at the top of the 'documents' source file (after $task section)
         $bad_in = array();
         $permissions = array();
         $permissions[0] = new stdClass();
         $permissions[0]->active = 1;
         // not used any more ????
         $permissions[0]->p_view = $possibilities->view = $JLMS_ACL->CheckPermissions('docs', 'view') ? 1 : 0;
         $permissions[0]->p_viewall = $possibilities->viewall = $JLMS_ACL->CheckPermissions('docs', 'view_all') ? 1 : 0;
         $permissions[0]->p_order = $possibilities->order = $JLMS_ACL->CheckPermissions('docs', 'order') ? 1 : 0;
         $permissions[0]->p_publish = $possibilities->publish = $JLMS_ACL->CheckPermissions('docs', 'publish') ? 1 : 0;
         $permissions[0]->p_publish_childs = $possibilities->publish_childs = $JLMS_ACL->CheckPermissions('docs', 'publish') ? 1 : 0;
         $permissions[0]->p_manage = $possibilities->manage = $JLMS_ACL->CheckPermissions('docs', 'manage') ? 1 : 0;
         $permissions[0]->p_create = $possibilities->create = $JLMS_ACL->CheckPermissions('docs', 'manage') ? 1 : 0;
         $folder_id = 0;
         $j = 0;
         $n = count($rows);
         while ($j < $n) {
             if ($rows[$j]->folder_flag == 1 && isset($rows[$j]->doc_perms_db) && $rows[$j]->doc_perms_db) {
                 // folder with configured custom permissions
                 $old_folder_id = $rows[$j]->parent_id;
                 //$folder_id;
                 // process permissions (add them into array from which they will be associated with child items)
                 $folder_id = $rows[$j]->id;
                 $parent_id = $rows[$j]->parent_id;
                 if ($JLMS_ACL->CheckPermissions('docs', 'ignore_permissions')) {
                     $permissions[$folder_id] = new stdClass();
                     $permissions[$folder_id] = $permissions[0];
                     $rows[$j]->p_view = $permissions[0]->p_view;
                     $rows[$j]->p_viewall = $permissions[0]->p_viewall;
                     $rows[$j]->p_order = $permissions[0]->p_order;
                     $rows[$j]->p_publish = $permissions[0]->p_publish;
                     $rows[$j]->p_manage = $permissions[0]->p_manage;
                     $rows[$j]->p_create = $permissions[0]->p_create;
                     $rows[$j]->p_publish_childs = $permissions[0]->p_publish_childs;
                 } else {
                     $permissions[$folder_id] = new stdClass();
                     $permissions[$folder_id]->active = 1;
                     // not used any more ????
                     $permissions[$folder_id]->p_view = $rows[$j]->p_view;
                     $permissions[$folder_id]->p_viewall = $permissions[$folder_id]->p_view ? $rows[$j]->p_viewall : 0;
                     $permissions[$folder_id]->p_order = $permissions[$folder_id]->p_view ? $rows[$j]->p_order : 0;
                     $permissions[$folder_id]->p_publish = $permissions[$folder_id]->p_view ? $rows[$j]->p_publish : 0;
                     $permissions[$folder_id]->p_publish_childs = $permissions[$folder_id]->p_view ? $rows[$j]->p_publish_childs : 0;
                     $permissions[$folder_id]->p_manage = $permissions[$folder_id]->p_view ? $rows[$j]->p_manage : 0;
                     // "no view - no manage" // 'no martiny - no party ;)'
                     $permissions[$folder_id]->p_create = $permissions[$folder_id]->p_view ? $rows[$j]->p_create : 0;
                     // set parent's permissions for this folder
                     $rows[$j]->doc_perms = 1;
                     $rows[$j]->p_view = $permissions[$old_folder_id]->p_view ? $rows[$j]->p_view : 0;
                     $rows[$j]->p_viewall = $permissions[$old_folder_id]->p_viewall ? $rows[$j]->p_viewall : 0;
                     $rows[$j]->p_order = $permissions[$old_folder_id]->p_order ? $rows[$j]->p_order : 0;
                     $rows[$j]->p_publish = $permissions[$old_folder_id]->p_publish ? $rows[$j]->p_publish : 0;
                     $rows[$j]->p_manage = $permissions[$old_folder_id]->p_manage ? $rows[$j]->p_manage : 0;
                     $rows[$j]->p_create = $old_folder_id ? $permissions[$old_folder_id]->p_create : $rows[$j]->p_create;
                     $rows[$j]->p_publish_childs = $old_folder_id ? $permissions[$old_folder_id]->p_publish_childs : $rows[$j]->p_publish_childs;
                 }
                 // change 'view' permission regarding to the 'published' status of the item
                 if (!$rows[$j]->p_viewall) {
                     if ($rows[$j]->published && $permissions[$old_folder_id]->p_view && ($rows[$j]->publish_start && strtotime($rows[$j]->start_date) <= strtotime(date('Y-m-d')) || !$rows[$j]->publish_start) && ($rows[$j]->publish_end && strtotime($rows[$j]->end_date) >= strtotime(date('Y-m-d')) || !$rows[$j]->publish_end)) {
                         // user can view this item
                     } elseif ($rows[$j]->owner_id == $my->id && $rows[$j]->p_manage) {
                         // this item is unpublished, but user is its owner - he can view it if he has 'manage' rights
                     } else {
                         $rows[$j]->p_view = 0;
                         $rows[$j]->p_viewall = 0;
                         $rows[$j]->p_order = 0;
                         $rows[$j]->p_publish = 0;
                         $rows[$j]->p_manage = 0;
                         $rows[$j]->p_create = 0;
                         $rows[$j]->p_publish_childs = 0;
                         $permissions[$folder_id]->p_view = 0;
                         $permissions[$folder_id]->p_viewall = 0;
                         $permissions[$folder_id]->p_order = 0;
                         $permissions[$folder_id]->p_publish = 0;
                         $permissions[$folder_id]->p_manage = 0;
                         $permissions[$folder_id]->p_create = 0;
                         $permissions[$folder_id]->p_publish_childs = 0;
                     }
                 }
                 $possibilities->create = $possibilities->create ? $possibilities->create : $rows[$j]->p_create;
                 // we can create docs at least in this folder
                 $possibilities->publish_childs = $possibilities->publish_childs ? $possibilities->publish_childs : $rows[$j]->p_publish_childs;
             } else {
                 // any other item: file,  file-library link or folder without custom permissions
                 $folder_id = $rows[$j]->parent_id;
                 if (isset($permissions[$folder_id]) && isset($permissions[$folder_id]->active) && $permissions[$folder_id]->active) {
                     // set parent's permissions for this item
                     $rows[$j]->doc_perms = 1;
                     $rows[$j]->p_view = $permissions[$folder_id]->p_view;
                     $rows[$j]->p_viewall = $permissions[$folder_id]->p_viewall;
                     $rows[$j]->p_order = $permissions[$folder_id]->p_order;
                     $rows[$j]->p_publish = $permissions[$folder_id]->p_publish;
                     $rows[$j]->p_manage = $permissions[$folder_id]->p_manage;
                     $rows[$j]->p_create = 0;
                     //$permissions[$folder_id]->p_create;
                     $rows[$j]->p_publish_childs = 0;
                     //$permissions[$folder_id]->p_publish_childs;
                     // change 'view' permission regarding to the 'published' status of the item
                     if (!$rows[$j]->p_viewall) {
                         if ($rows[$j]->published && $permissions[$folder_id]->p_view && ($rows[$j]->publish_start && strtotime($rows[$j]->start_date) <= strtotime(date('Y-m-d')) || !$rows[$j]->publish_start) && ($rows[$j]->publish_end && strtotime($rows[$j]->end_date) >= strtotime(date('Y-m-d')) || !$rows[$j]->publish_end)) {
                             // user can view this item
                         } elseif ($rows[$j]->owner_id == $my->id && $rows[$j]->p_manage) {
                             // this item is unpublished, but user is its owner - he can view it if he has 'manage' rights
                         } else {
                             $rows[$j]->p_view = 0;
                             $rows[$j]->p_viewall = 0;
                             $rows[$j]->p_order = 0;
                             $rows[$j]->p_publish = 0;
                             $rows[$j]->p_manage = 0;
                             $rows[$j]->p_create = 0;
                             $rows[$j]->p_publish_childs = 0;
                             if ($rows[$j]->folder_flag == 1) {
                                 // just a folder (without custom permissions)
                                 $folder_id_current = $rows[$j]->id;
                                 $permissions[$folder_id_current]->p_view = 0;
                                 $permissions[$folder_id_current]->p_viewall = 0;
                                 $permissions[$folder_id_current]->p_order = 0;
                                 $permissions[$folder_id_current]->p_publish = 0;
                                 $permissions[$folder_id_current]->p_manage = 0;
                                 $permissions[$folder_id_current]->p_create = 0;
                                 $permissions[$folder_id_current]->p_publish_childs = 0;
                             }
                         }
                     }
                     $possibilities->view = $possibilities->view ? $possibilities->view : $rows[$j]->p_view;
                     $possibilities->viewall = $possibilities->view ? $possibilities->viewall : $rows[$j]->p_viewall;
                     $possibilities->order = $possibilities->order ? $possibilities->order : $rows[$j]->p_order;
                     $possibilities->publish = $possibilities->publish ? $possibilities->publish : $rows[$j]->p_publish;
                     $possibilities->manage = $possibilities->manage ? $possibilities->manage : $rows[$j]->p_manage;
                     //$possibilities->create = $possibilities->create ? $possibilities->create : $rows[$j]->p_create;
                     //$possibilities->publish_childs = $possibilities->publish_childs ? $possibilities->publish_childs : $rows[$j]->p_publish_childs;
                 }
                 if ($rows[$j]->folder_flag == 1) {
                     // just a folder (without custom permissions)
                     $rows[$j]->p_create = $permissions[$folder_id]->p_create;
                     $rows[$j]->p_publish_childs = $permissions[$folder_id]->p_publish_childs;
                     $possibilities->create = $possibilities->create ? $possibilities->create : $rows[$j]->p_create;
                     $possibilities->publish_childs = $possibilities->publish_childs ? $possibilities->publish_childs : $rows[$j]->p_publish_childs;
                     // HERE: inherit permissions from the parent folder
                     $folder_id = $rows[$j]->id;
                     $parent_id = $rows[$j]->parent_id;
                     if (isset($permissions[$parent_id]) && isset($permissions[$parent_id]->active) && $permissions[$parent_id]->active) {
                         $permissions[$folder_id]->active = 1;
                         $permissions[$folder_id]->p_view = isset($permissions[$folder_id]->p_view) && $permissions[$folder_id]->p_view || !isset($permissions[$folder_id]->p_view) ? $permissions[$parent_id]->p_view : $permissions[$folder_id]->p_view;
                         $permissions[$folder_id]->p_viewall = isset($permissions[$folder_id]->p_viewall) && $permissions[$folder_id]->p_viewall || !isset($permissions[$folder_id]->p_viewall) ? $permissions[$parent_id]->p_viewall : $permissions[$folder_id]->p_viewall;
                         $permissions[$folder_id]->p_order = isset($permissions[$folder_id]->p_order) && $permissions[$folder_id]->p_order || !isset($permissions[$folder_id]->p_order) ? $permissions[$parent_id]->p_order : $permissions[$folder_id]->p_order;
                         $permissions[$folder_id]->p_publish = isset($permissions[$folder_id]->p_publish) && $permissions[$folder_id]->p_publish || !isset($permissions[$folder_id]->p_publish) ? $permissions[$parent_id]->p_publish : $permissions[$folder_id]->p_publish;
                         $permissions[$folder_id]->p_manage = isset($permissions[$folder_id]->p_manage) && $permissions[$folder_id]->p_manage || !isset($permissions[$folder_id]->p_manage) ? $permissions[$parent_id]->p_manage : $permissions[$folder_id]->p_manage;
                         $permissions[$folder_id]->p_create = isset($permissions[$folder_id]->p_create) && $permissions[$folder_id]->p_create || !isset($permissions[$folder_id]->p_create) ? $permissions[$parent_id]->p_create : $permissions[$folder_id]->p_create;
                         $permissions[$folder_id]->p_publish_childs = isset($permissions[$folder_id]->p_publish_childs) && $permissions[$folder_id]->p_publish_childs || !isset($permissions[$folder_id]->p_publish_childs) ? $permissions[$parent_id]->p_publish_childs : $permissions[$folder_id]->p_publish_childs;
                         if (!$permissions[$folder_id]->p_view) {
                             // "no view - no manage" // 'no martiny - no party ;)'
                             $permissions[$folder_id]->p_viewall = 0;
                             $permissions[$folder_id]->p_order = 0;
                             $permissions[$folder_id]->p_publish = 0;
                             $permissions[$folder_id]->p_manage = 0;
                             $permissions[$folder_id]->p_create = 0;
                             $permissions[$folder_id]->p_publish_childs = 0;
                         }
                     }
                 }
             }
             $j++;
         }
     }
     $docs_rows = $rows;
     $docs_possibilities = $possibilities;
 }
Exemplo n.º 2
0
function JLMS_showMainPage_front($option)
{
    global $my, $JLMS_DB, $JLMS_CONFIG, $Itemid;
    $JLMS_ACL =& JLMSFactory::getACL();
    $assigned_groups_only = $JLMS_ACL->CheckPermissions('advanced', 'assigned_groups_only');
    $pathway = array();
    $pathway[] = array('name' => _JLMS_PATHWAY_HOME, 'link' => sefRelToAbs("index.php?option={$option}&amp;Itemid={$Itemid}"), 'is_home' => true);
    JLMSAppendPathWay($pathway);
    $hp_items = $JLMS_CONFIG->get('homepage_items');
    $lists = array();
    //courses
    $cidsf = $JLMS_CONFIG->get('student_in_future_courses');
    $course_data_sf = array();
    $cidtxt = '0';
    if (!empty($cidsf)) {
        $cidsfxt = implode(',', $cidsf);
        $query = "SELECT a.*, '0' as user_course_role FROM #__lms_courses as a WHERE a.id IN ({$cidsfxt}) AND a.id NOT IN ({$cidtxt})" . "\n ORDER BY " . ($JLMS_CONFIG->get('lms_courses_sortby', 0) ? "a.ordering, a.course_name, a.id" : "a.course_name, a.ordering, a.id");
        $JLMS_DB->SetQuery($query);
        $course_data_sf = $JLMS_DB->LoadObjectList();
    }
    $my_courses_r = my_courses_r();
    if (count($my_courses_r) || count($cidsf)) {
    } else {
        JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=courses"));
    }
    $c_ids = array();
    foreach ($my_courses_r as $mcr) {
        $c_ids[] = $mcr->id;
    }
    $my_courses_r = array_merge($my_courses_r, $course_data_sf);
    if ($JLMS_CONFIG->get('frontpage_courses_tree', 0)) {
        $hp_items = 999999999;
    }
    $my_courses = array();
    $i = 0;
    while ($i < $hp_items && $i < count($my_courses_r)) {
        $my_courses[] = $my_courses_r[$i];
        $i++;
    }
    if (!is_array($c_ids)) {
        $c_ids = array(0);
    }
    $c_str = implode(',', $c_ids);
    if ($JLMS_CONFIG->get('frontpage_courses_tree', 0)) {
        //My_courses_tree
        $levellimit = 20;
        $query = "SELECT id, c_category as name, parent, 0 as is_course" . "\n FROM #__lms_course_cats ORDER BY c_category";
        $JLMS_DB->setQuery($query);
        $cats = $JLMS_DB->loadObjectList();
        $query = "SELECT a.id as user_certificate, b.course_id" . "\n FROM #__lms_certificate_users as a, #__lms_users_in_groups as b" . "\n WHERE 1" . "\n AND a.user_id = '" . $my->id . "'" . "\n AND a.crt_option = '1'" . "\n AND b.user_id = a.user_id AND a.course_id = b.course_id";
        $JLMS_DB->setQuery($query);
        $crtfs = $JLMS_DB->loadObjectList();
        $i = 0;
        foreach ($my_courses as $course) {
            $my_courses[$i]->certificate = 0;
            foreach ($crtfs as $crtf) {
                if ($course->id == $crtf->course_id && $crtf->user_certificate) {
                    $my_courses[$i]->certificate = 1;
                    break;
                }
            }
            $i++;
        }
        $children = array();
        foreach ($cats as $v) {
            $pt = $v->parent;
            /** Joomla 1.6 compability { */
            $v->parent_id = $v->parent;
            $v->title = $v->name;
            /** } Joomla 1.6 compability*/
            $list = @$children[$pt] ? $children[$pt] : array();
            array_push($list, $v);
            $children[$pt] = $list;
        }
        $cats = mosTreeRecurse(0, '', array(), $children, max(0, $levellimit - 1));
        $i = 0;
        $tmp_cats = array();
        foreach ($cats as $data) {
            $tmp_cats[$i] = $data;
            $i++;
        }
        $cats = array();
        $cats = $tmp_cats;
        //NEW
        $tmp = array();
        $last_catid = 0;
        foreach ($my_courses as $data) {
            if ($last_catid == 0 || $last_catid != $data->cat_id) {
                $last_catid = $data->cat_id;
            }
            $tmp[$last_catid][] = $data->id;
        }
        $for_not_empty = $tmp;
        //NEW
        $flms_course = array();
        if ($JLMS_CONFIG->get('flms_integration', 0)) {
            $query = "SELECT * FROM #__lmsf_courses";
            $JLMS_DB->setQuery($query);
            $flms_course = $JLMS_DB->loadObjectList();
        }
        $result_tree = array();
        $i = 0;
        while ($i < count($my_courses)) {
            $my_courses[$i]->c_id = $my_courses[$i]->id;
            $my_courses[$i]->id = -$my_courses[$i]->id;
            $i++;
        }
        foreach ($my_courses as $course) {
            $result_tree = new stdClass();
            $result_tree->c_id = $course->c_id;
            $result_tree->id = $course->id;
            $result_tree->parent = 0;
            $result_tree->name = $course->course_name;
            $result_tree->children = 0;
            $result_tree->is_course = 1;
            $result_tree->certificate = $course->certificate;
            $result_tree->ordering = $course->ordering;
            $position = 0;
            $i = 0;
            $level = 0;
            foreach ($cats as $cat) {
                if ($course->cat_id == $cat->id && $cat->parent == 0) {
                    $position = $i;
                    $result_tree->parent = $cat->id;
                }
                //				if ($cat->parent && isset($tmp_courses_cats[$course->c_id]) && count($tmp_courses_cats[$course->c_id]) && in_array($cat->id, $tmp_courses_cats[$course->c_id])) {
                if ($cat->parent && isset($for_not_empty[$cat->id]) && count($for_not_empty[$cat->id]) && in_array($course->c_id, $for_not_empty[$cat->id])) {
                    $position = $i;
                    $result_tree->parent = $cat->id;
                }
                $i++;
            }
            if ($position) {
                $new_cats = array();
                foreach ($cats as $cat) {
                    $new_cats[] = $cat;
                    if (count($new_cats) == $position + 1) {
                        //+1
                        $new_cats[] = $result_tree;
                    }
                }
                $cats = $new_cats;
            } else {
                $cats[] = $result_tree;
            }
        }
        $i = 0;
        while ($i < count($cats)) {
            $j = $i + 1;
            if ($cats[$i]->is_course) {
                while ($j < count($cats)) {
                    if (!$cats[$j]->is_course && $cats[$i]->parent == $cats[$j]->parent) {
                        $temp = new stdClass();
                        $temp = $cats[$j];
                        $cats[$j] = $cats[$i];
                        $cats[$i] = $temp;
                        break;
                    }
                    $j++;
                }
            }
            $i++;
        }
        $i = 0;
        while ($i < count($cats)) {
            $j = $i + 1;
            if ($cats[$i]->is_course) {
                while ($j < count($cats)) {
                    if ($cats[$j]->is_course && $cats[$i]->parent == $cats[$j]->parent) {
                        if ($JLMS_CONFIG->get('lms_courses_sortby', 0)) {
                            if ($cats[$j]->ordering < $cats[$i]->ordering) {
                                $temp = new stdClass();
                                $temp = $cats[$j];
                                $cats[$j] = $cats[$i];
                                $cats[$i] = $temp;
                            }
                        } else {
                            if (strcasecmp($cats[$j]->name, $cats[$i]->name) < 0) {
                                $temp = new stdClass();
                                $temp = $cats[$j];
                                $cats[$j] = $cats[$i];
                                $cats[$i] = $temp;
                            }
                        }
                    }
                    $j++;
                }
            }
            $i++;
        }
        $children = array();
        foreach ($cats as $v) {
            $pt = $v->parent;
            /** Joomla 1.6 compability { */
            $v->parent_id = $v->parent;
            $v->title = $v->name;
            /** } Joomla 1.6 compability*/
            $list = @$children[$pt] ? $children[$pt] : array();
            array_push($list, $v);
            $children[$pt] = $list;
        }
        $cats = mosTreeRecurse(0, '', array(), $children, max(0, $levellimit - 1));
        $tmp_cats_tmp = array();
        $i = 0;
        foreach ($cats as $cat) {
            $tmp_cats_tmp[$i] = $cat;
            $i++;
        }
        $cats = $tmp_cats_tmp;
        foreach ($cats as $key => $data) {
            $cats[$key]->exist_courses = 0;
            if ($data->is_course) {
                $catid = $data->parent;
                $i = $key;
                while ($i >= 0) {
                    if ($cats[$i]->id == $catid) {
                        $cats[$i]->exist_courses = 1;
                        $catid = $cats[$i]->parent;
                    }
                    $i--;
                }
            }
        }
        $tmp_cats = array();
        $i = 0;
        $lists['keep_flesson'] = 0;
        $tmp_data = array();
        foreach ($cats as $key => $data) {
            $tmp_data[$key] = $data;
            unset($tmp_data[$key]->treename);
            $tmp_data[$key]->folder_flag = 0;
            if ($data->children) {
                $tmp_data[$key]->folder_flag = 1;
            }
            $tmp_data[$key]->parent_id = $data->parent;
            $tmp_data[$key]->doc_name = $data->name;
            $tmp_data[$key]->ordering = $i;
            foreach ($flms_course as $f_course) {
                if ($data->is_course && abs($data->id) == $f_course->course_id && $f_course->type_lesson == 2) {
                    if ($f_course->like_theory) {
                        $f_course->pf_time = 0;
                        $f_course->pm_time = $f_course->theory_duration_time;
                    }
                    $pf_time_h = str_pad(floor($f_course->pf_time / 60), 2, "0", STR_PAD_LEFT);
                    $pf_time_m = str_pad($f_course->pf_time - $pf_time_h * 60, 2, "0", STR_PAD_LEFT);
                    $pf_time = $pf_time_h . ':' . $pf_time_m;
                    $pm_time_h = str_pad(floor($f_course->pm_time / 60), 2, "0", STR_PAD_LEFT);
                    $pm_time_m = str_pad($f_course->pm_time - $pm_time_h * 60, 2, "0", STR_PAD_LEFT);
                    $pm_time = $pm_time_h . ':' . $pm_time_m;
                    $pre_total_time = $f_course->pf_time + $f_course->pm_time;
                    $total_time_h = str_pad(floor($pre_total_time / 60), 2, "0", STR_PAD_LEFT);
                    $total_time_m = str_pad($pre_total_time - $total_time_h * 60, 2, "0", STR_PAD_LEFT);
                    $total_time = $total_time_h . ':' . $total_time_m;
                    $tmp_data[$key]->lesson_type = $f_course->type_lesson;
                    $tmp_data[$key]->pf_time = $pf_time;
                    $tmp_data[$key]->pm_time = $pm_time;
                    $tmp_data[$key]->total_time = $total_time;
                    $lists['keep_flesson'] = 1;
                } else {
                    if ($data->is_course && abs($data->id) == $f_course->course_id) {
                        $tmp_data[$key]->lesson_type = $f_course->type_lesson;
                    }
                }
            }
            if ($JLMS_CONFIG->get('multicat_no_display_empty', 1)) {
                //				if($data->is_course == 0 && $data->children && isset($tmp_cats_courses[$data->id]) && count($tmp_cats_courses[$data->id]) ){
                //				if($data->is_course == 0 && $data->children && $data->exist_courses ){
                if ($data->is_course == 0 && $data->children && $data->exist_courses) {
                    $tmp_cats[$i] = $tmp_data[$key];
                    $i++;
                } else {
                    if ($data->is_course && $data->children == 0) {
                        $tmp_cats[$i] = $tmp_data[$key];
                        $i++;
                    }
                }
            } else {
                $tmp_cats[$i] = $tmp_data[$key];
                $i++;
            }
        }
        $cats = $tmp_cats;
        $cats = JLMS_GetTreeStructure($cats);
        $my_courses = $cats;
        $hp_items = $JLMS_CONFIG->get('homepage_items');
    }
    //notices teacher
    if ($JLMS_CONFIG->get('frontpage_notices_teacher')) {
        $lists['my_notices'] = array();
        $hp_items = $JLMS_CONFIG->get('homepage_items');
        $query = "SELECT * " . "\n FROM #__lms_page_notices" . "\n WHERE usr_id = '" . $my->id . "'" . "\n ORDER BY data DESC" . "\n LIMIT 0,{$hp_items}";
        $JLMS_DB->setQuery($query);
        $lists['my_notices'] = $JLMS_DB->loadObjectList();
    }
    //dropbox
    $my_dropbox = array();
    if ($JLMS_CONFIG->get('frontpage_dropbox')) {
        $my_dropbox = my_dropboxes($c_str, $hp_items, $my->id);
    }
    $lists['dropbox_total'] = my_dropboxes_total($c_str, $my->id);
    $lists['dropbox_total_new'] = my_dropboxes_total_new($c_str, $my->id);
    //homework
    $my_hw = array();
    if ($JLMS_CONFIG->get('frontpage_homework')) {
        $my_hw = my_homeworks($c_str, $hp_items, $my->id);
        //		$members = "'0'";
        //		$where = '';
        //		if($JLMS_ACL->_role_type == 2 || $JLMS_ACL->_role_type == 3 || $JLMS_ACL->_role_type == 4) {
        //			if($assigned_groups_only) {
        //				$groups_where_admin_manager = JLMS_ACL_HELPER::GetAssignedGroups($my->id);
        //				$groups_where_isset_user = JLMS_ACL_HELPER::GetUserGlobalGroup($my->id);
        //
        //				$groups_where_admin_manager = array_merge($groups_where_admin_manager,$groups_where_isset_user);
        //
        //				if (count($groups_where_admin_manager)) {
        //					$where .= "\n AND ( `groups` LIKE '%|$groups_where_admin_manager[0]|%'";
        //					for($i=1;$i<count($groups_where_admin_manager);$i++) {
        //						$where .= "\n OR `groups` like '%|$groups_where_admin_manager[$i]|%'";
        //					}
        //					$where .=  "\n )";
        //				}
        //			}
        //		}
        //		elseif($JLMS_ACL->_role_type < 2) {
        //				$query = "select a.group_id FROM #__lms_users_in_global_groups as a WHERE a.user_id = '".$my->id."' AND a.subgroup1_id = 0";
        //				$JLMS_DB->setQuery($query);
        //				$temp1 = $JLMS_DB->loadResultArray();
        //
        //				$query = "select subgroup1_id FROM #__lms_users_in_global_groups WHERE user_id = '".$my->id."'";
        //				$JLMS_DB->setQuery($query);
        //				$temp2 = $JLMS_DB->loadResultArray();
        //
        //				$group_where_isset_user = array_merge($temp1,$temp2);
        //
        //				if (count($group_where_isset_user)) {
        //					$where .= "\n AND (( `groups` <> '' AND `groups` IS NOT NULL AND (`groups` LIKE '%|$group_where_isset_user[0]|%'";
        //					for($i=1;$i<count($group_where_isset_user);$i++) {
        //						$where .= "\n OR `groups` like '%|$group_where_isset_user[$i]|%'";
        //					}
        //					$where .=  "\n )) OR (`groups` = '' OR `groups` IS NULL))";
        //				}
        //		}
        //
        //
        //		$query = "SELECT a.*, b.course_name, d.hw_status, c.user_id as stu_id, e.user_id as teach_id"
        //		. "\n FROM (#__lms_homework as a, #__lms_courses as b)"
        //		. "\n LEFT JOIN #__lms_users_in_groups as c ON c.user_id = '".$my->id."' AND c.course_id = b.id"
        //		. "\n LEFT JOIN #__lms_homework_results as d ON d.course_id = b.id AND d.user_id = c.user_id AND d.hw_id = a.id"
        //		. "\n LEFT JOIN #__lms_user_courses as e ON e.course_id = b.id AND e.user_id = '".$my->id."'"
        //		. "\n WHERE a.course_id IN ($c_str) AND a.course_id = b.id AND a.end_date >= '".date('Y-m-d',time())."'"
        //		.$where
        //		. "\n LIMIT 0, $hp_items"
        //		;
        //		$JLMS_DB->SetQuery( $query );
        //		$my_hw = $JLMS_DB->LoadObjectList();
    }
    //announcements
    $my_announcements = array();
    if ($JLMS_CONFIG->get('frontpage_announcements')) {
        $my_announcements = my_announcements($c_str, $hp_items, $my->id);
    }
    //mailbox
    $my_mailbox = array();
    if ($JLMS_CONFIG->get('frontpage_mailbox')) {
        $my_mailbox = my_mailbox($c_str, $hp_items, $my->id);
    }
    //certificates
    $my_certificates = array();
    if ($JLMS_CONFIG->get('frontpage_certificates')) {
        $my_certificates = my_certificates($c_str, $hp_items, $my->id);
    }
    //latest forum posts
    $latest_forum_posts = array();
    if ($JLMS_CONFIG->get('frontpage_latest_forum_posts')) {
        $latest_forum_posts = latest_forum_posts($c_str, $hp_items, $my->id);
    }
    $lists['homepage_text'] = $JLMS_CONFIG->get('frontpage_text');
    //end
    JLMS_ShowHeading($JLMS_CONFIG->get('jlms_heading'), false);
    joomla_lms_html::showMainPage_front($option, $lists, $my_courses, $my_dropbox, $my_hw, $my_announcements, $my_mailbox, $my_certificates, $latest_forum_posts);
}
Exemplo n.º 3
0
function JLMS_courseExport($option, $course_id, $type, $cid = array(1, 2, 3, 4, 5, 6, 7, 8), $selected_resources = null, $related_to_selected_resources = false)
{
    global $JLMS_DB, $JLMS_CONFIG;
    /*
    1 => 'Documents'
    2 => 'Learning Paths'
    3 => 'SCORMs'
    4 => 'Links'
    5 => 'Quizzes'
    6 => 'Announcements'
    7 => 'Homework'
    8 => 'Gradebook (settings only)'
    */
    if (count($cid) == 1) {
        if (in_array(2, $cid)) {
            if (is_null($selected_resources)) {
            } elseif (isset($selected_resources[2]) && is_array($selected_resources[2]) && count($selected_resources[2])) {
                $all_exp_lpath_ids = implode(',', $selected_resources[2]);
                $query = "SELECT distinct item_id FROM #__lms_learn_path_steps WHERE course_id = {$course_id} AND lpath_id IN ({$all_exp_lpath_ids}) AND step_type = 2";
                $JLMS_DB->SetQuery($query);
                $all_docs_in_lps = $JLMS_DB->LoadresultArray();
                if (count($all_docs_in_lps)) {
                    if (in_array(1, $cid)) {
                    } else {
                        $cid[] = 1;
                    }
                    if (isset($selected_resources[1])) {
                    } else {
                        $selected_resources[1] = array();
                    }
                    $selected_resources[1] = array_merge($selected_resources[1], $all_docs_in_lps);
                    $selected_resources[1] = array_unique($selected_resources[1]);
                }
                $query = "SELECT distinct item_id FROM #__lms_learn_path_steps WHERE course_id = {$course_id} AND lpath_id IN ({$all_exp_lpath_ids}) AND step_type = 3";
                $JLMS_DB->SetQuery($query);
                $all_links_in_lps = $JLMS_DB->LoadresultArray();
                if (count($all_links_in_lps)) {
                    if (in_array(4, $cid)) {
                    } else {
                        $cid[] = 4;
                    }
                    if (isset($selected_resources[4])) {
                    } else {
                        $selected_resources[4] = array();
                    }
                    $selected_resources[4] = array_merge($selected_resources[4], $all_links_in_lps);
                    $selected_resources[4] = array_unique($selected_resources[4]);
                }
                $query = "SELECT distinct item_id FROM #__lms_learn_path_steps WHERE course_id = {$course_id} AND lpath_id IN ({$all_exp_lpath_ids}) AND step_type = 5";
                $JLMS_DB->SetQuery($query);
                $all_qz_in_lps = $JLMS_DB->LoadresultArray();
                if (count($all_qz_in_lps)) {
                    if (in_array(5, $cid)) {
                    } else {
                        $cid[] = 5;
                    }
                    if (isset($selected_resources[5])) {
                    } else {
                        $selected_resources[5] = array();
                    }
                    $selected_resources[5] = array_merge($selected_resources[5], $all_qz_in_lps);
                    $selected_resources[5] = array_unique($selected_resources[5]);
                }
                /*$query = "SELECT distinct item_id FROM #__lms_learn_path_steps WHERE course_id = $course_id AND lpath_id IN ($all_exp_lpath_ids) AND step_type = 6";
                		$JLMS_DB->SetQuery($query);
                		$all_scorms_in_lps = $JLMS_DB->LoadresultArray();
                		if (count($all_scorms_in_lps)) {
                			if (in_array(3,$cid)) {
                			} else {
                				$cid[] = 3;
                			}
                			if (isset($selected_resources[3])) {
                			} else {
                				$selected_resources[3] = array();
                			}
                			$selected_resources[3] = array_merge($selected_resources[3],$all_scorms_in_lps);
                			$selected_resources[3] = array_unique($selected_resources[3]);
                		}*/
            }
        }
    }
    if (!empty($cid)) {
        require_once $JLMS_CONFIG->getCfg('absolute_path') . '/components/com_joomla_lms/joomla_lms.main.php';
        @set_time_limit('3000');
        // 50 minutes? ;)
        require_once _JOOMLMS_FRONT_HOME . "/includes/libraries/lms.lib.zip.php";
        $query = "SELECT a.*, b.lang_name, c.c_category, '' as course_question FROM `#__lms_courses` as a" . "\n LEFT JOIN `#__lms_languages` as b ON a.language = b.id" . "\n LEFT JOIN `#__lms_course_cats` as c ON a.cat_id = c.id" . "\n WHERE a.id = '{$course_id}'";
        $JLMS_DB->setQuery($query);
        $course = $JLMS_DB->loadObject();
        if (is_object($course) && isset($course->id)) {
            //ok
        } else {
            exit;
        }
        $course_questions = array();
        $query = "SELECT * FROM #__lms_spec_reg_questions WHERE course_id = {$course_id} AND role_id = 0";
        $JLMS_DB->setQuery($query);
        $course_questions = $JLMS_DB->loadObjectList();
        $documents1 = array();
        $docs_collapsed = array();
        if (in_array(1, $cid)) {
            if (is_null($selected_resources)) {
                $query = "SELECT a.* FROM `#__lms_documents` as a WHERE a.course_id = {$course_id} AND a.folder_flag IN (0,1,2)";
                $JLMS_DB->setQuery($query);
                $documents1 = $JLMS_DB->loadObjectList();
                $documents1 = JLMS_GetTreeStructure($documents1);
            } else {
                if (isset($selected_resources[1]) && is_array($selected_resources[1]) && count($selected_resources[1])) {
                    $p_str_docs = implode(',', $selected_resources[1]);
                } else {
                    $p_str_docs = '0';
                }
                $query = "SELECT a.* FROM `#__lms_documents` as a WHERE a.id IN ({$p_str_docs}) AND a.course_id = {$course_id} AND a.folder_flag IN (0,1,2)";
                $JLMS_DB->setQuery($query);
                $new_documents_pre1 = $JLMS_DB->loadObjectList();
                $counter_to_avoid_loop = 0;
                $documents1 = array();
                while (count($new_documents_pre1) && $counter_to_avoid_loop < 10) {
                    // 10 - hope, nobody will not create more than 10 sub-levels of directories
                    $parents_docspre = array();
                    foreach ($new_documents_pre1 as $document_pre1) {
                        if ($document_pre1->parent_id) {
                            $parents_docspre[] = $document_pre1->parent_id;
                            $documents1[] = $document_pre1;
                        } else {
                            $documents1[] = $document_pre1;
                        }
                    }
                    if (count($parents_docspre)) {
                        $parents_docspre_str = implode(',', $parents_docspre);
                        $query = "SELECT a.* FROM `#__lms_documents` as a WHERE a.id IN ({$parents_docspre_str}) AND a.course_id = {$course_id} AND a.folder_flag IN (0,1,2)";
                        $JLMS_DB->setQuery($query);
                        $new_documents_pre1 = $JLMS_DB->loadObjectList();
                    } else {
                        $new_documents_pre1 = array();
                    }
                    $counter_to_avoid_loop++;
                }
                $documents1 = JLMS_GetTreeStructure($documents1);
            }
            // 27.0.3.2008 (DEN) - " AND a.folder_flag IN (0,1,2)" - Documents from Library are not exported !
            $zip_docs_ids = array();
            $folder_ids = array();
            foreach ($documents1 as $doc1) {
                if ($doc1->folder_flag == 2) {
                    $zip_docs_ids[] = $doc1->file_id;
                } elseif ($doc1->folder_flag == 1 && $doc1->file_id == 0) {
                    $folder_ids[] = $doc1->id;
                }
            }
            if (!empty($folder_ids)) {
                $fids = implode(',', $folder_ids);
                $query = "SELECT doc_id FROM #__lms_documents_view WHERE course_id = {$course_id} AND doc_id IN ({$fids})";
                $JLMS_DB->SetQuery($query);
                $docs_collapsed = $JLMS_DB->LoadResultArray();
            }
            $zipped_docs = array();
            if (count($zip_docs_ids)) {
                $zdis = implode(',', $zip_docs_ids);
                $query = "SELECT * FROM `#__lms_documents_zip` WHERE id IN ({$zdis}) AND course_id = {$course_id}";
                $JLMS_DB->setQuery($query);
                $zipped_docs = $JLMS_DB->loadObjectList();
            }
        }
        $links = array();
        if (in_array(4, $cid)) {
            if (is_null($selected_resources)) {
                $query = "SELECT * FROM `#__lms_links` WHERE course_id = {$course_id}";
                $JLMS_DB->setQuery($query);
                $links = $JLMS_DB->loadObjectList();
            } else {
                if (isset($selected_resources[4]) && is_array($selected_resources[4]) && count($selected_resources[4])) {
                    $p_str_links = implode(',', $selected_resources[4]);
                } else {
                    $p_str_links = '0';
                }
                $query = "SELECT * FROM `#__lms_links` WHERE id IN ({$p_str_links}) AND course_id = {$course_id}";
                $JLMS_DB->setQuery($query);
                $links = $JLMS_DB->loadObjectList();
            }
        }
        // 27.03.2008 (DEN) - Course topics processing
        $processed_docs = array();
        $processed_links = array();
        $processed_lpaths = array();
        $processed_quizzes = array();
        if (is_null($selected_resources)) {
            $query = "SELECT * FROM `#__lms_topics` WHERE course_id = {$course_id}";
            $JLMS_DB->setQuery($query);
            $topics = $JLMS_DB->loadObjectList();
            $query = "SELECT * FROM `#__lms_topic_items` WHERE course_id = {$course_id} AND item_type IN (2,3,5,7)";
            $JLMS_DB->setQuery($query);
            $topic_items = $JLMS_DB->loadObjectList();
        } else {
            //only selcted resources - e.g. export of specific lpath, we don't need topics here
            $topics = array();
            $topic_items = array();
        }
        $homeworks = array();
        if (in_array(7, $cid)) {
            $query = "SELECT * FROM `#__lms_homework` WHERE course_id = {$course_id}";
            $JLMS_DB->setQuery($query);
            $homeworks = $JLMS_DB->loadObjectList();
        }
        $announcements = array();
        if (in_array(6, $cid)) {
            $query = "SELECT * FROM `#__lms_agenda` WHERE course_id = {$course_id}";
            $JLMS_DB->setQuery($query);
            $announcements = $JLMS_DB->loadObjectList();
        }
        if (is_null($selected_resources)) {
            $query = "SELECT * FROM `#__lms_local_menu` WHERE course_id = {$course_id}";
            $JLMS_DB->setQuery($query);
            $hidden_menus = $JLMS_DB->loadObjectList();
        } else {
            $hidden_menus = array();
        }
        // TIP (28 April 2007) We've export only SCORM package.
        // Instance in table 'lms_n_scorm' will be added automatically on first activation of SCORM.
        if (in_array(3, $cid)) {
            $query = "SELECT * FROM `#__lms_scorm_packages` WHERE course_id = {$course_id}";
            $JLMS_DB->setQuery($query);
            $scorms = $JLMS_DB->loadObjectList();
        }
        $lpaths = array();
        if (in_array(2, $cid) || in_array(3, $cid)) {
            if (in_array(2, $cid)) {
                if (is_null($selected_resources)) {
                    $query = "SELECT * FROM `#__lms_learn_paths` WHERE course_id = {$course_id}" . (in_array(3, $cid) ? '' : " AND item_id = 0");
                } else {
                    if (is_array($selected_resources[2]) && count($selected_resources[2])) {
                        $p_str_lpaths = implode(',', $selected_resources[2]);
                    } else {
                        $p_str_lpaths = '0';
                    }
                    $query = "SELECT * FROM `#__lms_learn_paths` WHERE id IN ({$p_str_lpaths}) AND course_id = {$course_id}" . (in_array(3, $cid) ? '' : " AND item_id = 0");
                }
            } else {
                $query = "SELECT * FROM `#__lms_learn_paths` WHERE course_id = {$course_id} AND item_id <> 0";
            }
            $JLMS_DB->setQuery($query);
            $lpaths = $JLMS_DB->loadObjectList();
        }
        if (in_array(8, $cid)) {
            $query = "SELECT a.*, b.gb_category FROM #__lms_gradebook_items as a LEFT JOIN #__lms_gradebook_cats as b ON a.gbc_id = b.id WHERE a.course_id = {$course_id}";
            $JLMS_DB->setQuery($query);
            $gb_items = $JLMS_DB->loadObjectList();
            $query = "SELECT * FROM #__lms_gradebook_scale WHERE course_id = {$course_id}";
            $JLMS_DB->setQuery($query);
            $gb_scale = $JLMS_DB->loadObjectList();
            // 27.03.2008 (DEN) List of Lpaths for automated course completion
            $query = "SELECT * FROM #__lms_gradebook_lpaths WHERE course_id = {$course_id}";
            $JLMS_DB->setQuery($query);
            $gb_lpaths = $JLMS_DB->loadObjectList();
        }
        $lpath_all_contents = array();
        $lpath_all_conds = array();
        $lpath_all_prerequisites = array();
        $lp_ids = array();
        if (in_array(2, $cid)) {
            foreach ($lpaths as $lp) {
                $lp_ids[] = $lp->id;
            }
            if (count($lp_ids)) {
                $lpi_str = implode(',', $lp_ids);
                $query = "SELECT *, step_name as doc_name FROM `#__lms_learn_path_steps` " . "\n  WHERE lpath_id IN ({$lpi_str}) AND course_id = '" . $course_id . "'" . "\n ORDER BY lpath_id, parent_id, ordering";
                $JLMS_DB->SetQuery($query);
                $lpath_all_contents = $JLMS_DB->LoadObjectList();
                $query = "SELECT * FROM `#__lms_learn_path_conds` " . "\n  WHERE lpath_id IN ({$lpi_str}) AND course_id = '" . $course_id . "' ORDER BY lpath_id";
                $JLMS_DB->setQuery($query);
                $lpath_all_conds = $JLMS_DB->loadObjectList();
                $query = "SELECT * FROM `#__lms_learn_path_prerequisites` " . "\n  WHERE lpath_id IN ({$lpi_str}) AND req_id IN ({$lpi_str}) ORDER BY lpath_id";
                $JLMS_DB->setQuery($query);
                $lpath_all_prerequisites = $JLMS_DB->loadObjectList();
            }
        }
        if (in_array(5, $cid)) {
            if (is_null($selected_resources)) {
                $query = "SELECT * FROM `#__lms_certificates` WHERE course_id = '{$course_id}' AND crtf_type IN ('1','2','-2')";
                $JLMS_DB->setQuery($query);
                $certs = $JLMS_DB->loadObjectList();
            } else {
                $certs = array();
                if (isset($selected_resources[5]) && is_array($selected_resources[5]) && count($selected_resources[5])) {
                    $p_str_qzs = implode(',', $selected_resources[5]);
                    $query = "SELECT distinct c_certificate FROM #__lms_quiz_t_quiz WHERE c_id IN ({$p_str_qzs}) AND course_id = {$course_id}";
                    $JLMS_DB->setQuery($query);
                    $cert_ids = $JLMS_DB->LoadResultArray();
                    if (count($cert_ids)) {
                        $cert_ids_str = implode(',', $cert_ids);
                        $query = "SELECT * FROM `#__lms_certificates` WHERE course_id = '{$course_id}' AND crtf_type IN ('1','2','-2') AND id IN ({$cert_ids_str})";
                        $JLMS_DB->setQuery($query);
                        $certs = $JLMS_DB->loadObjectList();
                    }
                }
            }
        } else {
            if (is_null($selected_resources)) {
                $query = "SELECT * FROM `#__lms_certificates` WHERE course_id = '{$course_id}' AND crtf_type IN ('1','-2')";
                $JLMS_DB->setQuery($query);
                $certs = $JLMS_DB->loadObjectList();
            } else {
                //we don't need certificates if we export specific lpath withotu quizzes
                $certs = array();
            }
        }
        // 26.03.2008 - DEN - export of files for quiz images
        $quiz_images_files = array();
        if (in_array(5, $cid)) {
            $query = "SELECT c_id, imgs_id FROM `#__lms_quiz_images` WHERE course_id = '{$course_id}'";
            $JLMS_DB->setQuery($query);
            $quiz_images_files = $JLMS_DB->loadObjectList();
        }
        $file_ids = array();
        foreach ($certs as $cert) {
            if ($cert->file_id) {
                $file_ids[] = $cert->file_id;
            }
        }
        foreach ($quiz_images_files as $qif) {
            if ($qif->imgs_id) {
                $file_ids[] = $qif->imgs_id;
            }
        }
        if (in_array(1, $cid)) {
            foreach ($documents1 as $doc1) {
                if ($doc1->file_id) {
                    $file_ids[] = $doc1->file_id;
                }
            }
        }
        $files = array();
        if (!empty($file_ids)) {
            $file_ids = array_unique($file_ids);
            $f_str = implode(',', $file_ids);
            $query = "SELECT * FROM `#__lms_files` WHERE id IN ({$f_str})";
            $JLMS_DB->setQuery($query);
            $files = $JLMS_DB->loadObjectList();
        }
        //get config values
        $query = "SELECT * FROM `#__lms_config`";
        $JLMS_DB->SetQuery($query);
        $lms_cfg = $JLMS_DB->LoadObjectList();
        $lms_cfg_doc_folder = '';
        $lms_cfg_scorm = '';
        $lms_cfg_backup_folder = '';
        $lms_cfg_quiz_enabled = 0;
        foreach ($lms_cfg as $lcf) {
            if ($lcf->lms_config_var == 'plugin_quiz') {
                $lms_cfg_quiz_enabled = $lcf->lms_config_value;
            } elseif ($lcf->lms_config_var == 'jlms_doc_folder') {
                $lms_cfg_doc_folder = $lcf->lms_config_value;
            } elseif ($lcf->lms_config_var == 'scorm_folder') {
                $lms_cfg_scorm = $lcf->lms_config_value;
            } elseif ($lcf->lms_config_var == 'jlms_backup_folder') {
                $lms_cfg_backup_folder = $lcf->lms_config_value;
            }
        }
        $lms_cfg_doc_folder = str_replace("\\", "/", $lms_cfg_doc_folder);
        $lms_cfg_backup_folder = str_replace("\\", "/", $lms_cfg_backup_folder);
        //end of config
        ////////////////////////////////////////////////////////////////////////////////
        //get quizzes data
        $quizzes_data = array();
        $quest_cats_data = array();
        $quiz_quest_data = array();
        $quiz_blank_data = array();
        $quiz_choice_data = array();
        $quiz_hotspot_data = array();
        $quiz_match_data = array();
        $quiz_scale_data = array();
        $quiz_fb_data = array();
        $quizzes_files = array();
        if ($lms_cfg_quiz_enabled && in_array(5, $cid)) {
            if (is_null($selected_resources)) {
                $query = "SELECT a.*, b.c_category as category_name FROM #__lms_quiz_t_quiz as a LEFT JOIN #__lms_quiz_t_category as b ON a.c_category_id = b.c_id WHERE a.course_id = '" . $course_id . "'";
                $JLMS_DB->SetQuery($query);
                $quizzes_data = $JLMS_DB->LoadObjectList();
                $query = "SELECT * FROM #__lms_quiz_t_category WHERE course_id = {$course_id} AND is_quiz_cat = 0";
                $JLMS_DB->SetQuery($query);
                $quest_cats_data = $JLMS_DB->LoadObjectList();
                $quizzes_ids = array();
                $quizzes_ids[] = 0;
                foreach ($quizzes_data as $qd) {
                    $quizzes_ids[] = $qd->c_id;
                }
            } else {
                //export specific resources only
                if (isset($selected_resources[5]) && is_array($selected_resources[5]) && count($selected_resources[5])) {
                    $p_str_qzs = implode(',', $selected_resources[5]);
                } else {
                    $p_str_qzs = '0';
                }
                $query = "SELECT a.*, b.c_category as category_name FROM #__lms_quiz_t_quiz as a LEFT JOIN #__lms_quiz_t_category as b ON a.c_category_id = b.c_id WHERE a.course_id = '" . $course_id . "' AND a.c_id IN ({$p_str_qzs})";
                $JLMS_DB->SetQuery($query);
                $quizzes_data = $JLMS_DB->LoadObjectList();
                $quizzes_ids = array();
                //$quizzes_ids[] = 0;//no pool compatibility
                foreach ($quizzes_data as $qd) {
                    $quizzes_ids[] = $qd->c_id;
                }
            }
            if (count($quizzes_ids)) {
                $q_str = implode(',', $quizzes_ids);
                $query = "SELECT * FROM #__lms_quiz_t_question WHERE course_id = '" . $course_id . "' AND c_quiz_id IN ({$q_str}) ORDER BY ordering, c_id";
                $JLMS_DB->SetQuery($query);
                $quiz_quest_data = $JLMS_DB->LoadObjectList();
                $quests_ids = array();
                foreach ($quiz_quest_data as $qqd) {
                    $quests_ids[] = $qqd->c_id;
                    if ($qqd->c_image && !in_array($qqd->c_image, $quizzes_files)) {
                        // Changed 20.08.2007 by DEN - from:
                        //if ($qqd->c_image) {
                        $quizzes_files[] = $qqd->c_image;
                    }
                }
                if (count($quests_ids)) {
                    $qq_str = implode(',', $quests_ids);
                    // 18 June 2007 (Questions Feedbacks export)
                    $query = "SELECT * FROM #__lms_quiz_t_question_fb WHERE quest_id IN ({$qq_str})";
                    $JLMS_DB->SetQuery($query);
                    $quiz_fb_data = $JLMS_DB->LoadObjectList();
                    $query = "SELECT a.*, b.c_text, b.ordering FROM #__lms_quiz_t_blank as a, #__lms_quiz_t_text as b WHERE a.c_question_id IN ({$qq_str}) AND a.c_id = b.c_blank_id ORDER BY b.c_blank_id, b.ordering";
                    $JLMS_DB->SetQuery($query);
                    $quiz_blank_data = $JLMS_DB->LoadObjectList();
                    $query = "SELECT * FROM #__lms_quiz_t_choice WHERE c_question_id IN ({$qq_str}) ORDER BY c_question_id, ordering";
                    $JLMS_DB->SetQuery($query);
                    $quiz_choice_data = $JLMS_DB->LoadObjectList();
                    $query = "SELECT * FROM #__lms_quiz_t_hotspot WHERE c_question_id IN ({$qq_str})";
                    $JLMS_DB->SetQuery($query);
                    $quiz_hotspot_data = $JLMS_DB->LoadObjectList();
                    $query = "SELECT * FROM #__lms_quiz_t_matching WHERE c_question_id IN ({$qq_str}) ORDER BY c_question_id, ordering";
                    $JLMS_DB->SetQuery($query);
                    $quiz_match_data = $JLMS_DB->LoadObjectList();
                    // Likert scale - aded 27.0.3.2008 (DEN)
                    $query = "SELECT * FROM #__lms_quiz_t_scale WHERE c_question_id IN ({$qq_str}) ORDER BY c_question_id, ordering";
                    $JLMS_DB->SetQuery($query);
                    $quiz_scale_data = $JLMS_DB->LoadObjectList();
                }
            }
            // 26.03.2008 - DEN - quiz images export
            $query = "SELECT * FROM #__lms_quiz_images WHERE course_id = '" . $course_id . "'";
            $JLMS_DB->SetQuery($query);
            $quizzes_images_data = $JLMS_DB->LoadObjectList();
        }
        //end of quizzes
        ////////////////////////////////////////////////////////////////////////////////
        //create XML file
        $xml_encoding = 'iso-8859-1';
        if (defined('_ISO')) {
            $iso = explode('=', _ISO);
            if (isset($iso[1]) && $iso[1]) {
                $xml_encoding = $iso[1];
            }
        }
        $export_xml = "";
        $export_xml .= "<?xml version=\"1.0\" encoding=\"" . $xml_encoding . "\" ?>\r\n";
        $export_xml .= "\t<course_backup lms_version=\"1.0.0\">\r\n";
        $export_xml .= "\t\t<name><![CDATA[" . $course->course_name . "]]></name>\r\n";
        $export_xml .= "\t\t<description><![CDATA[" . $course->course_description . "]]></description>\r\n";
        $export_xml .= "\t\t<course_category><![CDATA[" . $course->c_category . "]]></course_category>\r\n";
        $export_xml .= "\t\t<metadesc><![CDATA[" . $course->metadesc . "]]></metadesc>\r\n";
        $export_xml .= "\t\t<metakeys><![CDATA[" . $course->metakeys . "]]></metakeys>\r\n";
        $export_xml .= "\t\t<language_name><![CDATA[" . $course->lang_name . "]]></language_name>\r\n";
        $export_xml .= "\t\t<course_paid><![CDATA[" . $course->paid . "]]></course_paid>\r\n";
        $export_xml .= "\t\t<self_registration>" . $course->self_reg . "</self_registration>\r\n";
        $export_xml .= "\t\t<forum_enabled>" . $course->add_forum . "</forum_enabled>\r\n";
        $export_xml .= "\t\t<chat_enabled>" . $course->add_chat . "</chat_enabled>\r\n";
        $export_xml .= "\t\t<publish_start>" . $course->publish_start . "</publish_start>\r\n";
        $export_xml .= "\t\t<publish_start_date><![CDATA[" . $course->start_date . "]]></publish_start_date>\r\n";
        $export_xml .= "\t\t<publish_end>" . $course->publish_end . "</publish_end>\r\n";
        $export_xml .= "\t\t<publish_end_date><![CDATA[" . $course->end_date . "]]></publish_end_date>\r\n";
        $export_xml .= "\t\t<spec_reg>" . $course->spec_reg . "</spec_reg>\r\n";
        $export_xml .= "\t\t<course_question><![CDATA[]]></course_question>\r\n";
        // 27.03.2008 (DEN) enrollment qeustions are moved into another section - tag is left here for compatibility only
        $export_xml .= "\t\t<course_params><![CDATA[" . $course->params . "]]></course_params>\r\n";
        // 27.03.2008 (DEN) Enrollment questions export
        $export_xml .= "\t\t<course_questions>\n";
        foreach ($course_questions as $course_quest) {
            $export_xml .= "\t\t\t<course_quest is_optional=\"" . $course_quest->is_optional . "\" ordering=\"" . $course_quest->ordering . "\" >\r\n";
            $export_xml .= "\t\t\t\t<question_text><![CDATA[" . $course_quest->course_question . "]]></question_text>\n";
            $export_xml .= "\t\t\t\t<default_answer><![CDATA[" . $course_quest->default_answer . "]]></default_answer>\n";
            $export_xml .= "\t\t\t</course_quest>\n";
        }
        $export_xml .= "\t\t</course_questions>\n";
        //hidden menus
        $export_xml .= "\t\t<hidden_menu_items>\n";
        foreach ($hidden_menus as $hdmn) {
            $export_xml .= "\t\t\t<menu_item menu_id=\"" . $hdmn->menu_id . "\" user_access=\"" . $hdmn->user_access . "\" >\r\n";
            $export_xml .= "\t\t\t</menu_item>\n";
        }
        $export_xml .= "\t\t</hidden_menu_items>\n";
        //documents section
        if (in_array(1, $cid)) {
            $export_xml .= "\t\t<documents>\n";
            foreach ($documents1 as $document) {
                $export_xml .= "\t\t\t<document id=\"" . $document->id . "\" file_id=\"" . $document->file_id . "\" folder_flag=\"" . $document->folder_flag . "\" collapsed_folder=\"" . ($document->folder_flag == 1 && !$document->file_id && !empty($docs_collapsed) && in_array($document->id, $docs_collapsed) ? 1 : 0) . "\" parent_id=\"" . $document->parent_id . "\" ordering=\"" . $document->ordering . "\" published=\"" . $document->published . "\" publish_start=\"" . $document->publish_start . "\" start_date=\"" . $document->start_date . "\" publish_end=\"" . $document->publish_end . "\" end_date=\"" . $document->end_date . "\" is_time_related=\"" . $document->is_time_related . "\" show_period=\"" . $document->show_period . "\" >\r\n";
                $export_xml .= "\t\t\t\t<doc_name><![CDATA[" . $document->doc_name . "]]></doc_name>\n";
                $export_xml .= "\t\t\t\t<doc_description><![CDATA[" . $document->doc_description . "]]></doc_description>\n";
                $export_xml .= "\t\t\t</document>\n";
                $processed_docs[] = $document->id;
            }
            $export_xml .= "\t\t</documents>\n";
        }
        //links section
        if (in_array(4, $cid)) {
            $export_xml .= "\t\t<links>\n";
            foreach ($links as $link) {
                $export_xml .= "\t\t\t<link id=\"" . $link->id . "\" link_type=\"" . $link->link_type . "\" ordering=\"" . $link->ordering . "\" published=\"" . $link->published . "\" is_time_related=\"" . $link->is_time_related . "\" show_period=\"" . $link->show_period . "\">\n";
                $export_xml .= "\t\t\t\t<linkname><![CDATA[" . $link->link_name . "]]></linkname>\r\n";
                $export_xml .= "\t\t\t\t<linkhref><![CDATA[" . $link->link_href . "]]></linkhref>\r\n";
                $export_xml .= "\t\t\t\t<description><![CDATA[" . $link->link_description . "]]></description>\r\n";
                $export_xml .= "\t\t\t\t<link_params><![CDATA[" . $link->params . "]]></link_params>\n";
                $export_xml .= "\t\t\t</link>\n";
                $processed_links[] = $link->id;
            }
            $export_xml .= "\t\t</links>\n";
        }
        //homework section
        if (in_array(7, $cid)) {
            $export_xml .= "\t\t<homework_tool>\n";
            foreach ($homeworks as $homework) {
                $export_xml .= "\t\t\t<homework id=\"" . $homework->id . "\" post_date=\"" . $homework->post_date . "\" end_date=\"" . $homework->end_date . "\" is_time_related=\"" . $homework->is_time_related . "\" show_period=\"" . $homework->show_period . "\">\n ";
                $export_xml .= "\t\t\t\t<hw_name><![CDATA[" . $homework->hw_name . "]]></hw_name>\r\n";
                $export_xml .= "\t\t\t\t<description><![CDATA[" . $homework->hw_description . "]]></description>\r\n";
                $export_xml .= "\t\t\t\t<short_description><![CDATA[" . $homework->hw_shortdescription . "]]></short_description>\r\n";
                $export_xml .= "\t\t\t</homework>\n";
            }
            $export_xml .= "\t\t</homework_tool>\n";
        }
        //announcement section
        if (in_array(6, $cid)) {
            $export_xml .= "\t\t<announcement_tool>\n";
            foreach ($announcements as $announc) {
                $export_xml .= "\t\t\t<announcement id=\"" . $announc->agenda_id . "\" start_date=\"" . $announc->start_date . "\" end_date=\"" . $announc->end_date . "\" is_time_related=\"" . $announc->is_time_related . "\" show_period=\"" . $announc->show_period . "\">\n";
                $export_xml .= "\t\t\t\t<announcement_title><![CDATA[" . $announc->title . "]]></announcement_title>\r\n";
                $export_xml .= "\t\t\t\t<announcement_content><![CDATA[" . $announc->content . "]]></announcement_content>\r\n";
                $export_xml .= "\t\t\t</announcement>\n";
            }
            $export_xml .= "\t\t</announcement_tool>\n";
        }
        //quizzes section
        if (in_array(5, $cid)) {
            $export_xml .= "\t\t<quizzes_quest_categories>\n";
            if ($lms_cfg_quiz_enabled) {
                foreach ($quest_cats_data as $qcat) {
                    $export_xml .= "\t\t\t<quest_category c_id=\"" . $qcat->c_id . "\">\r\n";
                    $export_xml .= "\t\t\t\t<quest_category_name><![CDATA[" . $qcat->c_category . "]]></quest_category_name>\r\n";
                    $export_xml .= "\t\t\t\t<quest_category_instr><![CDATA[" . $qcat->c_instruction . "]]></quest_category_instr>\r\n";
                    $export_xml .= "\t\t\t</quest_category>\r\n";
                }
            }
            $export_xml .= "\t\t</quizzes_quest_categories>\n";
            // 26.03.2008 - DEN - quiz images export
            $export_xml .= "\t\t<quizzes_images>\n";
            if ($lms_cfg_quiz_enabled) {
                foreach ($quizzes_images_data as $qimage) {
                    $export_xml .= "\t\t\t<quiz_image c_id=\"" . $qimage->c_id . "\" file_id=\"" . $qimage->imgs_id . "\">\r\n";
                    $export_xml .= "\t\t\t\t<quiz_image_name><![CDATA[" . $qimage->imgs_name . "]]></quiz_image_name>\r\n";
                    $export_xml .= "\t\t\t</quiz_image>\r\n";
                }
            }
            $export_xml .= "\t\t</quizzes_images>\n";
            /* (28 April 2007) Questions Pool export
             *
             */
            $q_quests = array();
            $qq_ids = array();
            foreach ($quiz_quest_data as $qqdo) {
                if ($qqdo->c_quiz_id == 0) {
                    $q_quests[] = $qqdo;
                    $qq_ids[] = $qqdo->c_id;
                }
            }
            $export_xml .= "\t\t<quizzes_question_pool>\n";
            if ($lms_cfg_quiz_enabled) {
                $export_xml .= "\t\t<question_pool_data>\n";
                $export_xml .= "\t\t\t<pool_questions>\n";
                if (count($q_quests)) {
                    foreach ($q_quests as $quest) {
                        $export_xml .= "\t\t\t<quiz_question c_id=\"" . $quest->c_id . "\" c_point=\"" . $quest->c_point . "\" c_attempts=\"" . $quest->c_attempts . "\" c_type=\"" . $quest->c_type . "\" c_pool=\"" . $quest->c_pool . "\" c_qcat=\"" . $quest->c_qcat . "\" ordering=\"" . $quest->ordering . "\">\n";
                        $export_xml .= "\t\t\t\t<question_text><![CDATA[" . $quest->c_question . "]]></question_text>\r\n";
                        $export_xml .= "\t\t\t\t<question_image><![CDATA[" . $quest->c_image . "]]></question_image>\r\n";
                        $export_xml .= "\t\t\t\t<question_params><![CDATA[" . $quest->params . "]]></question_params>\r\n";
                        $export_xml .= "\t\t\t\t<question_explanation><![CDATA[" . $quest->c_explanation . "]]></question_explanation>\r\n";
                        // added 27.03.2008 (DEN)
                        $export_xml .= "\t\t\t</quiz_question>\n";
                    }
                }
                $export_xml .= "\t\t\t</pool_questions>\n";
                // 18 June 2007 - questions feedbacks
                $q_fback = array();
                foreach ($quiz_fb_data as $qfb) {
                    if (in_array($qfb->quest_id, $qq_ids)) {
                        $q_fback[] = $qfb;
                    }
                }
                $export_xml .= "\t\t\t<question_feedbacks>\n";
                if (count($q_fback)) {
                    foreach ($q_fback as $qfb) {
                        if ($qfb->fb_text) {
                            $export_xml .= "\t\t\t<question_fb quest_id=\"" . $qfb->quest_id . "\" choice_id=\"" . $qfb->choice_id . "\">\n";
                            $export_xml .= "\t\t\t\t<fb_text><![CDATA[" . $qfb->fb_text . "]]></fb_text>\r\n";
                            $export_xml .= "\t\t\t</question_fb>\n";
                        }
                    }
                }
                $export_xml .= "\t\t\t</question_feedbacks>\n";
                $export_xml .= "\t\t\t<choice_data>\n";
                $q_choice = array();
                foreach ($quiz_choice_data as $qcd) {
                    if (in_array($qcd->c_question_id, $qq_ids)) {
                        $q_choice[] = $qcd;
                    }
                }
                if (count($q_choice)) {
                    foreach ($q_choice as $qc_one) {
                        $export_xml .= "\t\t\t\t<quest_choice c_question_id=\"" . $qc_one->c_question_id . "\" c_right=\"" . $qc_one->c_right . "\" ordering=\"" . $qc_one->ordering . "\">\r\n";
                        $export_xml .= "\t\t\t\t\t<choice_text><![CDATA[" . $qc_one->c_choice . "]]></choice_text>\r\n";
                        $export_xml .= "\t\t\t\t</quest_choice>\n";
                    }
                }
                $export_xml .= "\t\t\t</choice_data>\n";
                $export_xml .= "\t\t\t<match_data>\n";
                $q_match = array();
                foreach ($quiz_match_data as $qmd) {
                    if (in_array($qmd->c_question_id, $qq_ids)) {
                        $q_match[] = $qmd;
                    }
                }
                if (count($q_match)) {
                    foreach ($q_match as $qm_one) {
                        $export_xml .= "\t\t\t\t<quest_match c_question_id=\"" . $qm_one->c_question_id . "\" ordering=\"" . $qm_one->ordering . "\">\r\n";
                        $export_xml .= "\t\t\t\t\t<match_text_left><![CDATA[" . $qm_one->c_left_text . "]]></match_text_left>\r\n";
                        $export_xml .= "\t\t\t\t\t<match_text_right><![CDATA[" . $qm_one->c_right_text . "]]></match_text_right>\r\n";
                        $export_xml .= "\t\t\t\t</quest_match>\n";
                    }
                }
                $export_xml .= "\t\t\t</match_data>\n";
                // Likert scale - 27.03.2008 (DEN)
                $export_xml .= "\t\t\t<scale_data>\n";
                $q_scale = array();
                foreach ($quiz_scale_data as $qsd) {
                    if (in_array($qsd->c_question_id, $qq_ids)) {
                        $q_scale[] = $qsd;
                    }
                }
                if (count($q_scale)) {
                    foreach ($q_scale as $qs_one) {
                        $export_xml .= "\t\t\t\t<quest_scale c_question_id=\"" . $qs_one->c_question_id . "\" c_type=\"" . $qs_one->c_type . "\" ordering=\"" . $qs_one->ordering . "\">\r\n";
                        $export_xml .= "\t\t\t\t\t<scale_field><![CDATA[" . $qs_one->c_field . "]]></scale_field>\r\n";
                        $export_xml .= "\t\t\t\t</quest_scale>\n";
                    }
                }
                $export_xml .= "\t\t\t</scale_data>\n";
                $export_xml .= "\t\t\t<blank_data>\n";
                $q_blank = array();
                foreach ($quiz_blank_data as $qbd) {
                    if (in_array($qbd->c_question_id, $qq_ids)) {
                        $q_blank[] = $qbd;
                    }
                }
                if (count($q_blank)) {
                    foreach ($q_blank as $qb_one) {
                        $export_xml .= "\t\t\t\t<quest_blank c_question_id=\"" . $qb_one->c_question_id . "\" ordering=\"" . $qb_one->ordering . "\">\r\n";
                        $export_xml .= "\t\t\t\t\t<blank_text><![CDATA[" . $qb_one->c_text . "]]></blank_text>\r\n";
                        $export_xml .= "\t\t\t\t\t<default_answer><![CDATA[" . $qb_one->c_default . "]]></default_answer>\r\n";
                        $export_xml .= "\t\t\t\t</quest_blank>\n";
                    }
                }
                $export_xml .= "\t\t\t</blank_data>\n";
                $export_xml .= "\t\t\t<hotspot_data>\n";
                $q_hotspot = array();
                foreach ($quiz_hotspot_data as $qhd) {
                    if (in_array($qhd->c_question_id, $qq_ids)) {
                        $q_hotspot[] = $qhd;
                    }
                }
                if (count($q_hotspot)) {
                    foreach ($q_hotspot as $qh_one) {
                        $export_xml .= "\t\t\t\t<quest_hotspot c_question_id=\"" . $qh_one->c_question_id . "\">\r\n";
                        $export_xml .= "\t\t\t\t\t<hs_start_x><![CDATA[" . $qh_one->c_start_x . "]]></hs_start_x>\r\n";
                        $export_xml .= "\t\t\t\t\t\t<hs_start_y><![CDATA[" . $qh_one->c_start_y . "]]></hs_start_y>\r\n";
                        $export_xml .= "\t\t\t\t\t<hs_width><![CDATA[" . $qh_one->c_width . "]]></hs_width>\r\n";
                        $export_xml .= "\t\t\t\t\t<hs_height><![CDATA[" . $qh_one->c_height . "]]></hs_height>\r\n";
                        $export_xml .= "\t\t\t\t</quest_hotspot>\n";
                    }
                }
                $export_xml .= "\t\t\t</hotspot_data>\n";
                $export_xml .= "\t\t</question_pool_data>\n";
            }
            $export_xml .= "\t\t</quizzes_question_pool>\n";
            /* (28 April 2007) END OF Question Pool export
             *
             */
            $export_xml .= "\t\t<quizzes>\n";
            if ($lms_cfg_quiz_enabled) {
                foreach ($quizzes_data as $quiz) {
                    $export_xml .= "\t\t\t<quiz c_id=\"" . $quiz->c_id . "\" published=\"" . $quiz->published . "\">\r\n";
                    $export_xml .= "\t\t\t\t<quiz_title><![CDATA[" . $quiz->c_title . "]]></quiz_title>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_description><![CDATA[" . $quiz->c_description . "]]></quiz_description>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_category><![CDATA[" . $quiz->category_name . "]]></quiz_category>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_full_score><![CDATA[" . $quiz->c_full_score . "]]></quiz_full_score>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_time_limit><![CDATA[" . $quiz->c_time_limit . "]]></quiz_time_limit>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_min_after><![CDATA[" . $quiz->c_min_after . "]]></quiz_min_after>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_passing_score><![CDATA[" . $quiz->c_passing_score . "]]></quiz_passing_score>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_right_message><![CDATA[" . $quiz->c_right_message . "]]></quiz_right_message>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_wrong_message><![CDATA[" . $quiz->c_wrong_message . "]]></quiz_wrong_message>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_pass_message><![CDATA[" . $quiz->c_pass_message . "]]></quiz_pass_message>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_unpass_message><![CDATA[" . $quiz->c_unpass_message . "]]></quiz_unpass_message>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_review>" . $quiz->c_enable_review . "</quiz_review>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_email>" . $quiz->c_email_to . "</quiz_email>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_print>" . $quiz->c_enable_print . "</quiz_print>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_certif>" . $quiz->c_enable_sertif . "</quiz_certif>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_skin>" . $quiz->c_skin . "</quiz_skin>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_random>" . $quiz->c_random . "</quiz_random>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_guest>" . $quiz->c_guest . "</quiz_guest>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_slide>" . $quiz->c_slide . "</quiz_slide>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_language>" . $quiz->c_language . "</quiz_language>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_certificate>" . $quiz->c_certificate . "</quiz_certificate>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_gradebook>" . $quiz->c_gradebook . "</quiz_gradebook>\r\n";
                    $export_xml .= "\t\t\t\t<quiz_params><![CDATA[" . $quiz->params . "]]></quiz_params>\r\n";
                    $export_xml .= "\t\t\t\t<is_time_related><![CDATA[" . $quiz->is_time_related . "]]></is_time_related>\r\n";
                    $export_xml .= "\t\t\t\t<show_period><![CDATA[" . $quiz->show_period . "]]></show_period>\r\n";
                    $query = "SELECT * FROM #__lms_quiz_t_quiz_pool WHERE quiz_id = {$quiz->c_id}";
                    $JLMS_DB->SetQuery($query);
                    $quiz_pool = $JLMS_DB->LoadObjectList();
                    $export_xml .= "\t\t\t\t<quiz_pool_assoc>\n";
                    foreach ($quiz_pool as $qup) {
                        $export_xml .= "\t\t\t\t\t<quiz_pool_item qcat_id=\"" . $qup->qcat_id . "\" items_number=\"" . $qup->items_number . "\" />\n";
                    }
                    $export_xml .= "\t\t\t\t</quiz_pool_assoc>\n";
                    $q_quests = array();
                    $qq_ids = array();
                    foreach ($quiz_quest_data as $qqdo) {
                        if ($qqdo->c_quiz_id == $quiz->c_id) {
                            $q_quests[] = $qqdo;
                            $qq_ids[] = $qqdo->c_id;
                        }
                    }
                    $export_xml .= "\t\t\t\t<quiz_questions>\n";
                    if (count($q_quests)) {
                        foreach ($q_quests as $quest) {
                            $export_xml .= "\t\t\t\t\t<quiz_question c_id=\"" . $quest->c_id . "\" c_point=\"" . $quest->c_point . "\" c_attempts=\"" . $quest->c_attempts . "\" c_type=\"" . $quest->c_type . "\" c_pool=\"" . $quest->c_pool . "\" c_qcat=\"" . $quest->c_qcat . "\" ordering=\"" . $quest->ordering . "\">\n";
                            $export_xml .= "\t\t\t\t\t\t<question_text><![CDATA[" . $quest->c_question . "]]></question_text>\r\n";
                            $export_xml .= "\t\t\t\t\t\t<question_image><![CDATA[" . $quest->c_image . "]]></question_image>\r\n";
                            $export_xml .= "\t\t\t\t\t\t<question_params><![CDATA[" . $quest->params . "]]></question_params>\r\n";
                            $export_xml .= "\t\t\t\t\t\t<question_explanation><![CDATA[" . $quest->c_explanation . "]]></question_explanation>\r\n";
                            // added 27.03.2008 (DEN)
                            $export_xml .= "\t\t\t\t\t</quiz_question>\n";
                        }
                    }
                    $export_xml .= "\t\t\t\t</quiz_questions>\n";
                    // 18 June 2007 - questions feedbacks
                    $q_fback = array();
                    foreach ($quiz_fb_data as $qfb) {
                        if (in_array($qfb->quest_id, $qq_ids)) {
                            $q_fback[] = $qfb;
                        }
                    }
                    $export_xml .= "\t\t\t<question_feedbacks>\n";
                    if (count($q_fback)) {
                        foreach ($q_fback as $qfb) {
                            if ($qfb->fb_text) {
                                $export_xml .= "\t\t\t<question_fb quest_id=\"" . $qfb->quest_id . "\" choice_id=\"" . $qfb->choice_id . "\">\n";
                                $export_xml .= "\t\t\t\t<fb_text><![CDATA[" . $qfb->fb_text . "]]></fb_text>\r\n";
                                $export_xml .= "\t\t\t</question_fb>\n";
                            }
                        }
                    }
                    $export_xml .= "\t\t\t</question_feedbacks>\n";
                    $export_xml .= "\t\t\t\t<choice_data>\n";
                    $q_choice = array();
                    foreach ($quiz_choice_data as $qcd) {
                        if (in_array($qcd->c_question_id, $qq_ids)) {
                            $q_choice[] = $qcd;
                        }
                    }
                    if (count($q_choice)) {
                        foreach ($q_choice as $qc_one) {
                            $export_xml .= "\t\t\t\t\t<quest_choice c_question_id=\"" . $qc_one->c_question_id . "\" c_right=\"" . $qc_one->c_right . "\" ordering=\"" . $qc_one->ordering . "\">\r\n";
                            $export_xml .= "\t\t\t\t\t\t<choice_text><![CDATA[" . $qc_one->c_choice . "]]></choice_text>\r\n";
                            $export_xml .= "\t\t\t\t\t</quest_choice>\n";
                        }
                    }
                    $export_xml .= "\t\t\t\t</choice_data>\n";
                    $export_xml .= "\t\t\t\t<match_data>\n";
                    $q_match = array();
                    foreach ($quiz_match_data as $qmd) {
                        if (in_array($qmd->c_question_id, $qq_ids)) {
                            $q_match[] = $qmd;
                        }
                    }
                    if (count($q_match)) {
                        foreach ($q_match as $qm_one) {
                            $export_xml .= "\t\t\t\t\t<quest_match c_question_id=\"" . $qm_one->c_question_id . "\" ordering=\"" . $qm_one->ordering . "\">\r\n";
                            $export_xml .= "\t\t\t\t\t\t<match_text_left><![CDATA[" . $qm_one->c_left_text . "]]></match_text_left>\r\n";
                            $export_xml .= "\t\t\t\t\t\t<match_text_right><![CDATA[" . $qm_one->c_right_text . "]]></match_text_right>\r\n";
                            $export_xml .= "\t\t\t\t\t</quest_match>\n";
                        }
                    }
                    $export_xml .= "\t\t\t\t</match_data>\n";
                    // Likert scale - 27.03.2008 (DEN)
                    $export_xml .= "\t\t\t<scale_data>\n";
                    $q_scale = array();
                    foreach ($quiz_scale_data as $qsd) {
                        if (in_array($qsd->c_question_id, $qq_ids)) {
                            $q_scale[] = $qsd;
                        }
                    }
                    if (count($q_scale)) {
                        foreach ($q_scale as $qs_one) {
                            $export_xml .= "\t\t\t\t<quest_scale c_question_id=\"" . $qs_one->c_question_id . "\" c_type=\"" . $qs_one->c_type . "\" ordering=\"" . $qs_one->ordering . "\">\r\n";
                            $export_xml .= "\t\t\t\t\t<scale_field><![CDATA[" . $qs_one->c_field . "]]></scale_field>\r\n";
                            $export_xml .= "\t\t\t\t</quest_scale>\n";
                        }
                    }
                    $export_xml .= "\t\t\t</scale_data>\n";
                    $export_xml .= "\t\t\t\t<blank_data>\n";
                    $q_blank = array();
                    foreach ($quiz_blank_data as $qbd) {
                        if (in_array($qbd->c_question_id, $qq_ids)) {
                            $q_blank[] = $qbd;
                        }
                    }
                    if (count($q_blank)) {
                        foreach ($q_blank as $qb_one) {
                            $export_xml .= "\t\t\t\t\t<quest_blank c_question_id=\"" . $qb_one->c_question_id . "\" ordering=\"" . $qb_one->ordering . "\">\r\n";
                            $export_xml .= "\t\t\t\t\t\t<blank_text><![CDATA[" . $qb_one->c_text . "]]></blank_text>\r\n";
                            $export_xml .= "\t\t\t\t\t<default_answer><![CDATA[" . $qb_one->c_default . "]]></default_answer>\r\n";
                            $export_xml .= "\t\t\t\t\t</quest_blank>\n";
                        }
                    }
                    $export_xml .= "\t\t\t\t</blank_data>\n";
                    $export_xml .= "\t\t\t\t<hotspot_data>\n";
                    $q_hotspot = array();
                    foreach ($quiz_hotspot_data as $qhd) {
                        if (in_array($qhd->c_question_id, $qq_ids)) {
                            $q_hotspot[] = $qhd;
                        }
                    }
                    if (count($q_hotspot)) {
                        foreach ($q_hotspot as $qh_one) {
                            $export_xml .= "\t\t\t\t\t<quest_hotspot c_question_id=\"" . $qh_one->c_question_id . "\">\r\n";
                            $export_xml .= "\t\t\t\t\t\t<hs_start_x><![CDATA[" . $qh_one->c_start_x . "]]></hs_start_x>\r\n";
                            $export_xml .= "\t\t\t\t\t\t\t<hs_start_y><![CDATA[" . $qh_one->c_start_y . "]]></hs_start_y>\r\n";
                            $export_xml .= "\t\t\t\t\t\t<hs_width><![CDATA[" . $qh_one->c_width . "]]></hs_width>\r\n";
                            $export_xml .= "\t\t\t\t\t\t<hs_height><![CDATA[" . $qh_one->c_height . "]]></hs_height>\r\n";
                            $export_xml .= "\t\t\t\t\t</quest_hotspot>\n";
                        }
                    }
                    $export_xml .= "\t\t\t\t</hotspot_data>\n";
                    $export_xml .= "\t\t\t</quiz>\n";
                    $processed_quizzes[] = $quiz->c_id;
                }
            }
            $export_xml .= "\t\t</quizzes>\n";
        }
        //end of quizzez
        ///////////////////////////////////////////////////////////////////////////////
        //certificates section
        // Certificates section (was changed at 27.03.2008 (DEN) - processing of fonts, additional texts; different roles are not processed)
        $cert_ids = array();
        $export_xml .= "\t\t<certificates>\n";
        foreach ($certs as $cert) {
            if ($cert->crtf_type == 1 || $cert->crtf_type == 2) {
                $export_xml .= "\t\t\t<certificate id=\"" . $cert->id . "\" file_id=\"" . $cert->file_id . "\" crtf_type=\"" . $cert->crtf_type . "\" text_x=\"" . $cert->text_x . "\" text_y=\"" . $cert->text_y . "\" text_size=\"" . $cert->text_size . "\">\n";
                $export_xml .= "\t\t\t\t<certificate_text><![CDATA[" . $cert->crtf_text . "]]></certificate_text>\r\n";
                $export_xml .= "\t\t\t\t<certificate_font><![CDATA[" . $cert->crtf_font . "]]></certificate_font>\r\n";
                $export_xml .= "\t\t\t</certificate>\n";
                $cert_ids[] = $cert->id;
            }
        }
        $export_xml .= "\t\t</certificates>\n";
        $export_xml .= "\t\t<certificate_texts>\n";
        if (!empty($cert_ids)) {
            foreach ($certs as $cert) {
                if ($cert->crtf_type == -2 && in_array($cert->parent_id, $cert_ids)) {
                    $export_xml .= "\t\t\t<certificate_add_text parent_id=\"" . $cert->parent_id . "\" crtf_type=\"" . $cert->crtf_type . "\" text_x=\"" . $cert->text_x . "\" text_y=\"" . $cert->text_y . "\" text_size=\"" . $cert->text_size . "\">\n";
                    $export_xml .= "\t\t\t\t<add_certificate_text><![CDATA[" . $cert->crtf_text . "]]></add_certificate_text>\r\n";
                    $export_xml .= "\t\t\t\t<certificate_font><![CDATA[" . $cert->crtf_font . "]]></certificate_font>\r\n";
                    $export_xml .= "\t\t\t</certificate_add_text>\n";
                }
            }
        }
        $export_xml .= "\t\t</certificate_texts>\n";
        //files section
        $export_xml .= "\t\t<files>\n";
        foreach ($files as $ff) {
            $export_xml .= "\t\t\t<file id=\"" . $ff->id . "\">\n";
            $export_xml .= "\t\t\t\t<filename><![CDATA[" . $ff->file_name . "]]></filename>\r\n";
            $export_xml .= "\t\t\t\t<servername><![CDATA[" . $ff->file_srv_name . "]]></servername>\r\n";
            $export_xml .= "\t\t\t</file>\n";
        }
        $export_xml .= "\t\t</files>\n";
        //SCORM's section
        if (in_array(3, $cid)) {
            $export_xml .= "\t\t<scorms>\n";
            foreach ($scorms as $scorm) {
                $export_xml .= "\t\t\t<scorm id=\"" . $scorm->id . "\" uploadtime=\"" . $scorm->upload_time . "\" >\n";
                $export_xml .= "\t\t\t\t<foldersrvname><![CDATA[" . $scorm->folder_srv_name . "]]></foldersrvname>\r\n";
                $export_xml .= "\t\t\t\t<packagesrvname><![CDATA[" . $scorm->package_srv_name . "]]></packagesrvname>\r\n";
                $export_xml .= "\t\t\t\t<packageusername><![CDATA[" . $scorm->package_user_name . "]]></packageusername>\r\n";
                $export_xml .= "\t\t\t</scorm>\n";
            }
            $export_xml .= "\t\t</scorms>\n";
        }
        //ZIPPACK's section
        if (in_array(1, $cid)) {
            $export_xml .= "\t\t<zipped_documents>\n";
            foreach ($zipped_docs as $zipdoc) {
                $export_xml .= "\t\t\t<zipdoc id=\"" . $zipdoc->id . "\" uploadtime=\"" . $zipdoc->upload_time . "\" count_files=\"" . $zipdoc->count_files . "\" zip_size=\"" . $zipdoc->zip_size . "\" zipfile_size=\"" . $zipdoc->zipfile_size . "\" >\n";
                $export_xml .= "\t\t\t\t<zip_folder><![CDATA[" . $zipdoc->zip_folder . "]]></zip_folder>\r\n";
                $export_xml .= "\t\t\t\t<zip_srv_name><![CDATA[" . $zipdoc->zip_srv_name . "]]></zip_srv_name>\r\n";
                $export_xml .= "\t\t\t\t<zip_name><![CDATA[" . $zipdoc->zip_name . "]]></zip_name>\r\n";
                $export_xml .= "\t\t\t\t<startup_file><![CDATA[" . $zipdoc->startup_file . "]]></startup_file>\r\n";
                $export_xml .= "\t\t\t</zipdoc>\n";
            }
            $export_xml .= "\t\t</zipped_documents>\n";
        }
        //LearningPaths section
        if (!empty($lpaths)) {
            $export_xml .= "\t\t<learn_paths>\n";
            foreach ($lpaths as $lpath) {
                // we need to replace item_id to Scorm_package id.
                $item_id = $lpath->item_id;
                if ($item_id) {
                    if ($lpath->lp_type == 1) {
                        $query = "SELECT scorm_package FROM #__lms_n_scorm WHERE id = " . $lpath->item_id;
                        $JLMS_DB->SetQuery($query);
                        $item_id = $JLMS_DB->loadResult();
                    }
                }
                $export_xml .= "\t\t\t<learn_path id=\"" . $lpath->id . "\" item_id=\"" . $item_id . "\" ordering=\"" . $lpath->ordering . "\" published=\"" . $lpath->published . "\" is_time_related=\"" . $lpath->is_time_related . "\" show_period=\"" . $lpath->show_period . "\" >\n";
                $export_xml .= "\t\t\t\t<lp_name><![CDATA[" . $lpath->lpath_name . "]]></lp_name>\n";
                $export_xml .= "\t\t\t\t<lp_shortdescription><![CDATA[" . $lpath->lpath_shortdescription . "]]></lp_shortdescription>\n";
                $export_xml .= "\t\t\t\t<lp_description><![CDATA[" . $lpath->lpath_description . "]]></lp_description>\n";
                $export_xml .= "\t\t\t\t<lp_params><![CDATA[" . $lpath->lp_params . "]]></lp_params>\n";
                ////////////////////////////////////////////////////////////////////////////////
                $lpath_contents = array();
                foreach ($lpath_all_contents as $lp_ac) {
                    if ($lp_ac->lpath_id == $lpath->id) {
                        $lpath_contents[] = $lp_ac;
                    }
                }
                ///////////////////////////////////////////////////////////////////////////////
                // Prerequisites export - 18 August 2007 - (DEN)
                $lpath_prerequisites = array();
                foreach ($lpath_all_prerequisites as $lp_prs) {
                    if ($lp_prs->lpath_id == $lpath->id) {
                        $lpath_prerequisites[] = $lp_prs;
                    }
                }
                ///////////////////////////////////////////////////////////////////////////////
                // Prerequisites export - 18 August 2007 - (DEN)
                $export_xml .= "\t\t\t\t<prerequisites>\n";
                if (count($lpath_prerequisites)) {
                    foreach ($lpath_prerequisites as $prereq) {
                        $export_xml .= "\t\t\t\t\t<prerequisite lpath_id=\"" . $prereq->lpath_id . "\" req_id=\"" . $prereq->req_id . "\" time_minutes=\"" . $prereq->time_minutes . "\" >\n";
                        $export_xml .= "\t\t\t\t\t</prerequisite>\n";
                    }
                }
                $export_xml .= "\t\t\t\t</prerequisites>\n";
                ///////////////////////////////////////////////////////////////////////////////
                $export_xml .= "\t\t\t\t<steps>\n";
                if (count($lpath_contents)) {
                    //tree sorting of LP contents
                    $lpath_contents = JLMS_GetLPathTreeStructure($lpath_contents);
                    foreach ($lpath_contents as $step) {
                        $export_xml .= "\t\t\t\t\t<step id=\"" . $step->id . "\" item_id=\"" . $step->item_id . "\" lpath_id=\"" . $step->lpath_id . "\" step_type=\"" . $step->step_type . "\" parent_id=\"" . $step->parent_id . "\" ordering=\"" . $step->ordering . "\">\n";
                        $export_xml .= "\t\t\t\t\t\t<step_name><![CDATA[" . $step->step_name . "]]></step_name>\r\n";
                        $export_xml .= "\t\t\t\t\t\t<step_shortdescription><![CDATA[" . $step->step_shortdescription . "]]></step_shortdescription>\r\n";
                        $export_xml .= "\t\t\t\t\t\t<step_description><![CDATA[" . $step->step_description . "]]></step_description>\r\n";
                        $export_xml .= "\t\t\t\t\t</step>\n";
                    }
                }
                $export_xml .= "\t\t\t\t</steps>\n";
                //////////////////////////////////////////////////////////////////////////////
                $lpath_conds = array();
                foreach ($lpath_all_conds as $lp_co) {
                    if ($lp_co->lpath_id == $lpath->id) {
                        $lpath_conds[] = $lp_co;
                    }
                }
                $export_xml .= "\t\t\t\t<conds>\n";
                foreach ($lpath_conds as $cond) {
                    $export_xml .= "\t\t\t\t\t<cond lpath_id=\"" . $cond->lpath_id . "\" step_id=\"" . $cond->step_id . "\" ref_step=\"" . $cond->ref_step . "\" cond_type=\"" . $cond->cond_type . "\" cond_value=\"" . $cond->cond_value . "\" >\n";
                    $export_xml .= "\t\t\t\t\t</cond>\n";
                }
                $export_xml .= "\t\t\t\t</conds>\n";
                $export_xml .= "\t\t\t</learn_path>\n";
                $processed_lpaths[] = $lpath->id;
            }
            $export_xml .= "\t\t</learn_paths>\n";
        }
        //TOPICS - 27.03.2008 (DEN)
        $topic_ids = array();
        $export_xml .= "\t\t<course_topics>\n";
        foreach ($topics as $c_topic) {
            $export_xml .= "\t\t\t<c_topic topic_id=\"" . $c_topic->id . "\" ordering=\"" . $c_topic->ordering . "\" published=\"" . $c_topic->published . "\" publish_start=\"" . $c_topic->publish_start . "\" start_date=\"" . $c_topic->start_date . "\" publish_end=\"" . $c_topic->publish_end . "\" end_date=\"" . $c_topic->end_date . "\" is_time_related=\"" . $c_topic->is_time_related . "\" show_period=\"" . $c_topic->show_period . "\">\n";
            $export_xml .= "\t\t\t\t<topic_name><![CDATA[" . $c_topic->name . "]]></topic_name>\r\n";
            $export_xml .= "\t\t\t\t<topic_description><![CDATA[" . $c_topic->description . "]]></topic_description>\r\n";
            $export_xml .= "\t\t\t</c_topic>\n";
            $topic_ids[] = $c_topic->id;
        }
        $export_xml .= "\t\t</course_topics>\n";
        /* define('_CHAPTER_ID', 1);
        	define('_DOCUMENT_ID', 2);
        	define('_LINK_ID', 3);
        	define('_CONTENT_ID', 4);
        	define('_QUIZ_ID', 5);
        	define('_SCORM_ID', 6);
        	define('_LPATH_ID', 7); */
        $export_xml .= "\t\t<course_topic_items>\n";
        foreach ($topic_items as $ct_item) {
            if (in_array($ct_item->topic_id, $topic_ids)) {
                $proceed_add = false;
                if ($ct_item->item_type == 2) {
                    // documents
                    if (in_array(1, $cid) && in_array($ct_item->item_id, $processed_docs)) {
                        $proceed_add = true;
                    }
                } elseif ($ct_item->item_type == 3) {
                    // links
                    if (in_array(4, $cid) && in_array($ct_item->item_id, $processed_links)) {
                        $proceed_add = true;
                    }
                } elseif ($ct_item->item_type == 5) {
                    // quizzes
                    if (in_array(5, $cid) && in_array($ct_item->item_id, $processed_quizzes)) {
                        $proceed_add = true;
                    }
                } elseif ($ct_item->item_type == 7) {
                    // lpaths
                    if (in_array(2, $cid) && in_array($ct_item->item_id, $processed_lpaths)) {
                        $proceed_add = true;
                    }
                }
                if ($proceed_add) {
                    $export_xml .= "\t\t\t<ct_item topic_id=\"" . $ct_item->topic_id . "\" item_id=\"" . $ct_item->item_id . "\" item_type=\"" . $ct_item->item_type . "\" ordering=\"" . $ct_item->ordering . "\" is_shown=\"" . ($ct_item->show ? '1' : '0') . "\" >\n";
                    $export_xml .= "\t\t\t</ct_item>\n";
                }
            }
        }
        $export_xml .= "\t\t</course_topic_items>\n";
        //GradeBook Items:
        if (in_array(8, $cid)) {
            $export_xml .= "\t\t<gradebook_items>\n";
            foreach ($gb_items as $gb_item) {
                $export_xml .= "\t\t\t<gb_item gbi_option=\"" . $gb_item->gbi_option . "\" ordering=\"" . $gb_item->ordering . "\" >\n";
                $export_xml .= "\t\t\t\t<gbi_name><![CDATA[" . $gb_item->gbi_name . "]]></gbi_name>\r\n";
                $export_xml .= "\t\t\t\t<gbi_description><![CDATA[" . $gb_item->gbi_description . "]]></gbi_description>\r\n";
                $export_xml .= "\t\t\t\t<gb_category><![CDATA[" . $gb_item->gb_category . "]]></gb_category>\r\n";
                $export_xml .= "\t\t\t</gb_item>\n";
            }
            $export_xml .= "\t\t</gradebook_items>\n";
            //GradeBook Scale:
            $export_xml .= "\t\t<gradebook_scale>\n";
            foreach ($gb_scale as $gb_sc) {
                $export_xml .= "\t\t\t<gb_scale min_val=\"" . $gb_sc->min_val . "\" max_val=\"" . $gb_sc->max_val . "\" ordering=\"" . $gb_sc->ordering . "\" >\n";
                $export_xml .= "\t\t\t\t<scale_name><![CDATA[" . $gb_sc->scale_name . "]]></scale_name>\r\n";
                $export_xml .= "\t\t\t</gb_scale>\n";
            }
            $export_xml .= "\t\t</gradebook_scale>\n";
            // 27.03.2008 (DEN) GradeBook LPaths:
            $export_xml .= "\t\t<gradebook_lpaths>\n";
            foreach ($gb_lpaths as $gb_lp) {
                $export_xml .= "\t\t\t<gb_lpath learn_path_id=\"" . $gb_lp->learn_path_id . "\" >\n";
                $export_xml .= "\t\t\t</gb_lpath>\n";
            }
            $export_xml .= "\t\t</gradebook_lpaths>\n";
        }
        //end of course backup
        $export_xml .= "\t</course_backup>";
        //end xml file
        $filename_xml = $JLMS_CONFIG->getCfg('absolute_path') . '/media/export.xml';
        //$handle = fopen($filename_xml, 'w');
        if (($handle = @fopen($filename_xml, 'w')) === FALSE) {
            die("Failed to open file 'media/export.xml' for writing! Check that folder 'media' is writable and there is no read-only 'export.xml' file in it.");
        }
        // try to write in XML file our xml-contents.
        if (@fwrite($handle, $export_xml) === FALSE) {
            echo "Could not create writable XML file!  Check that folder 'media' is writable and there is no read-only 'export.xml' file in it.";
            exit;
        }
        fclose($handle);
        $uniq = mktime();
        if ($type == 'gen') {
            $dir = $lms_cfg_backup_folder . "/";
            //chmod($dir, '777');
            $backup_zip = $dir . 'course_backup_' . $course_id . '_' . $uniq . '.zip';
            $backup_zip_file = 'course_backup_' . $course_id . '_' . $uniq . '.zip';
            $temp_backup_dir = $dir . 'course_backup_' . $course_id . '_' . $uniq;
        } elseif ($type == 'exp') {
            $dir = $JLMS_CONFIG->getCfg('absolute_path') . "/media/";
            $backup_zip = $dir . 'course_export_' . $course_id . '_' . $uniq . '.zip';
            $backup_zip_file = 'course_export_' . $course_id . '_' . $uniq . '.zip';
            $temp_backup_dir = $dir . 'course_export_' . $course_id . '_' . $uniq;
        } elseif ($type == 'tpl') {
            $dir = $lms_cfg_backup_folder . "/";
            //chmod($dir, '777');
            $backup_zip = $dir . 'template_' . $course_id . '_' . $uniq . '.zip';
            $backup_zip_file = 'template_' . $course_id . '_' . $uniq . '.zip';
            $temp_backup_dir = $dir . 'template_' . $course_id . '_' . $uniq;
        }
        if (@mkdir($temp_backup_dir)) {
            @mkdir($temp_backup_dir . '/export');
            $temp_backup_dir2 = $temp_backup_dir . '/export';
            $pcl_files = array();
            $filename_xml = str_replace("\\", "/", $filename_xml);
            @rename($filename_xml, $temp_backup_dir2 . '/export.xml');
            $pcl_files[] = $temp_backup_dir2 . '/export.xml';
            if (@mkdir($temp_backup_dir2 . '/files')) {
                foreach ($files as $file) {
                    $filename = $lms_cfg_doc_folder . '/' . $file->file_srv_name;
                    if (@copy($filename, $temp_backup_dir2 . '/files/' . $file->file_srv_name)) {
                        $pcl_files[] = $temp_backup_dir2 . '/files/' . $file->file_srv_name;
                    }
                }
            }
            if (in_array(3, $cid)) {
                if (@mkdir($temp_backup_dir2 . '/scorm')) {
                    foreach ($scorms as $scorm) {
                        $filename = $JLMS_CONFIG->getCfg('absolute_path') . '/' . $lms_cfg_scorm . '/' . $scorm->package_srv_name;
                        $filename = str_replace("\\", "/", $filename);
                        if (@copy($filename, $temp_backup_dir2 . '/scorm/' . $scorm->package_srv_name)) {
                            $pcl_files[] = $temp_backup_dir2 . '/scorm/' . $scorm->package_srv_name;
                        }
                    }
                }
            }
            if (in_array(1, $cid)) {
                if (@mkdir($temp_backup_dir2 . '/zippacks')) {
                    foreach ($zipped_docs as $zipdoc) {
                        $filename = $JLMS_CONFIG->getCfg('absolute_path') . '/' . $lms_cfg_scorm . '/' . $zipdoc->zip_srv_name;
                        $filename = str_replace("\\", "/", $filename);
                        if (@copy($filename, $temp_backup_dir2 . '/zippacks/' . $zipdoc->zip_srv_name)) {
                            $pcl_files[] = $temp_backup_dir2 . '/zippacks/' . $zipdoc->zip_srv_name;
                        }
                    }
                }
            }
            if ($lms_cfg_quiz_enabled && in_array(5, $cid)) {
                if (@mkdir($temp_backup_dir2 . '/quiz_images')) {
                    foreach ($quizzes_files as $quiz_image) {
                        $filename = $JLMS_CONFIG->getCfg('absolute_path') . '/images/joomlaquiz/images/' . $quiz_image;
                        $filename = str_replace("\\", "/", $filename);
                        if (@copy($filename, $temp_backup_dir2 . '/quiz_images/' . $quiz_image)) {
                            $pcl_files[] = $temp_backup_dir2 . '/quiz_images/' . $quiz_image;
                        }
                    }
                }
            }
            $pz = new PclZip($temp_backup_dir . '/' . $backup_zip_file);
            $rrr = $pz->create($pcl_files, PCLZIP_OPT_REMOVE_PATH, $temp_backup_dir2);
            //, '', $temp_backup_dir.'/');
            @rename($temp_backup_dir . '/' . $backup_zip_file, $dir . $backup_zip_file);
            require_once _JOOMLMS_FRONT_HOME . "/includes/jlms_dir_operation.php";
            deldir($temp_backup_dir . '/');
            $backup_zip = $dir . $backup_zip_file;
        } else {
            $pz = new PclZip($backup_zip);
            $filename_xml = str_replace("\\", "/", $filename_xml);
            $xm_path = $JLMS_CONFIG->getCfg('absolute_path') . '/media/';
            $xm_path = str_replace("\\", "/", $xm_path);
            $pz->create($filename_xml, '', $filename_xml = $xm_path);
            //add _lms_course_files_ catalog
            foreach ($files as $file) {
                $filename = $lms_cfg_doc_folder . '/' . $file->file_srv_name;
                $pz->add($filename, 'files', $lms_cfg_doc_folder . '/');
            }
            //add lms_scorm archive catalog
            if (in_array(3, $cid)) {
                foreach ($scorms as $scorm) {
                    $filename = $JLMS_CONFIG->getCfg('absolute_path') . '/' . $lms_cfg_scorm . '/' . $scorm->package_srv_name;
                    $filename = str_replace("\\", "/", $filename);
                    $xm_path = $JLMS_CONFIG->getCfg('absolute_path') . '/' . $lms_cfg_scorm . '/';
                    $xm_path = str_replace("\\", "/", $xm_path);
                    $pz->add($filename, 'scorm', $xm_path);
                }
            }
            //add lms_documents_zip archive catalog
            if (in_array(1, $cid)) {
                foreach ($zipped_docs as $zipdoc) {
                    $filename = $JLMS_CONFIG->getCfg('absolute_path') . '/' . $lms_cfg_scorm . '/' . $zipdoc->zip_srv_name;
                    $filename = str_replace("\\", "/", $filename);
                    $xm_path = $JLMS_CONFIG->getCfg('absolute_path') . '/' . $lms_cfg_scorm . '/';
                    $xm_path = str_replace("\\", "/", $xm_path);
                    $pz->add($filename, 'zippacks', $xm_path);
                }
            }
            //add quiz images
            if ($lms_cfg_quiz_enabled && in_array(5, $cid)) {
                foreach ($quizzes_files as $quiz_image) {
                    $filename = $JLMS_CONFIG->getCfg('absolute_path') . '/images/joomlaquiz/images/' . $quiz_image;
                    $filename = str_replace("\\", "/", $filename);
                    $xm_path = $JLMS_CONFIG->getCfg('absolute_path') . '/images/joomlaquiz/images/';
                    $xm_path = str_replace("\\", "/", $xm_path);
                    $pz->add($filename, 'quiz_images', $xm_path);
                }
            }
        }
        //add sql file
        if ($type == 'gen') {
            $query = "INSERT INTO `#__lms_courses_backups` ( course_id, name, backupdate) VALUES ('{$course_id}', 'course_backup_" . $course_id . "_" . $uniq . ".zip','" . date('Y-m-d H:i:s', $uniq) . "')";
            $JLMS_DB->setQuery($query);
            $JLMS_DB->query();
        } elseif ($type == 'exp') {
            require_once $JLMS_CONFIG->getCfg('absolute_path') . "/components/com_joomla_lms/includes/jlms_download.php";
            JLMS_download('course_export_' . $course_id . '__' . str_replace('-', '_', date('Y-m-d')) . '.zip', $backup_zip, false);
            @unlink($backup_zip);
            exit;
        } elseif ($type == 'tpl') {
            return "template_" . $course_id . "_" . $uniq . ".zip";
        }
    }
    // end of if (!empty($cid)) {
}