コード例 #1
0
ファイル: functions.php プロジェクト: kostastzo/openeclass
/**
 * @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 '';
}
コード例 #2
0
ファイル: course.class.php プロジェクト: nikosv/openeclass
 /**
  * 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));
 }
コード例 #3
0
ファイル: index.php プロジェクト: nikosv/openeclass
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>";
}
コード例 #4
0
ファイル: course_home.php プロジェクト: nikosv/openeclass
                              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');
            }
コード例 #5
0
ファイル: listfaculte.php プロジェクト: kostastzo/openeclass
 * 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;
コード例 #6
0
ファイル: index.php プロジェクト: nikosv/openeclass
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);
}
コード例 #7
0
ファイル: main_lib.php プロジェクト: nikosv/openeclass
/**
 *
 * @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}");
}
コード例 #8
0
ファイル: upgrade.php プロジェクト: kostastzo/openeclass
     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;
コード例 #9
0
ファイル: CourseXML.php プロジェクト: nikosv/openeclass
 /**
  * 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));
 }
コード例 #10
0
ファイル: main_lib.php プロジェクト: kostastzo/openeclass
/**
 * 
 * @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>";
}
コード例 #11
0
ファイル: anoninfo.php プロジェクト: nikosv/openeclass
 *
 * 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();
コード例 #12
0
ファイル: functions.php プロジェクト: nikosv/openeclass
/**
 * @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&amp;id=$id&amp;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 '';
}
コード例 #13
0
ファイル: functions.php プロジェクト: nikosv/openeclass
/**
 * @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');
    }
}
コード例 #14
0
ファイル: insert.php プロジェクト: nikosv/openeclass
/**
 * @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;
}
コード例 #15
0
ファイル: control.php プロジェクト: kostastzo/openeclass
            $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'" : '';
コード例 #16
0
ファイル: opencourses.php プロジェクト: nikosv/openeclass
                } else {
                    $codelink .= "<a class='btn btn-default' role='button' href='" .
                        "{$urlAppend}main/login_form.php?user="******"&amp;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) . "&nbsp;";
            $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";
コード例 #17
0
ファイル: CourseXML.php プロジェクト: kostastzo/openeclass
 /**
  * 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));
 }