/** * @brief Process resource actions * @global type $tool_content * @global type $id * @global type $langResourceCourseUnitDeleted * @global type $langResourceUnitModified * @global type $course_id * @global type $course_code * @return string */ function process_actions() { global $tool_content, $id, $langResourceCourseUnitDeleted, $langResourceUnitModified, $course_id, $course_code, $webDir; // update index and refresh course metadata require_once 'modules/search/indexer.class.php'; require_once 'modules/course_metadata/CourseXML.php'; if (isset($_REQUEST['edit'])) { $res_id = intval($_GET['edit']); if ($id = check_admin_unit_resource($res_id)) { return edit_res($res_id); } } elseif (isset($_REQUEST['edit_res_submit'])) { // edit resource $res_id = intval($_REQUEST['resource_id']); if ($id = check_admin_unit_resource($res_id)) { @($restitle = $_REQUEST['restitle']); $rescomments = purify($_REQUEST['rescomments']); $result = Database::get()->query("UPDATE course_weekly_view_activities SET\n title = ?s,\n comments = ?s\n WHERE course_weekly_view_id = ?d AND id = ?d", $restitle, $rescomments, $id, $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_UNITRESOURCE, $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); CourseXMLElement::refreshCourse($course_id, $course_code); } $tool_content .= "<div class='alert alert-success'>{$langResourceUnitModified}</div>"; } elseif (isset($_REQUEST['del'])) { // delete resource from course unit $res_id = intval($_GET['del']); if ($id = check_admin_unit_resource($res_id)) { Database::get()->query("DELETE FROM course_weekly_view_activities WHERE id = ?d", $res_id); Indexer::queueAsync(Indexer::REQUEST_REMOVE, Indexer::RESOURCE_UNITRESOURCE, $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); CourseXMLElement::refreshCourse($course_id, $course_code); $tool_content .= "<div class='alert alert-success'>{$langResourceCourseUnitDeleted}</div>"; } } elseif (isset($_REQUEST['vis'])) { // modify visibility in text resources only $res_id = intval($_REQUEST['vis']); if ($id = check_admin_unit_resource($res_id)) { $vis = Database::get()->querySingle("SELECT `visible` FROM course_weekly_view_activities WHERE id = ?d", $res_id)->visible; $newvis = $vis == 1 ? 0 : 1; Database::get()->query("UPDATE course_weekly_view_activities SET visible = '{$newvis}' WHERE id = ?d", $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_UNITRESOURCE, $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); CourseXMLElement::refreshCourse($course_id, $course_code); } } elseif (isset($_REQUEST['down'])) { // change order down $res_id = intval($_REQUEST['down']); if ($id = check_admin_unit_resource($res_id)) { move_order('course_weekly_view_activities', 'id', $res_id, 'order', 'down', "course_weekly_view_id={$id}"); } } elseif (isset($_REQUEST['up'])) { // change order up $res_id = intval($_REQUEST['up']); if ($id = check_admin_unit_resource($res_id)) { move_order('course_weekly_view_activities', 'id', $res_id, 'order', 'up', "course_weekly_view_id={$id}"); } } return ''; }
/** * Refresh the hierarchy nodes (departments) that a course belongs to. All previous belonging * nodes get deleted and then refreshed with the ones given as array arguments. * * @param int $id - Id for a given course * @param array $departments - Array containing the node ids that the given course should belong to */ public function refresh($id, $departments) { if ($departments != null) { Database::get()->query("DELETE FROM {$this->departmenttable} WHERE course = ?d", $id); foreach (array_unique($departments) as $key => $department) { Database::get()->query("INSERT INTO {$this->departmenttable} (course, department) VALUES (?d,?d)", $id, $department); } } // refresh index global $webDir; // required for indexer require_once 'modules/search/indexer.class.php'; Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $id); // refresh course metadata require_once 'modules/course_metadata/CourseXML.php'; CourseXMLElement::refreshCourse($id, course_id_to_code($id)); }
function submitForm() { global $course_id, $course_code, $webDir, $langModifDone; // handle uploaded files $fileData = array(); foreach (CourseXMLConfig::$binaryFields as $bkey) { if (in_array($bkey, CourseXMLConfig::$multipleFields) || in_array($bkey, CourseXMLConfig::$arrayFields)) { if (isset($_FILES[$bkey]) && isset($_FILES[$bkey]['tmp_name']) && isset($_FILES[$bkey]['type']) && is_array($_FILES[$bkey]['tmp_name'])) { for ($i = 0; $i < count($_FILES[$bkey]['tmp_name']); $i++) { if (is_uploaded_file($_FILES[$bkey]['tmp_name'][$i]) && isValidImage($_FILES[$bkey]['type'][$i])) { // convert to resized jpg if possible $uploaded = $_FILES[$bkey]['tmp_name'][$i]; $copied = $_FILES[$bkey]['tmp_name'][$i] . '.new'; $type = $_FILES[$bkey]['type'][$i]; if (copy_resized_image($uploaded, $type, IMAGESIZE_LARGE, IMAGESIZE_LARGE, $copied)) { $fileData[$bkey][$i] = base64_encode(file_get_contents($copied)); $fileData[$bkey . '_mime'][$i] = 'image/jpeg'; // copy_resized_image always outputs jpg } else { // erase possible previous image or failed conversion $fileData[$bkey][$i] = ''; $fileData[$bkey . '_mime'][$i] = ''; } } else { // add to array as empty, in order to keep correspondence $fileData[$bkey][$i] = ''; $fileData[$bkey . '_mime'][$i] = ''; } } } } else { if (isset($_FILES[$bkey]) && is_uploaded_file($_FILES[$bkey]['tmp_name']) && isValidImage($_FILES[$bkey]['type'])) { // convert to resized jpg if possible $uploaded = $_FILES[$bkey]['tmp_name']; $copied = $_FILES[$bkey]['tmp_name'] . '.new'; $type = $_FILES[$bkey]['type']; if (copy_resized_image($uploaded, $type, IMAGESIZE_LARGE, IMAGESIZE_LARGE, $copied)) { $fileData[$bkey] = base64_encode(file_get_contents($copied)); $fileData[$bkey . '_mime'] = 'image/jpeg'; // copy_resized_image always outputs jpg // unset old photo because array_merge_recursive below will keep the old one unset($_POST[$bkey]); unset($_POST[$bkey . '_mime']); } else { // erase possible previous image or failed conversion $fileData[$bkey] = ''; $fileData[$bkey . '_mime'] = ''; } } } } $skeleton = $webDir . '/modules/course_metadata/skeleton.xml'; $extraData = CourseXMLElement::getAutogenData($course_id); // manually merge instructor photo, to achieve multiplicity sync foreach ($fileData['course_instructor_photo'] as $key => $value) { if (!empty($value)) { $_POST['course_instructor_photo'][$key] = $value; } } unset($fileData['course_instructor_photo']); foreach ($fileData['course_instructor_photo_mime'] as $key => $value) { if (!empty($value)) { $_POST['course_instructor_photo_mime'][$key] = $value; } } unset($fileData['course_instructor_photo_mime']); $data = array_merge($_POST, $extraData, $fileData); // course-based adaptation $dnum = Database::get()->querySingle("select count(id) as count from document where course_id = ?d", $course_id)->count; $vnum = Database::get()->querySingle("select count(id) as count from video where course_id = ?d", $course_id)->count; $vlnum = Database::get()->querySingle("select count(id) as count from videolink where course_id = ?d", $course_id)->count; if ($dnum + $vnum + $vlnum < 1) { $data['course_confirmVideolectures'] = 'false'; } $xml = simplexml_load_file($skeleton, 'CourseXMLElement'); $xml->adapt($data); $xml->populate($data); CourseXMLElement::save($course_id, $course_code, $xml); return "<div class='alert alert-success'>$langModifDone</div>"; }
standard_text_escape($citation_text) ."</div> </div> </div> </div>"; $bar_content_2 .= "<br><a data-modal='citation' data-toggle='modal' data-target='#citation' href='javascript:void(0);'>$langCitation</a>"; // display course license if ($course_license) { $license_info_box = "<small>" . copyright_info($course_id) . "</small>"; } else { $license_info_box = ''; } // display opencourses level in bar $level = ($levres = Database::get()->querySingle("SELECT level FROM course_review WHERE course_id = ?d", $course_id)) ? CourseXMLElement::getLevel($levres->level) : false; if (isset($level) && !empty($level)) { $metadataUrl = $urlServer . 'modules/course_metadata/info.php?course=' . $course_code; $head_content .= " <link rel='stylesheet' type='text/css' href='{$urlAppend}modules/course_metadata/course_metadata.css'> <style type='text/css'></style> <script type='text/javascript'> /* <![CDATA[ */ var dialog; var showMetadata = function(course) { $('.modal-body', dialog).load('../../modules/course_metadata/anoninfo.php', {course: course}, function(response, status, xhr) { if (status === 'error') { $('.modal-body', dialog).html('Sorry but there was an error, please try again'); }
* Public License) as published by the Free Software Foundation. * The full license can be read in "/info/license/license_gpl.txt". * * Contact address: GUnet Asynchronous eLearning Group, * Network Operations Center, University of Athens, * Panepistimiopolis Ilissia, 15784, Athens, Greece * e-mail: info@openeclass.org * ======================================================================== */ require_once '../../include/baseTheme.php'; require_once 'include/lib/hierarchy.class.php'; $redirectUrl = "modules/auth/opencourses.php?fc="; $countCallback = null; if (defined('LISTING_MODE') && LISTING_MODE === 'COURSE_METADATA') { require_once 'modules/course_metadata/CourseXML.php'; $redirectUrl = "modules/course_metadata/opencourses.php?fc="; $countCallback = CourseXMLElement::getCountCallback(); // exit if feature disabled if (!get_config('opencourses_enable')) { header("Location: {$urlServer}"); exit; } } $tree = new Hierarchy(); $pageName = $langSelectFac; $roots = $tree->buildRootsArray(); if (count($roots) <= 0) { die("ERROR: no root nodes"); } else { if (count($roots) == 1) { header("Location:" . $urlServer . $redirectUrl . intval($roots[0])); exit;
function updateCourseDescription($cdId, $title, $comments, $type) { global $course_id, $course_code; $type = (isset($type)) ? intval($type) : null; if ($cdId !== null) { Database::get()->query("UPDATE course_description SET title = ?s, comments = ?s, type = ?d, update_dt = NOW() WHERE id = ?d", $title, $comments, $type, intval($cdId)); } else { $res = Database::get()->querySingle("SELECT MAX(`order`) AS max FROM course_description WHERE course_id = ?d", $course_id); $maxorder = ($res->max !== false) ? intval($res->max) + 1 : 1; Database::get()->query("INSERT INTO course_description SET course_id = ?d, title = ?s, comments = ?s, type = ?d, `order` = ?d, update_dt = NOW()", $course_id, $title, purify($comments), $type, $maxorder); } CourseXMLElement::refreshCourse($course_id, $course_code); }
/** * * @global type $langCourseUnitModified * @global type $langCourseUnitAdded * @global null $maxorder * @global type $course_id * @global type $course_code * @global type $webDir * @return type */ function handle_unit_info_edit() { global $langCourseUnitModified, $langCourseUnitAdded, $maxorder, $course_id, $course_code, $webDir; require_once 'modules/tags/moduleElement.class.php'; $title = $_REQUEST['unittitle']; $descr = $_REQUEST['unitdescr']; if (isset($_REQUEST['unit_id'])) { // update course unit $unit_id = $_REQUEST['unit_id']; Database::get()->query("UPDATE course_units SET\n title = ?s,\n comments = ?s\n WHERE id = ?d AND course_id = ?d", $title, $descr, $unit_id, $course_id); // tags if (isset($_POST['tags'])) { $tagsArray = explode(',', $_POST['tags']); $moduleTag = new ModuleElement($unit_id); $moduleTag->syncTags($tagsArray); } $successmsg = $langCourseUnitModified; } else { // add new course unit $order = $maxorder + 1; $q = Database::get()->query("INSERT INTO course_units SET\n title = ?s, comments = ?s, visible = 1,\n `order` = ?d, course_id = ?d", $title, $descr, $order, $course_id); $successmsg = $langCourseUnitAdded; $unit_id = $q->lastInsertID; // tags if (isset($_POST['tags'])) { $tagsArray = explode(',', $_POST['tags']); $moduleTag = new ModuleElement($unit_id); $moduleTag->attachTags($tagsArray); } } // update index require_once 'modules/search/indexer.class.php'; Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_UNIT, $unit_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); // refresh course metadata require_once 'modules/course_metadata/CourseXML.php'; CourseXMLElement::refreshCourse($course_id, $course_code); Session::Messages($successmsg, 'alert-success'); redirect_to_home_page("modules/units/index.php?course={$course_code}&id={$unit_id}"); }
DBHelper::fieldExists("cours_user", "reviewer") or Database::get()->query("ALTER TABLE `cours_user` ADD `reviewer` INT(11) NOT NULL DEFAULT '0' AFTER `editor`"); // prevent dir list under video storage if ($handle = opendir($webDir . '/video/')) { while (false !== ($entry = readdir($handle))) { if (is_dir($webDir . '/video/' . $entry) && $entry != "." && $entry != "..") { touch_or_error($webDir . '/video/' . $entry . '/index.php'); } } closedir($handle); } } if (version_compare($oldversion, '2.8.3', '<')) { Database::get()->query("CREATE TABLE course_review (\n `id` INT(11) NOT NULL AUTO_INCREMENT,\n `course_id` INT(11) NOT NULL,\n `is_certified` BOOL NOT NULL DEFAULT 0,\n `level` TINYINT(4) NOT NULL DEFAULT 0,\n `last_review` DATETIME NOT NULL,\n `last_reviewer` INT(11) NOT NULL,\n PRIMARY KEY (id)) {$charset_spec}"); require_once 'modules/course_metadata/CourseXML.php'; Database::get()->queryFunc("SELECT cours_id, code FROM cours", function ($course) { $xml = CourseXMLElement::initFromFile($course->code); if ($xml !== false) { $xmlData = $xml->asFlatArray(); $is_certified = 0; if (isset($xmlData['course_confirmAMinusLevel']) && $xmlData['course_confirmAMinusLevel'] == 'true' || isset($xmlData['course_confirmALevel']) && $xmlData['course_confirmALevel'] == 'true' || isset($xmlData['course_confirmAPlusLevel']) && $xmlData['course_confirmAPlusLevel'] == 'true') { $is_certified = 1; } $level = CourseXMLElement::NO_LEVEL; if (isset($xmlData['course_confirmAMinusLevel']) && $xmlData['course_confirmAMinusLevel'] == 'true') { $level = CourseXMLElement::A_MINUS_LEVEL; } if (isset($xmlData['course_confirmALevel']) && $xmlData['course_confirmALevel'] == 'true') { $level = CourseXMLElement::A_LEVEL; } if (isset($xmlData['course_confirmAPlusLevel']) && $xmlData['course_confirmAPlusLevel'] == 'true') { $level = CourseXMLElement::A_PLUS_LEVEL;
/** * Turn a non-multiLang field into multiLang. * * @global string $currentCourseLanguage * @global string $webDir * @global string $siteName * @global string $Institution * @global string $InstitutionUrl * @param CourseXMLElement $ele * @return array */ private static function makeMultiLang($ele) { global $currentCourseLanguage, $language, $webDir; global $siteName, $Institution, $InstitutionUrl; // required for proper including commons and langs, ignore unused scope warning if (empty($currentCourseLanguage)) { $clang = $language; } else { $clang = $currentCourseLanguage; } $arr = array(); $key = (string) $ele; if (!isset($GLOBALS['langCMeta'][$key])) { if ($ele->getName() === 'institution') { $key = 'otherinst'; } if ($ele->getName() === 'thematic') { $key = 'othersubj'; } if ($ele->getName() === 'subthematic') { $key = 'othersubsubj'; } } $arr[$clang] = $GLOBALS['langCMeta'][$key]; $revert = false; if ($clang != 'en') { require("${webDir}/lang/en/common.inc.php"); require("${webDir}/lang/en/messages.inc.php"); $arr['en'] = $langCMeta[$key]; // do not use GLOBALS here as it will not work $revert = true; } if ($clang != 'el') { require("${webDir}/lang/el/common.inc.php"); require("${webDir}/lang/el/messages.inc.php"); $arr['el'] = $langCMeta[$key]; // do not use GLOBALS here as it will not work $revert = true; } if ($revert) { // revert messages back to current language require("${webDir}/lang/" . $clang . "/common.inc.php"); require("${webDir}/lang/" . $clang . "/messages.inc.php"); } return base64_encode(serialize($arr)); }
/** * * @global type $langCourseUnitModified * @global type $langCourseUnitAdded * @global null $maxorder * @global type $course_id * @global type $course_code * @global type $webDir * @return type */ function handle_unit_info_edit() { global $langCourseUnitModified, $langCourseUnitAdded, $maxorder, $course_id, $course_code, $webDir; $title = $_REQUEST['unittitle']; $descr = $_REQUEST['unitdescr']; if (isset($_REQUEST['unit_id'])) { // update course unit $unit_id = $_REQUEST['unit_id']; Database::get()->query("UPDATE course_units SET\n title = ?s,\n comments = ?s\n WHERE id = ?d AND course_id = ?d", $title, $descr, $unit_id, $course_id); $successmsg = $langCourseUnitModified; } else { // add new course unit $order = $maxorder + 1; $q = Database::get()->query("INSERT INTO course_units SET\n title = ?s, comments = ?s, visible = 1,\n `order` = ?d, course_id = ?d", $title, $descr, $order, $course_id); $successmsg = $langCourseUnitAdded; $unit_id = $q->lastInsertID; } // update index require_once 'modules/search/indexer.class.php'; Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_UNIT, $unit_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); // refresh course metadata require_once 'modules/course_metadata/CourseXML.php'; CourseXMLElement::refreshCourse($course_id, $course_code); return "<div class='alert alert-success'>{$successmsg}</div>"; }
* * Open eClass is an open platform distributed in the hope that it will * be useful (without any warranty), under the terms of the GNU (General * Public License) as published by the Free Software Foundation. * The full license can be read in "/info/license/license_gpl.txt". * * Contact address: GUnet Asynchronous eLearning Group, * Network Operations Center, University of Athens, * Panepistimiopolis Ilissia, 15784, Athens, Greece * e-mail: info@openeclass.org * ======================================================================== */ require_once '../../include/baseTheme.php'; require_once 'modules/course_metadata/CourseXML.php'; require_once 'modules/course_metadata/CourseXMLConfig.php'; if (isset($_REQUEST['course'])) { $code = $_REQUEST['course']; $course_id = course_code_to_id($code); } // exit if feature disabled or no metadata present if (!isset($_REQUEST['course']) || !get_config('course_metadata') || !file_exists(CourseXMLConfig::getCourseXMLPath($code))) { echo "course error"; exit(); } $xml = CourseXMLElement::init($course_id, $code); echo $xml->asDiv(); exit();
/** * @brief Process resource actions * @global type $tool_content * @global type $id * @global type $langResourceCourseUnitDeleted * @global type $langResourceUnitModified * @global type $course_id * @global type $course_code * @return string */ function process_actions() { global $tool_content, $id, $langResourceCourseUnitDeleted, $langResourceUnitModified, $course_id, $course_code, $webDir, $cnt, $langBack, $urlAppend, $head_content; // update index and refresh course metadata require_once 'modules/search/indexer.class.php'; require_once 'modules/course_metadata/CourseXML.php'; if (isset($_REQUEST['edit'])) { $res_id = intval($_GET['edit']); if ($id = check_admin_unit_resource($res_id)) { $tool_content .= action_bar(array( array( 'title' => $langBack, 'url' => "{$urlAppend}modules/weeks/index.php?course=$course_code&id=$id&cnt=$cnt", 'icon' => 'fa-reply', 'level' => 'primary-label'))); $tool_content .= edit_res($res_id); draw($tool_content, 2, null, $head_content); exit; } } elseif (isset($_REQUEST['edit_res_submit'])) { // edit resource $res_id = intval($_REQUEST['resource_id']); if ($id = check_admin_unit_resource($res_id)) { @$restitle = $_REQUEST['restitle']; $rescomments = purify($_REQUEST['rescomments']); $result = Database::get()->query("UPDATE course_weekly_view_activities SET title = ?s, comments = ?s WHERE course_weekly_view_id = ?d AND id = ?d", $restitle, $rescomments, $id, $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_UNITRESOURCE, $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); CourseXMLElement::refreshCourse($course_id, $course_code); redirect_to_home_page("modules/weeks/index.php?course=$course_code&id=$id&cnt=$cnt"); } $tool_content .= "<div class='alert alert-success'>$langResourceUnitModified</div>"; } elseif (isset($_REQUEST['del'])) { // delete resource from course unit $res_id = intval($_GET['del']); if ($id = check_admin_unit_resource($res_id)) { Database::get()->query("DELETE FROM course_weekly_view_activities WHERE id = ?d", $res_id); Indexer::queueAsync(Indexer::REQUEST_REMOVE, Indexer::RESOURCE_UNITRESOURCE, $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); CourseXMLElement::refreshCourse($course_id, $course_code); Session::Messages($langResourceCourseUnitDeleted, 'alert-success'); redirect_to_home_page("modules/weeks/index.php?course=$course_code&id=$id&cnt=$cnt"); } } elseif (isset($_REQUEST['vis'])) { // modify visibility in text resources only $res_id = intval($_REQUEST['vis']); if ($id = check_admin_unit_resource($res_id)) { $vis = Database::get()->querySingle("SELECT `visible` FROM course_weekly_view_activities WHERE id = ?d", $res_id)->visible; $newvis = ($vis == 1) ? 0 : 1; Database::get()->query("UPDATE course_weekly_view_activities SET visible = '$newvis' WHERE id = ?d", $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_UNITRESOURCE, $res_id); Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); CourseXMLElement::refreshCourse($course_id, $course_code); redirect_to_home_page("modules/weeks/index.php?course=$course_code&id=$id&cnt=$cnt"); } } elseif (isset($_REQUEST['down'])) { // change order down $res_id = intval($_REQUEST['down']); if ($id = check_admin_unit_resource($res_id)) { move_order('course_weekly_view_activities', 'id', $res_id, 'order', 'down', "course_weekly_view_id=$id"); redirect_to_home_page("modules/weeks/index.php?course=$course_code&id=$id&cnt=$cnt"); } } elseif (isset($_REQUEST['up'])) { // change order up $res_id = intval($_REQUEST['up']); if ($id = check_admin_unit_resource($res_id)) { move_order('course_weekly_view_activities', 'id', $res_id, 'order', 'up', "course_weekly_view_id=$id"); redirect_to_home_page("modules/weeks/index.php?course=$course_code&id=$id&cnt=$cnt"); } } return ''; }
/** * @brief upgrade to 2.10 * @global type $langUpgCourse * @param type $code * @param type $course_id * @param type $extramessage */ function upgrade_course_2_10($code, $course_id) { global $langUpgCourse; Database::get()->query("USE `$code`"); Database::get()->query("ALTER TABLE `dropbox_file` CHANGE `description` `description` TEXT"); // refresh XML metadata require_once "modules/course_metadata/CourseXML.php"; if (file_exists(CourseXMLConfig::getCourseXMLPath($code))) { CourseXMLElement::refreshCourse($course_id, $code, true); } if (!DBHelper::fieldExists('poll', 'description', $code)) { Database::get()->query('ALTER TABLE poll ADD description MEDIUMTEXT NOT NULL, ADD end_message MEDIUMTEXT NOT NULL, ADD anonymized INT(1) NOT NULL DEFAULT 0'); Database::get()->query('ALTER TABLE poll_question CHANGE qtype qtype tinyint(3) UNSIGNED NOT NULL'); } }
/** * @brief insert ebook in database * @global type $course_id * @global type $course_code * @param type $id */ function insert_ebook($id) { global $course_id, $course_code; $order = Database::get()->querySingle("SELECT MAX(`order`) AS maxorder FROM unit_resources WHERE unit_id = ?d", $id)->maxorder; foreach (array('ebook', 'section', 'subsection') as $type) { if (isset($_POST[$type]) and count($_POST[$type]) > 0) { foreach ($_POST[$type] as $ebook_id) { $order++; $q = Database::get()->query("INSERT INTO unit_resources SET unit_id = ?d, type = '$type', title = ?s, comments = '', visible=1, `order` = ?d, `date` = " . DBHelper::timeAfter() . ",res_id = ?d", $id, $_POST[$type . '_title'][$ebook_id], $order, $ebook_id); $uresId = $q->lastInsertID; Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_UNITRESOURCE, $uresId); } } } Indexer::queueAsync(Indexer::REQUEST_STORE, Indexer::RESOURCE_COURSE, $course_id); CourseXMLElement::refreshCourse($course_id, $course_code); header('Location: index.php?course=' . $course_code . '&id=' . $id); exit; }
$tool_content .= "<div class='alert alert-success'>{$langOpenCoursesWasSet} {$langOpenCoursesIsALevel}</div>"; $level = CourseXMLElement::A_LEVEL; } else { if ($_POST['course_confirmAMinusLevel'] == 'true') { $tool_content .= "<div class='alert alert-success'>{$langOpenCoursesWasSet} {$langOpenCoursesIsAMinusLevel}</div>"; $level = CourseXMLElement::A_MINUS_LEVEL; } else { $tool_content .= "<div class='alert alert-danger'>{$langOpenCoursesWasNotSet}</div>"; $is_certified = 0; } } } $_POST['course_lastLevelConfirmation'] = date("Y-m-d\\TH:i:sP"); $last_review = date('Y-m-d H:i:s'); $xml->populate($_POST); CourseXMLElement::save($course_id, $course_code, $xml); $xmlData = $xml->asFlatArray(); // reload data // insert or update db $exists = ($exres = Database::get()->querySingle("SELECT 1 as `exists` FROM course_review WHERE course_id = ?d", $course_id)) ? $exres->exists : false; if ($exists) { Database::get()->query("UPDATE course_review SET is_certified = ?d, level = ?d, \n last_review = ?t, last_reviewer = ?d WHERE course_id = ?d", $is_certified, $level, $last_review, $uid, $course_id); } else { Database::get()->query("INSERT INTO course_review (course_id, is_certified, level, last_review, last_reviewer)\n VALUES (?d, ?d, ?d, ?s, ?d)", $course_id, $is_certified, $level, $last_review, $uid); } } // checkboxes $checkedAMinusLevel = $xmlData['course_confirmAMinusLevel'] == 'true' ? "checked='checked'" : ''; $checkedALevel = $xmlData['course_confirmALevel'] == 'true' ? "checked='checked'" : ''; $checkedAPlusLevel = $xmlData['course_confirmAPlusLevel'] == 'true' ? "checked='checked'" : ''; $disabledAMinusLevel = !$looksAMinus && !$checkedAMinusLevel ? "disabled='disabled'" : '';
} else { $codelink .= "<a class='btn btn-default' role='button' href='" . "{$urlAppend}main/login_form.php?user="******"&next=%2Fcourses%2F" . $mycours->k . "%2F' title='" . q($langGuestLogin) . "' data-toggle='tooltip'> <span class='fa fa-plane'></span></a>"; } $codelink .= "</div>"; } } $tool_content .= "<td>" . $codelink . "</td>"; $tool_content .= "<td>" . q($mycours->t) . "</td>"; $tool_content .= "<td class='text-center'>"; if ($isInOpenCoursesMode) { $tool_content .= CourseXMLElement::getLevel($mycours->level) . " "; $tool_content .= "<a href='javascript:showMetadata(\"" . $mycours->k . "\");'><img src='${themeimg}/lom.png'/></a>"; } else { // show the necessary access icon foreach ($icons as $visible => $image) { if ($visible == $mycours->visible) { $tool_content .= $image; } } } $tool_content .= "</td>"; $tool_content .= "</tr>"; } $tool_content .= "</table></div></div></div>"; } else { $tool_content .= "<div class='alert alert-warning text-center'>- $langNoCourses -</div>\n";
/** * Turn a non-multiLang field into multiLang. * * @global string $currentCourseLanguage * @global string $webDir * @global string $siteName * @global string $Institution * @global string $InstitutionUrl * @param CourseXMLElement $ele * @return array */ private static function makeMultiLang($ele) { global $currentCourseLanguage, $webDir, $siteName, $Institution, $InstitutionUrl; if (empty($currentCourseLanguage)) { $currentCourseLanguage = 'greek'; } $clang = langname_to_code($currentCourseLanguage); $arr = array(); $key = (string) $ele; if (!isset($GLOBALS['langCMeta'][$key])) { if ($ele->getName() === 'institution') { $key = 'otherinst'; } if ($ele->getName() === 'thematic') { $key = 'othersubj'; } if ($ele->getName() === 'subthematic') { $key = 'othersubsubj'; } } $arr[$clang] = $GLOBALS['langCMeta'][$key]; $revert = false; if ($clang != 'en') { include "{$webDir}/lang/en/common.inc.php"; include "{$webDir}/lang/en/messages.inc.php"; $arr['en'] = $langCMeta[$key]; $revert = true; } if ($clang != 'el') { include "{$webDir}/lang/el/common.inc.php"; include "{$webDir}/lang/el/messages.inc.php"; $arr['en'] = $langCMeta[$key]; $revert = true; } if ($revert) { // revert messages back to current language include "{$webDir}/lang/" . $currentCourseLanguage . "/common.inc.php"; include "{$webDir}/lang/" . $currentCourseLanguage . "/messages.inc.php"; } return base64_encode(serialize($arr)); }