function JLMS_Course_HomePage($course_id, $add_elements_page = false) { global $option, $my, $JLMS_DB, $Itemid, $JLMS_CONFIG, $JLMS_SESSION; //TODO: replace global option declaration $usertype = $JLMS_CONFIG->get('current_usertype', 0); $JLMS_ACL =& JLMSFactory::getACL(); $is_teacher = $JLMS_ACL->isTeacher(); $AND_ST = ""; if (false !== ($enroll_period = JLMS_getEnrolPeriod($my->id, $course_id))) { $AND_ST = " AND IF(is_time_related, (show_period < '" . $enroll_period . "' ), 1) "; } $this->course_id = $course_id; $curr_date = date("Y-m-d"); $is_curtopic = intval(mosgetparam($_REQUEST, 't_id', 0)); //create list of topics if ($usertype == 1) { $published = '1'; } else { $published = "published=1 AND (publish_start=0 OR start_date<='{$curr_date}') AND (publish_end=0 OR end_date>='{$curr_date}')"; } $query = "SELECT * FROM #__lms_topics WHERE course_id={$course_id} " . $AND_ST . " AND {$published} " . ($is_curtopic ? " AND id=" . $is_curtopic : "") . " ORDER BY ordering"; $JLMS_DB->setQuery($query); $this->topics = $JLMS_DB->loadObjectList('id'); //get items of the course //2 - documents if ($add_elements_page) { $rows = array(); $possibilities = new stdClass(); JLMSDocs::FillList($course_id, $rows, $possibilities, false, false); $this->elements[_DOCUMENT_ID] = JLMSDocs::GetItemsbyPermission($rows, 'manage'); } else { $AND_ST_D = ""; if (false !== ($enroll_period = JLMS_getEnrolPeriod($my->id, $course_id))) { $AND_ST_D = " AND IF(a.is_time_related, (a.show_period < '" . $enroll_period . "' ), 1) "; } $query = "SELECT a.*, b.file_name FROM #__lms_documents as a LEFT JOIN #__lms_files as b ON a.file_id = b.id AND a.folder_flag = 0 WHERE a.course_id={$course_id}" . $AND_ST_D; $JLMS_DB->setQuery($query); $this->elements[_DOCUMENT_ID] = $JLMS_DB->loadObjectList('id'); foreach ($this->elements[_DOCUMENT_ID] as $elem) { if ($elem->folder_flag == 3) { $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 = " . $elem->file_id; $JLMS_DB->SetQuery($query); $out_row = $JLMS_DB->LoadObjectList(); if (count($out_row) && isset($out_row[0]->allow_link) && $out_row[0]->allow_link == 1) { $this->elements[_DOCUMENT_ID][$elem->id]->doc_name = $out_row[0]->doc_name; $this->elements[_DOCUMENT_ID][$elem->id]->doc_description = $out_row[0]->doc_description; $this->elements[_DOCUMENT_ID][$elem->id]->file_id = $out_row[0]->file_id; $this->elements[_DOCUMENT_ID][$elem->id]->file_name = $out_row[0]->file_name; } else { unset($this->elements[_DOCUMENT_ID][$elem->id]); } } } $this->elements[_DOCUMENT_ID] = AppendFileIcons_toList($this->elements[_DOCUMENT_ID]); } //get max tree level $this->max_lvl = getDirNesting($this->elements[_DOCUMENT_ID], 0); global $max_lvl; $max_lvl = $this->max_lvl; //3 - links $query = "SELECT * FROM #__lms_links WHERE course_id={$course_id}" . $AND_ST; $JLMS_DB->setQuery($query); $this->elements[_LINK_ID] = $JLMS_DB->loadObjectList('id'); //4 - contents ... er... TODO //5 - quizs $query = "SELECT *, c_id AS id FROM #__lms_quiz_t_quiz WHERE course_id={$course_id}" . $AND_ST; $JLMS_DB->setQuery($query); $this->elements[_QUIZ_ID] = $JLMS_DB->loadObjectList('c_id'); $quizzes_i = array(); foreach ($this->elements[_QUIZ_ID] as $row) { $quizzes_i[] = $row->c_id; } //add results for student if ($usertype == 2 && count($this->elements[_QUIZ_ID])) { $quizzes_r = array(); foreach ($this->elements[_QUIZ_ID] as $row) { $quizzes_r[] = $row->c_id; } $q_items_num = array(); $extra_info_cells = array(); if (!empty($quizzes_r)) { $quizzes_r_cid = implode(',', $quizzes_r); $query = "SELECT * FROM #__lms_quiz_results WHERE quiz_id IN ({$quizzes_r_cid}) AND course_id={$course_id} AND user_id={$my->id} GROUP BY quiz_id"; $JLMS_DB->SetQuery($query); $extra_info_cells = $JLMS_DB->loadObjectList(); } foreach ($this->elements[_QUIZ_ID] as $i => $value) { $this->elements[_QUIZ_ID][$i]->start_date = '-'; $this->elements[_QUIZ_ID][$i]->end_date = '-'; $this->elements[_QUIZ_ID][$i]->status = -1; $this->elements[_QUIZ_ID][$i]->user_passed = -1; $this->elements[_QUIZ_ID][$i]->points = -1; $this->elements[_QUIZ_ID][$i]->user_score = 0; $this->elements[_QUIZ_ID][$i]->quiz_max_score = 0; foreach ($extra_info_cells as $cell) { if ($cell->quiz_id == $this->elements[_QUIZ_ID][$i]->c_id) { $this->elements[_QUIZ_ID][$i]->start_date = JLMS_dateToDisplay($cell->quiz_date, false, $JLMS_CONFIG->get('offset') * 60 * 60 - $cell->user_time, '\\<\\b\\r \\/>H:i:s'); $this->elements[_QUIZ_ID][$i]->end_date = JLMS_dateToDisplay($cell->quiz_date, false, $JLMS_CONFIG->get('offset') * 60 * 60, '\\<\\b\\r \\/>H:i:s'); $this->elements[_QUIZ_ID][$i]->points = $cell->user_score; $this->elements[_QUIZ_ID][$i]->status = $cell->user_passed; $this->elements[_QUIZ_ID][$i]->user_passed = $cell->user_passed; $this->elements[_QUIZ_ID][$i]->user_score = $cell->user_score; $this->elements[_QUIZ_ID][$i]->quiz_max_score = $cell->quiz_max_score; } } } unset($extra_info_cells); require_once _JOOMLMS_FRONT_HOME . DS . "includes" . DS . "lms_certificates.php"; $arr = array(); JLMS_Certificates::JLMS_GB_getUserCertificates($course_id, $my->id, $arr); $arr1 = isset($arr['user_quiz_certificates']) ? $arr['user_quiz_certificates'] : array(); foreach ($this->elements[_QUIZ_ID] as $i => $value) { for ($j = 0; $j < count($arr1); $j++) { if ($arr1[$j]->c_quiz_id == $this->elements[_QUIZ_ID][$i]->c_id) { $this->elements[_QUIZ_ID][$i]->link_certificate = "<a target = \"_blank\" href = \"" . $JLMS_CONFIG->get('live_site') . "/index.php?tmpl=component&option=" . $option . "&no_html=1&task=print_quiz_cert&course_id=" . $course_id . "&stu_quiz_id=" . $arr1[$j]->stu_quiz_id . "&user_unique_id=" . $arr1[$j]->user_unique_id . "\"><img src = \"" . $JLMS_CONFIG->get('live_site') . "/components/com_joomla_lms/lms_images/toolbar/btn_certificate.png\" border = \"0\" align=\"top\" alt=\"certificate\"/></a>"; } } } } //6 - scorm ... er... TODO //7 - learning paths $lpaths = array(); if ($course_id && $usertype) { //$JLMS_SESSION->clear('redirect_to_learnpath'); if ($usertype == 1) { $query = "SELECT * FROM #__lms_learn_paths WHERE course_id = '" . $course_id . "'" . $AND_ST . "\n ORDER BY ordering"; } elseif ($usertype == 2) { //$query = "SELECT a.*, b.user_status as r_status, b.start_time as r_start, b.end_time as r_end" //. "\n FROM #__lms_learn_paths as a LEFT JOIN #__lms_learn_path_results as b ON a.id = b.lpath_id AND b.course_id = '".$course_id."' AND b.user_id = '".$my->id."'" $query = "SELECT a.*, '' as r_status, '' as r_start, '' as r_end" . "\n FROM #__lms_learn_paths as a" . "\n WHERE a.course_id = '" . $course_id . "'" . "\n AND a.published = 1" . "\n ORDER BY a.ordering"; } $JLMS_DB->SetQuery($query); $lpaths = $JLMS_DB->LoadObjectList(); if ($usertype == 2) { $user_ids = array(); $user_ids[] = $my->id; require_once _JOOMLMS_FRONT_HOME . "/includes/lms_grades.lib.php"; JLMS_LP_populate_results($course_id, $lpaths, $user_ids); // 13 August 2007 (DEN) Check for prerequisites. // 1. get the list of lpath_ids. $lpath_ids = array(); foreach ($lpaths as $lpath) { $lpath_ids[] = $lpath->id; } if (!empty($lpath_ids)) { $lpath_ids_str = implode(',', $lpath_ids); // 2. get the list of prerequisites // SELECT from two tables (+ #__lms_learn_paths) - because the prereq lpath could be deleted... $query = "SELECT a.* FROM #__lms_learn_path_prerequisites as a, #__lms_learn_paths as b" . "\n WHERE a.lpath_id IN ({$lpath_ids_str}) AND a.req_id = b.id"; $JLMS_DB->SetQuery($query); $prereqs = $JLMS_DB->LoadObjectList(); if (!empty($prereqs)) { // 3. compare lists of prereqs to the lists of lpaths. $i = 0; while ($i < count($lpaths)) { $is_hidden = false; $o = 0; while ($o < count($prereqs)) { if ($prereqs[$o]->lpath_id == $lpaths[$i]->id) { $j = 0; while ($j < count($lpaths)) { if ($lpaths[$j]->id == $prereqs[$o]->req_id) { if (!$lpaths[$j]->item_id) { if (empty($lpaths[$j]->r_status)) { $is_hidden = true; break; } else { $end_time = strtotime($lpaths[$j]->r_end); $current_time = strtotime(date("Y-m-d H:i:s")); if ($current_time > $end_time && $current_time - $end_time < $prereqs[$o]->time_minutes * 60) { $is_hidden = true; break; } } } else { if (empty($lpaths[$j]->s_status)) { $is_hidden = true; break; } else { $end_time = strtotime($lpaths[$j]->r_end); $current_time = strtotime(date("Y-m-d H:i:s")); if ($current_time > $end_time && $current_time - $end_time < $prereqs[$o]->time_minutes * 60) { $is_hidden = true; break; } } } } $j++; } } $o++; } $lpaths[$i]->is_hidden = $is_hidden; $i++; } } } } } foreach ($lpaths as $lpath) { $this->elements[_LPATH_ID][$lpath->id] = $lpath; } //populate topics with links to their items $query = "SELECT * FROM #__lms_topic_items WHERE course_id={$course_id} ORDER BY ordering"; $JLMS_DB->setQuery($query); $items = $JLMS_DB->loadObjectList(); for ($i = 0; $i < count($items); $i++) { if ($items[$i]->item_type == 7) { $query = "SELECT lp_type FROM #__lms_learn_paths WHERE id = '" . $items[$i]->item_id . "'" . $AND_ST; $JLMS_DB->SetQuery($query); $lp_type = $JLMS_DB->LoadResult(); if ($lp_type == 2) { $query = "SELECT item_id FROM #__lms_learn_paths WHERE id = '" . $items[$i]->item_id . "'"; $JLMS_DB->SetQuery($query); $learn_path_id = $JLMS_DB->LoadResult(); $query = "SELECT scorm_package, params as scorm_params, width as scorm_width, height as scorm_height FROM #__lms_n_scorm WHERE id = '" . $learn_path_id . "'"; $JLMS_DB->SetQuery($query); $outer_doc = null; $scorm_info = null; $scorm_info = $JLMS_DB->LoadObject(); if (is_object($scorm_info)) { $this->elements[_LPATH_ID][$items[$i]->item_id]->scorm_params = $scorm_info->scorm_params; $this->elements[_LPATH_ID][$items[$i]->item_id]->scorm_width = $scorm_info->scorm_width; $this->elements[_LPATH_ID][$items[$i]->item_id]->scorm_height = $scorm_info->scorm_height; $scorm_package = $scorm_info->scorm_package; $query = "SELECT id FROM #__lms_n_scorm WHERE scorm_package = '" . $scorm_package . "' AND course_id = 0"; $JLMS_DB->SetQuery($query); $scorm_lib_id = $JLMS_DB->LoadResult(); $query = "SELECT outdoc_share, owner_id, allow_link FROM #__lms_outer_documents WHERE file_id = '" . $scorm_lib_id . "' AND folder_flag = 3"; $JLMS_DB->SetQuery($query); $outer_doc = $JLMS_DB->LoadObject(); } if (is_object($outer_doc) && isset($outer_doc->allow_link) && $outer_doc->allow_link == 1) { // 01May2009: new library policy: if 'allow_link' is enabled - we can view already added resource ! } else { unset($items[$i]); } } elseif ($lp_type == 1) { $query = "SELECT item_id FROM #__lms_learn_paths WHERE id = '" . $items[$i]->item_id . "'"; $JLMS_DB->SetQuery($query); $learn_path_id = $JLMS_DB->LoadResult(); if ($learn_path_id) { $query = "SELECT params as scorm_params, width as scorm_width, height as scorm_height FROM #__lms_n_scorm WHERE id = '" . $learn_path_id . "'"; $JLMS_DB->SetQuery($query); $scorm_info = null; $scorm_info = $JLMS_DB->LoadObject(); if (is_object($scorm_info)) { $this->elements[_LPATH_ID][$items[$i]->item_id]->scorm_params = $scorm_info->scorm_params; $this->elements[_LPATH_ID][$items[$i]->item_id]->scorm_width = $scorm_info->scorm_width; $this->elements[_LPATH_ID][$items[$i]->item_id]->scorm_height = $scorm_info->scorm_height; } } } } } if (!$is_teacher) { $this->_filterItemsByShowPeriod($items, $course_id); } $mas = array(); foreach ($items as $k => $v) { $mas[] = $items[$k]; } unset($lpath); $items = $mas; $links = array(); foreach ($items as $item) { $item_tmp->id = $item->item_id; $item_tmp->type = $item->item_type; $item_tmp->ordering = $item->ordering; $links[$item->topic_id][] = $item; } $this->links = $links; }
function showFolderWithContent(&$k, $folder, $i, $topic_id, $checked, $span, $in_folder = null) { global $JLMS_DB, $max_lvl; $manage = $in_folder ? 0 : 1; JLMS_topic_html::showDocumentRow($k, $folder, $i, $topic_id, $checked, $manage, $in_folder, $span); $query = "SELECT a.*, b.file_name FROM #__lms_documents as a LEFT JOIN #__lms_files as b ON a.file_id = b.id AND a.folder_flag = 0 WHERE a.parent_id={$folder->id} ORDER BY ordering"; $JLMS_DB->setQuery($query); $rows = $JLMS_DB->loadObjectList(); $new_rows = array(); for ($j = 0; $j < count($rows); $j++) { if ($rows[$j]->folder_flag == 3) { $query = "SELECT a.*, b.file_name 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 . " AND a.allow_link = 1"; $JLMS_DB->SetQuery($query); $out_row = $JLMS_DB->LoadObjectList(); if (count($out_row)) { $rows[$j]->doc_name = $out_row[0]->doc_name; $rows[$j]->file_name = $out_row[0]->file_name; $rows[$j]->doc_description = $out_row[0]->doc_description; $rows[$j]->file_id = $out_row[0]->file_id; $new_rows[] = $rows[$j]; } else { $rows[$j]->doc_name = _JLMS_LP_RESOURSE_ISUNAV; } } else { $new_rows[] = $rows[$j]; } } unset($rows); $rows = $new_rows; $rows = AppendFileIcons_toList($rows); if (@$in_folder[$max_lvl - $span - 1] == 2) { $in_folder[$max_lvl - $span - 1] = 0; } $in_folder[$max_lvl - $span] = 1; for ($j = 0; $j < count($rows) - 1; $j++) { $rows[$j]->allow_up = 0; $rows[$j]->allow_down = 0; if ($rows[$j]->folder_flag == 1) { showFolderWithContent($k, $rows[$j], $i, $topic_id, ' ', $span - 1, $in_folder); } else { JLMS_topic_html::showDocumentRow($k, $rows[$j], $i, '', ' ', 0, $in_folder, $span - 1); } } $in_folder[$max_lvl - $span] = 2; if (isset($rows[$j])) { $rows[$j]->allow_up = 0; $rows[$j]->allow_down = 0; if ($rows[$j]->folder_flag == 1) { showFolderWithContent($k, $rows[$j], $i, $topic_id, ' ', $span - 1, $in_folder); } else { JLMS_topic_html::showDocumentRow($k, $rows[$j], $i, '', ' ', 0, $in_folder, $span - 1); } } }
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; }