コード例 #1
0
ファイル: ajax_sidebar.php プロジェクト: kostastzo/openeclass
function getSidebarMessages()
{
    global $uid, $urlServer, $langFrom, $dateFormatLong, $langDropboxNoMessage;
    $message_content = '';
    $mbox = new Mailbox($uid, 0);
    $msgs = $mbox->getInboxMsgs('', 5);
    $msgs = array_filter($msgs, function ($msg) {
        return !$msg->is_read;
    });
    if (!count($msgs)) {
        $message_content .= "<li class='list-item'>" . "<span class='item-wholeline'>" . $langDropboxNoMessage . "</span>" . "</li>";
    } else {
        foreach ($msgs as $message) {
            if ($message->course_id > 0) {
                $course_title = q(ellipsize(course_id_to_title($message->course_id), 30));
            } else {
                $course_title = '';
            }
            $message_date = claro_format_locale_date($dateFormatLong, $message->timestamp);
            $message_content .= "<li class='list-item'>" . "<span class='item-wholeline'>" . "<div class='text-title'>{$langFrom} " . display_user($message->author_id, false, false) . ":<br>" . "<a href='{$urlServer}modules/dropbox/index.php?mid={$message->id}'>" . q($message->subject) . "</a>" . "</div>" . "<div class='text-grey'>{$course_title}</div>" . "<div>{$message_date}</div>" . "</span>" . "</li>";
        }
    }
    return $message_content;
}
コード例 #2
0
ファイル: index.php プロジェクト: nikosv/openeclass
                                                WHERE `visible` = 1
                                                        AND lang=?s
                                                        AND (`begin` <= NOW() or `begin` IS null)
                                                        AND (NOW() <= `end` or `end` IS null)
                                                ORDER BY `order` DESC", $language);

    $ann_content = '';
    if ($announceArr && sizeof($announceArr) > 0) {
        $ann_content .= "<ul class='front-announcements'>";
        $numOfAnnouncements = sizeof($announceArr);
        for ($i = 0; $i < $numOfAnnouncements; $i++) {
            $aid = $announceArr[$i]->id;
            $ann_content .= "
                    <li>
                    <div><a class='announcement-title' href='modules/announcements/main_ann.php?aid=$aid'>" . q($announceArr[$i]->title) . "</a></div>
                    <span class='announcement-date'>- " . claro_format_locale_date($dateFormatLong, strtotime($announceArr[$i]->date)) . " -</span>
            " . standard_text_escape(ellipsize_html("<div class='announcement-main'>".$announceArr[$i]->body."</div>", 500, "<div class='announcements-more'><a href='modules/announcements/main_ann.php?aid=$aid'>$langMore &hellip;</a></div>"))."</li>";
        }
    }

    $tool_content .= "<div class='row'>
        <div class='col-md-8'>";
        $tool_content .= "<div class='panel'>
            <div class='panel-body'>
                $langInfoAbout
            </div>
        </div>";

        // display admin announcements
        if(!empty($ann_content)) {
            $tool_content .= "<h3 class='content-title'>$langAnnouncements <a href='${urlServer}rss.php' style='padding-left:5px;'>
コード例 #3
0
 $result = Database::get()->queryArray("SELECT * FROM admin_announcement ORDER BY `order` DESC");    
 $bottomAnnouncement = $announcementNumber = count($result);    
 if ($announcementNumber > 0) {
     $tool_content .= "<div class='table-responsive'><table class='table-default'>
                     <tr><th>$langTitle</th>
                         <th>$langAnnouncement</th>
                         <th colspan='2'><div align='center'>" . icon('fa-gears') . "</th>";
     foreach ($result as $myrow) {
         if ($myrow->visible == 1) {
             $visibility = 0;
             $classvis = '';
         } else {
             $visibility = 1;
             $classvis = 'not_visible';
         }
         $myrow->date = claro_format_locale_date($dateFormatLong, strtotime($myrow->date));
         $tool_content .= "<tr class='$classvis'>
             <td width='200'><b>" . q($myrow->title) . "</b><br><span class='smaller'>$myrow->date</span></td>
             <td>" . standard_text_escape($myrow->body) . "</td>
             <td width='6'>" .
                 action_button(array(
                     array('title' => $langEditChange,
                         'url' => "$_SERVER[SCRIPT_NAME]?modify=$myrow->id",
                         'icon' => 'fa-edit'),
                     array('title' => $visibility == 0 ? $langViewHide : $langViewShow,
                         'url' => "$_SERVER[SCRIPT_NAME]?id=$myrow->id&amp;vis=$visibility",
                         'icon' => $visibility == 0 ? 'fa-eye-slash' : 'fa-eye'),
                     array('title' => $langUp,
                         'url' => "$_SERVER[SCRIPT_NAME]?up=$myrow->id",
                         'icon' => 'fa-arrow-up'),
                     array('title' => $langDown,
コード例 #4
0
ファイル: portfolio.php プロジェクト: kostastzo/openeclass
if (!empty($user_announcements)) {
    $tool_content .= $user_announcements;
} else {
    $tool_content .= "<li class='list-item' style='border-bottom:none;'>{$langNoRecentAnnounce}</li>";
}
$tool_content .= "</ul>\n                    </div>\n                    <div class='panel-footer'>\n                        <p class='link-to-more'><a href='../modules/announcements/myannouncements.php'>{$langMore}&hellip;</a></p>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class='col-md-5'>\n        <div class='row'>\n            <div class='col-md-12'>\n                <h3 class='content-title'>{%LANG_MY_PERSONAL_CALENDAR%}</h3>\n                <div class='panel'>\n                    <div class='panel-body'>\n                        {%PERSONAL_CALENDAR_CONTENT%}\n                    </div>\n                    <div class='panel-footer'>\n                        <div class='row'>\n                            <div class='col-sm-6 event-legend'>\n                                <div>\n                                    <span class='event event-important'></span><span>{$langAgendaDueDay}</span>\n                                </div>\n                                <div>\n                                    <span class='event event-info'></span><span>{$langAgendaCourseEvent}</span>\n                                </div>\n                            </div>\n                            <div class='col-sm-6 event-legend'>\n                                <div>\n                                    <span class='event event-success'></span><span>{$langAgendaSystemEvent}</span>\n                                </div>\n                                <div>\n                                    <span class='event event-special'></span><span>{$langAgendaPersonalEvent}</span>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <div class='row'>\n                <div class='col-md-12 my-messages-list'>\n                    <h3 class='content-title'>{$langMyPersoMessages}</h3>\n                    <div class='panel'>\n                        <div class='panel-body'>\n                            <ul class='tablelist'>";
if (!empty($user_messages)) {
    $tool_content .= $user_messages;
} else {
    $tool_content .= "<li class='list-item' style='border-bottom:none;'>{$langDropboxNoMessage}</li>";
}
$tool_content .= "</ul>\n                        </div>\n                        <div class='panel-footer'>\n                            <p class='link-to-more'><a href='{$urlAppend}modules/dropbox/'>{$langMore}&hellip;</a></p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n    </div>";
$userdata = Database::get()->querySingle("SELECT surname, givenname, username, email, status, phone, am, registered_at,\n                has_icon, description, password,\n                email_public, phone_public, am_public\n            FROM user\n            WHERE id = ?d", $uid);
$numUsersRegistered = Database::get()->querySingle("SELECT COUNT(*) AS numUsers\n        FROM course_user cu1, course_user cu2\n        WHERE cu1.course_id = cu2.course_id AND cu1.user_id = ?d AND cu1.status = ?d AND cu2.status <> ?d;", $uid, USER_TEACHER, USER_TEACHER)->numUsers;
$lastVisit = Database::get()->queryArray("SELECT * FROM loginout\n                        WHERE id_user = ?d ORDER by idLog DESC LIMIT 2", $uid);
$tool_content .= "\n</div>\n<div id='profile_box' class='row'>\n    <div class='col-md-12'>\n        <h3 class='content-title'>{$langCompactProfile}</h3>\n        <div class='panel'>\n            <div class='panel-body'>\n                <div class='row'>\n                    <div class='col-xs-4 col-sm-2'>\n                        <img src='" . user_icon($uid, IMAGESIZE_LARGE) . "' style='width:80px;' class='img-circle center-block img-responsive' alt='Avatar Image'><br>\n                        <h5 class='not_visible text-center' style='margin:0px;'>" . q($_SESSION['uname']) . "</h5>\n                    </div>\n                    <div class='col-xs-8 col-sm-5'>\n                        <h4>" . q("{$_SESSION['givenname']} {$_SESSION['surname']}") . "</h4>\n                        <span class='tag'>{$langProfileMemberSince} : </span><span class='tag-value'>" . claro_format_locale_date($dateFormatLong, strtotime($userdata->registered_at)) . "</span><br>\n                        <span class='tag'>{$langProfileLastVisit} : <span><span class='tag-value'>" . claro_format_locale_date($dateFormatLong, strtotime($lastVisit[1]->when)) . "</span>\n                    </div>\n                    <div class='col-xs-12 col-sm-5'>\n                        <ul class='list-group'>\n                            <li class='list-group-item'>\n                              <span class='badge'>{$student_courses_count}</span>\n                              {$langSumCoursesEnrolled}\n                            </li>\n                            <li class='list-group-item'>\n                              <span class='badge'>{$teacher_courses_count}</span>\n                              {$langSumCoursesSupport}\n                            </li>\n                        </ul>\n                        <div class='quick-change-pwd'><a href='" . $urlSecure . "main/profile/password.php'>{$langProfileQuickPassword}</a></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n";
draw($tool_content, 1, null, $head_content, null, null, $perso_tool_content);
/**
* draws statistics graph
* @global type $uid
* @global type $langCourseVisits
s * @return type
*/
function courseVisitsPlot()
{
    global $uid, $langCourseVisits, $langNoStats;
    $totalHits = 0;
    $totalDuration = 0;
    $result = Database::get()->queryArray("SELECT a.code code, a.title title\n                                        FROM course AS a LEFT JOIN course_user AS b\n                                             ON a.id = b.course_id\n                                        WHERE b.user_id = ?d\n                                        AND a.visible != " . COURSE_INACTIVE . "\n                                        ORDER BY a.title", $uid);
    if (count($result) > 0) {
        // found courses ?
コード例 #5
0
ファイル: portfolio.php プロジェクト: nikosv/openeclass
            </div>
    </div>";

$userdata = Database::get()->querySingle("SELECT surname, givenname, username, email, status, phone, am, registered_at,
                has_icon, description, password,
                email_public, phone_public, am_public
            FROM user
            WHERE id = ?d", $uid);
$numUsersRegistered = Database::get()->querySingle("SELECT COUNT(*) AS numUsers
        FROM course_user cu1, course_user cu2
        WHERE cu1.course_id = cu2.course_id AND cu1.user_id = ?d AND cu1.status = ?d AND cu2.status <> ?d;", $uid, USER_TEACHER, USER_TEACHER)->numUsers;
$lastVisit = Database::get()->querySingle("SELECT * FROM loginout
                        WHERE id_user = ?d ORDER by idLog DESC LIMIT 1", $uid);
if ($lastVisit) {
    $lastVisitLabel = "<br><span class='tag'>$langProfileLastVisit : </span><span class='tag-value text-muted'>" .
        claro_format_locale_date($dateFormatLong, strtotime($lastVisit->when)) . "</span>";
} else {
    $lastVisitLabel = '';
}

$tool_content .= "
</div>
<div id='profile_box' class='row'>
    <div class='col-md-12'>
        <h2 class='content-title'>$langCompactProfile</h2>
        <div class='panel'>
            <div class='panel-body'>
                <div class='row'>
                    <div class='col-xs-4 col-sm-2'>
                        <img src='" . user_icon($uid, IMAGESIZE_LARGE) . "' style='width:80px;' class='img-circle center-block img-responsive' alt='$langProfileImage'><br>
                        <div class='not_visible text-center' style='margin:0px;'>".q($_SESSION['uname'])."</div>
コード例 #6
0
ファイル: index.php プロジェクト: kostastzo/openeclass
 $announcementNumber = count($result);
 if ($announcementNumber > 0) {
     $tool_content .= "<div class='alert alert-info'>" . userAttendTotal($attendance_id, $userID) . " " . $langAttendanceAbsencesFrom . " " . q($attendance_limit) . " " . $langAttendanceAbsencesFrom2 . " </div>";
     $tool_content .= "<script type='text/javascript' src='../auth/sorttable.js'></script>\n                            <div class='row'><div class='col-sm-12'><div class='table-responsive'>\n                            <table class='table-default sortable' id='t2'>";
     $tool_content .= "<tr><th >{$langTitle}</th><th>{$langAttendanceActivityDate2}</th><th>{$langDescription}</th><th>{$langAttendanceAbsencesYes}</th></tr>";
     foreach ($result as $announce) {
         $content = standard_text_escape($announce->description);
         $d = strtotime($announce->date);
         $tool_content .= "<tr><td><b>";
         if (empty($announce->title)) {
             $tool_content .= $langAnnouncementNoTille;
         } else {
             $tool_content .= q($announce->title);
         }
         $tool_content .= "</b>";
         $tool_content .= "</td>" . "<td><div class='smaller'><span class='day'>" . ucfirst(claro_format_locale_date($dateFormatLong, $d)) . "</span> ({$langHour}: " . ucfirst(date('H:i', $d)) . ")</div></td>" . "<td>" . $content . "</td>";
         $tool_content .= "<td class='center'>";
         //check if the user has attend for this activity
         $userAttend = Database::get()->querySingle("SELECT attend FROM attendance_book\n                                                        WHERE attendance_activity_id = ?d AND uid = ?d", $announce->id, $userID);
         if ($userAttend) {
             $attend = $userAttend->attend;
             if ($attend) {
                 $tool_content .= icon('fa-check-circle', $langAttendanceAbsencesYes);
             } else {
                 $auto_activity = Database::get()->querySingle("SELECT auto FROM attendance_activities WHERE id = ?d", $announce->id)->auto;
                 if (!$auto_activity and $announce->date > date("Y-m-d")) {
                     $tool_content .= icon('fa-question-circle', $langAttendanceStudentFailure);
                 } else {
                     $tool_content .= icon('fa-times-circle', $langAttendanceAbsencesNo);
                 }
             }
コード例 #7
0
     if (count($agendaHits) > 0) {
         $tool_content .= "<script type='text/javascript' src='../auth/sorttable.js'></script>\n                  <table width='99%' class='sortable' id='t2' align='left'>\n          <tr>\n            <th colspan='2' class='left'>{$langAgenda}:</th>\n                  </tr>";
         $numLine = 0;
         foreach ($agendaHits as $agHit) {
             $agenda = Database::get()->querySingle("SELECT title, content, start, duration FROM agenda WHERE id = ?d", $agHit->pkid);
             $class = $numLine % 2 ? 'odd' : 'even';
             $tool_content .= "\n                  <tr class='{$class}'>\n                    <td width='1' valign='top'><img style='padding-top:3px;' src='{$themeimg}/arrow.png' title='bullet' /></td>\n                    <td>";
             $message = $langUnknown;
             if ($agenda->duration != "") {
                 if ($agenda->duration == 1) {
                     $message = $langHour;
                 } else {
                     $message = $langHours;
                 }
             }
             $tool_content .= "<span class=day>" . ucfirst(claro_format_locale_date($dateFormatLong, strtotime($agenda->start))) . "</span> ({$langHour}: " . ucfirst(date("H:i", strtotime($agenda->start))) . ")<br />" . q($agenda->title) . " (" . $langDuration . ": " . q($agenda->duration) . " {$message}) " . $agenda->content . "\n                    </td>\n                  </tr>";
             $numLine++;
         }
         $tool_content .= "</table>";
         $found = true;
     }
 }
 // search in documents
 if ($documents) {
     $documentHits = $idx->searchRaw(DocumentIndexer::buildQuery($_POST));
     if (count($documentHits) > 0) {
         $tool_content .= "<script type='text/javascript' src='../auth/sorttable.js'></script>\n                  <table width='99%' class='sortable' id='t3' align='left'>\n                  <tr>\n                    <th colspan='2' class='left'>{$langDoc}:</th>\n                  </tr>";
         $numLine = 0;
         foreach ($documentHits as $docHit) {
             $document = Database::get()->querySingle("SELECT filename, path, comment FROM document WHERE id = ?d", $docHit->pkid);
             $class = $numLine % 2 ? 'odd' : 'even';
コード例 #8
0
ファイル: main_ann.php プロジェクト: kostastzo/openeclass
 * ========================================================================
 * Copyright 2003-2014  Greek Universities Network - GUnet
 * A full copyright notice can be read in "/info/copyright.txt".
 * For a full list of contributors, see "credits.txt".
 *
 * 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_help = true;
$guest_allowed = true;
include '../../include/baseTheme.php';
require_once 'include/lib/textLib.inc.php';
$pageName = $langAnnouncements;
$isaid = isset($_GET['aid']);
$announceArr = Database::get()->queryArray($isaid ? "SELECT `date`, `title` , `body` FROM `admin_announcement` WHERE id = ?d" : "SELECT `date`, `title` , `body` FROM `admin_announcement`\n\t        WHERE `visible` = 1 AND lang = ?s ORDER BY `date` DESC", $isaid ? intval($_GET['aid']) : $language);
$numOfAnnouncements = count($announceArr);
if ($numOfAnnouncements > 0) {
    $tool_content .= "<div class='table-responsive'><table class='table-default'>";
    for ($i = 0; $i < $numOfAnnouncements; $i++) {
        $tool_content .= "<tr><td><label>" . q($announceArr[$i]->title) . "</label>\n\t\t&nbsp;<span class='smaller'>(" . claro_format_locale_date($dateFormatLong, strtotime($announceArr[$i]->date)) . ")</span>\n\t\t<p>" . standard_text_escape($announceArr[$i]->body) . "</p>\n\t\t</td>\n\t\t</tr>";
    }
    $tool_content .= "</table></div>";
}
draw($tool_content, 0);
コード例 #9
0
ファイル: index.php プロジェクト: kostastzo/openeclass
     $tool_content .= "<div class='alert alert-warning'>{$langGradebookTotalGradeNoInput}</div>";
 }
 $result = Database::get()->queryArray("SELECT * FROM gradebook_activities  WHERE gradebook_activities.visible = ?d AND gradebook_id = ?d  ORDER BY `DATE` DESC", $visible, $gradebook_id);
 $announcementNumber = count($result);
 if ($announcementNumber > 0) {
     $tool_content .= "<div class='alert alert-info'>{$langGradebookTotalGrade}: <b>" . userGradeTotal($gradebook_id, $userID) . "</b> </div>";
     if (weightleft($gradebook_id, 0) != 0) {
         $tool_content .= "<div class='alert alert-warning'>{$langGradebookAlertToChange}</p>";
     }
     $tool_content .= "<table class='table-default' >";
     $tool_content .= "<tr><th>{$langTitle}</th><th>{$langGradebookActivityDate2}</th><th>{$langGradebookActivityDescription}</th><th>{$langGradebookActivityWeight}</th><th>{$langGradebookGrade}</th></tr>";
 }
 if ($result) {
     foreach ($result as $announce) {
         $content = standard_text_escape($announce->description);
         $announce->date = claro_format_locale_date($dateFormatLong, strtotime($announce->date));
         $tool_content .= "<tr><td><b>";
         if (empty($announce->title)) {
             $tool_content .= $langAnnouncementNoTille;
         } else {
             $tool_content .= q($announce->title);
         }
         $tool_content .= "</b>";
         $tool_content .= "</td>" . "<td><div class='smaller'>" . nice_format($announce->date) . "</div></td>" . "<td>" . $content . "</td>" . "<td>" . q($announce->weight) . "%</td>";
         $tool_content .= "<td width='70' class='text-center'>";
         //check user grade for this activity
         $sql = Database::get()->querySingle("SELECT grade FROM gradebook_book WHERE gradebook_activity_id = ?d AND uid = ?d", $announce->id, $userID);
         if ($sql) {
             $tool_content .= $sql->grade;
         } else {
             $tool_content .= "&mdash;";
コード例 #10
0
ファイル: perso_functions.php プロジェクト: nikosv/openeclass
/**
 * @brief get user personal messages
 * @global type $uid
 * @global type $urlServer
 * @global type $langFrom
 * @global type $dateFormatLong
 * @param type $lesson_id
 * @return string
 */
function getUserMessages() {
           
    global $uid, $urlServer, $langFrom, $dateFormatLong;
    
    $message_content = '';    
               
    $mbox = new Mailbox($uid, 0);
    $msgs = $mbox->getInboxMsgs('', 5);
    foreach ($msgs as $message) {
        if ($message->course_id > 0) {
            $course_title = q(ellipsize(course_id_to_title($message->course_id), 30));
        } else {
            $course_title = '';
        }
        $message_date = claro_format_locale_date($dateFormatLong, $message->timestamp);
        $message_content .= "<li class='list-item'>
                                <div class='item-wholeline'>                                    
                                    <div class='text-title'>$langFrom ".display_user($message->author_id, false, false).":
                                        <a href='{$urlServer}modules/dropbox/index.php?mid=$message->id'>" .q($message->subject)."</a>
                                    </div>                                    
                                    <div class='text-grey'>$course_title</div>
                                    <div>$message_date</div>
                                </div>
                            </li>";
    }    
    return $message_content;
}
コード例 #11
0
ファイル: functions.php プロジェクト: nikosv/openeclass
/**
 * @brief display available assignments for adding them to gradebook
 * @global type $course_id
 * @global type $course_code
 * @global type $tool_content
 * @global type $dateFormatLong
 * @global type $langWorks
 * @global type $m
 * @global type $langDescription
 * @global type $langAttendanceNoActMessageAss4
 * @global type $langAdd
 * @global type $langTitle
 * @global type $langHour
 * @param type $gradebook_id
 */
function display_available_assignments($gradebook_id) {

    global $course_id, $course_code, $tool_content, $dateFormatLong,
           $langWorks, $m, $langDescription, $langAttendanceNoActMessageAss4,
           $langAdd, $langTitle, $langHour;

    $checkForAss = Database::get()->queryArray("SELECT * FROM assignment WHERE assignment.course_id = ?d AND  assignment.active = 1 AND assignment.id NOT IN (SELECT module_auto_id FROM gradebook_activities WHERE module_auto_type = 1 AND gradebook_id = ?d)", $course_id, $gradebook_id);

    $checkForAssNumber = count($checkForAss);

    if ($checkForAssNumber > 0) {
        $tool_content .= "
            <div class='row'><div class='col-sm-12'><div class='table-responsive'>
                          <table class='table-default'";
        $tool_content .= "<tr class='list-header'><th>$langTitle</th><th>".q($m['deadline'])."</th><th>$langDescription</th>";
        $tool_content .= "<th class='text-center'><i class='fa fa-cogs'></i></th>";
        $tool_content .= "</tr>";
        foreach ($checkForAss as $newAssToGradebook) {
            $content = ellipsize_html($newAssToGradebook->description, 50);
            if($newAssToGradebook->assign_to_specific){
                $content .= "$m[WorkAssignTo]:<br>";
                $checkForAssSpec = Database::get()->queryArray("SELECT user_id, user.surname , user.givenname FROM `assignment_to_specific`, user WHERE user_id = user.id AND assignment_id = ?d", $newAssToGradebook->id);
                foreach ($checkForAssSpec as $checkForAssSpecR) {
                    $content .= q($checkForAssSpecR->surname). " " . q($checkForAssSpecR->givenname) . "<br>";
                }
            }
            if ((int) $newAssToGradebook->deadline){
                $d = strtotime($newAssToGradebook->deadline);
                $date_str = ucfirst(claro_format_locale_date($dateFormatLong, $d));
                $hour_str = "($langHour: " . ucfirst(date('H:i', $d)).")";
            } else {
                $date_str = $m['no_deadline'];
                $hour_str = "";
            }
            $tool_content .= "<tr><td><b>";

            if (!empty($newAssToGradebook->title)) {
                $tool_content .= q($newAssToGradebook->title);
            }
            $tool_content .= "</b>";
            $tool_content .= "</td>"
                    . "<td><div class='smaller'><span class='day'>".q($date_str)."</span> ".q($hour_str)." </div></td>"
                    . "<td>" . $content . "</td>";
            $tool_content .= "<td width='70' class='text-center'>".icon('fa-plus', $langAdd, "$_SERVER[SCRIPT_NAME]?course=$course_code&amp;gradebook_id=" . getIndirectReference($gradebook_id) . "&amp;addCourseActivity=" . getIndirectReference($newAssToGradebook->id) . "&amp;type=1");
        } // end of while
        $tool_content .= "</tr></table></div></div></div>";
    } else {
        $tool_content .= "<div class='alert alert-warning'>$langAttendanceNoActMessageAss4</div>";
    }
}
コード例 #12
0
ファイル: index.php プロジェクト: kostastzo/openeclass
     $tool_content .= "</div>";
 }
 $tool_content .= " </div>";
 if (!empty($warning)) {
     $tool_content .= "<br><span>{$warning}</span>";
 }
 $tool_content .= "</div>\n                    </div>\n                </div>\n            </div>\n        </div>";
 $rss_link = "<link rel='alternate' type='application/rss+xml' title='RSS-Feed' href='" . $urlServer . "rss.php'>";
 $announceArr = Database::get()->queryArray("SELECT `id`, `date`, `title`, `body`, `order` FROM `admin_announcement`\n                                                WHERE `visible` = 1\n                                                        AND lang=?s\n                                                        AND (`begin` <= NOW() or `begin` IS null)\n                                                        AND (NOW() <= `end` or `end` IS null)\n                                                ORDER BY `order` DESC", $language);
 $ann_content = '';
 if ($announceArr && sizeof($announceArr) > 0) {
     $ann_content .= "<h4>{$langAnnouncements} <a href='{$urlServer}rss.php' style='padding-left:5px;'>\n                    <i class='fa fa-rss-square'></i>\n                    </a></h4><ul class='front-announcements'>";
     $numOfAnnouncements = sizeof($announceArr);
     for ($i = 0; $i < $numOfAnnouncements; $i++) {
         $aid = $announceArr[$i]->id;
         $ann_content .= "\n                    <li>\n                    <div><a class='announcement-title' href='modules/announcements/main_ann.php?aid={$aid}'>" . q($announceArr[$i]->title) . "</a></div>\n                    <span class='announcement-date'>- " . claro_format_locale_date($dateFormatLong, strtotime($announceArr[$i]->date)) . " -</span>\n            " . standard_text_escape(ellipsize_html($announceArr[$i]->body, 500, "<div class='announcements-more'><a href='modules/announcements/main_ann.php?aid={$aid}'>{$langMore} &hellip;</a></div>")) . "</li>";
     }
 }
 $tool_content .= "\n\n        <div class='row'>\n\n            <div class='col-md-8'>\n                <div class='panel'>\n                    <div class='panel-body'>\n                        {$langInfoAbout}\n                    </div>\n                </div>\n                <div class='panel'>\n                    <div class='panel-body'>";
 if (!empty($ann_content)) {
     $tool_content .= $ann_content;
 } else {
     $tool_content .= "<li>{$langNoRecentAnnounce}</li>";
 }
 $tool_content .= "</ul></div>\n                </div>\n            </div>\n            \n            <div class='col-md-4'>\n\n            ";
 $online_users = getOnlineUsers();
 $tool_content .= "\n\n                <div class='panel'>\n                    <div class='panel-body'>\n                        <i class='fa fa-group space-after-icon'></i>{$langOnlineUsers}: {$online_users}\n                    </div>\n                </div>";
 if (get_config('opencourses_enable')) {
     $tool_content .= "<div class='panel'>\n                <div class='panel-body'>\n                    <a href='http://opencourses.gr'>\n                        <img class='img-responsive' src='{$themeimg}/open_courses_bnr.png'>\n                    </a>\n                </div>\n            </div>";
 }
 if (get_config('enable_mobileapi')) {
コード例 #13
0
function event_list($events, $sens)
{
    global $course_code, $is_editor, $langEvents, $langCalendar, $langDateNow, $dateFormatLong, $langHour, $langHours, $langDuration, $langAgendaNoTitle, $langDelete, $langConfirmDeleteEvent, $langConfirmDeleteRecursive, $langConfirmDeleteRecursiveEvents, $langModify, $langVisible;
    $dateNow = date("j-n-Y / H:i", time());
    $barMonth = '';
    $nowBarShowed = false;
    $eventlist = "<div class='table-responsive'><table class='table-default'>\r\n                          <tr><th class='left'>{$langEvents}</th>";
    if ($is_editor) {
        $eventlist .= "<th class='text-center option-btn-cell'>" . icon('fa-gears') . "</th>";
    }
    $eventlist .= "</tr>";
    foreach ($events as $myrow) {
        $content = standard_text_escape($myrow->content);
        $d = strtotime($myrow->start);
        if (!$nowBarShowed) {
            // Following order
            if ($d > time() and $sens == " ASC" or $d < time() and $sens == " DESC ") {
                if ($barMonth != date("m", time())) {
                    $barMonth = date("m", time());
                    $eventlist .= "<tr>";
                    // current month
                    $eventlist .= "<td colspan='2' class='monthLabel'>" . $langCalendar . "&nbsp;<b>" . ucfirst(claro_format_locale_date("%B %Y", time())) . "</b></td>";
                    $eventlist .= "</tr>";
                }
                $nowBarShowed = TRUE;
                $eventlist .= "<tr>";
                $eventlist .= "<td colspan='2' class='today'>{$langDateNow} {$dateNow}</td>";
                $eventlist .= "</tr>";
            }
        }
        if ($barMonth != date("m", $d)) {
            $barMonth = date("m", $d);
            // month LABEL
            $eventlist .= "<tr>";
            $eventlist .= "<td colspan='2' class='monthLabel'>";
            $eventlist .= "<div align='center'>" . $langCalendar . "&nbsp;<b>" . ucfirst(claro_format_locale_date("%B %Y", $d)) . "</b></div></td>";
            $eventlist .= "</tr>";
        }
        $classvis = '';
        if ($is_editor) {
            if ($myrow->visible == 0) {
                $classvis = 'class = "not_visible"';
            }
        }
        $eventlist .= "<tr {$classvis}>";
        if ($is_editor) {
            $eventlist .= "<td>";
        } else {
            $eventlist .= "<td colspan='2'>";
        }
        $eventlist .= "<span class='day'>" . ucfirst(claro_format_locale_date($dateFormatLong, $d)) . "</span> ({$langHour}: " . ucfirst(date('H:i', $d)) . ")";
        if ($myrow->duration != '') {
            if ($myrow->duration == 1) {
                $message = $langHour;
            } else {
                $message = $langHours;
            }
            $msg = "({$langDuration}: " . q($myrow->duration) . " {$message})";
        } else {
            $msg = '';
        }
        $eventlist .= "<br><b>";
        if ($myrow->title == '') {
            $eventlist .= $langAgendaNoTitle;
        } else {
            $eventlist .= q($myrow->title);
        }
        $eventlist .= " {$msg} {$content}</b></td>";
        if ($is_editor) {
            $eventlist .= "<td class='option-btn-cell'>";
            $eventlist .= action_button(array(array('title' => $langDelete, 'url' => "?course={$course_code}&amp;id={$myrow->id}&amp;delete=yes", 'icon' => 'fa-times', 'class' => 'delete', 'confirm' => $langConfirmDeleteEvent), array('title' => $langConfirmDeleteRecursive, 'url' => "?course={$course_code}&amp;id={$myrow->id}&amp;delete=yes&amp;rep=yes", 'icon' => 'fa-times-circle-o', 'class' => 'delete', 'confirm' => $langConfirmDeleteRecursiveEvents, 'show' => !(is_null($myrow->recursion_period) || is_null($myrow->recursion_end))), array('title' => $langModify, 'url' => "?course={$course_code}&amp;id={$myrow->id}&amp;edit=true", 'icon' => 'fa-edit'), array('title' => $langVisible, 'url' => "?course={$course_code}&amp;id={$myrow->id}" . ($myrow->visible ? "&amp;mkInvisibl=true" : "&amp;mkVisibl=true"), 'icon' => $myrow->visible ? 'fa-eye-slash' : 'fa-eye')));
            $eventlist .= "</td>";
        }
        $eventlist .= "</tr>";
    }
    $eventlist .= "</table></div>";
    return $eventlist;
}
コード例 #14
0
ファイル: search_incourse.php プロジェクト: nikosv/openeclass
                $class = ($numLine % 2) ? 'odd' : 'even';
                $tool_content .= "
                  <tr class='$class'>
                    <td width='1' valign='top'><img style='padding-top:3px;' src='$themeimg/arrow.png' title='bullet' /></td>
                    <td>";
                $message = $langUnknown;
                if ($agenda->duration != "") {
                    if ($agenda->duration == 1) {
                        $message = $langHour;
                    } else {
                        $message = $langHours;
                    }
                }
                $tool_content .= "<span class=day>" .
                        ucfirst(claro_format_locale_date($dateFormatLong, strtotime($agenda->start))) .
                        "</span> ($langHour: " . ucfirst(date("H:i", strtotime($agenda->start))) . ")<br />"
                        . q($agenda->title) . " (" . $langDuration . ": " . q($agenda->duration) . " $message) " . $agenda->content . "
                    </td>
                  </tr>";
                $numLine++;
            }
            $tool_content .= "</table>";
            $found = true;
        }
    }

    // search in documents
    if ($documents) {
        $documentHits = $idx->searchRaw(DocumentIndexer::buildQuery($_POST));
コード例 #15
0
ファイル: index.php プロジェクト: nikosv/openeclass
    $bottomNote = $noteNumber = count($notelist);

    $tool_content .= "
            <script type='text/javascript' src='../../modules/auth/sorttable.js'></script>
            <div class='table-responsive'>
                <table class='table-default'>";
    if ($noteNumber > 0) {
        $tool_content .= "<tr class='list-header'>";
        $tool_content .= "<th class='text-left'>$langCategoryNotes</th>";
        $tool_content .= "<th class='text-center'>".icon('fa-gears')."</th>";
        $tool_content .= "</tr>";
    }

    foreach ($notelist as $note) {
        $content = standard_text_escape($note->content);
        $note->date_time = claro_format_locale_date($dateFormatLong, strtotime($note->date_time));
        $tool_content .= "<tr><td><b>";
        if (empty($note->title)) {
            $tool_content .= $langNoteNoTitle;
        } else {
            $tool_content .= "<a href='$_SERVER[SCRIPT_NAME]?nid=" . getIndirectReference($note->id)."'>" . q($note->title) . "</a>";
        }
        $tool_content .= "</b><br><small>" . nice_format($note->date_time) . "</small>";
        if (!is_null($note->reference_obj_type)) {
            $tool_content .= "<br><small>$langReferencedObject: " . References::item_link($note->reference_obj_module, $note->reference_obj_type, $note->reference_obj_id, $note->reference_obj_course) . "</small>";
        }

        $tool_content .= standard_text_escape(ellipsize_html($content, 500, "<strong>&nbsp;...<a href='$_SERVER[SCRIPT_NAME]?nid=" . getIndirectReference($note->id)."'> <span class='smaller'>[$langMore]</span></a></strong>"));
        $tool_content .= "</td>";

        $tool_content .= "<td class='option-btn-cell'>" .
コード例 #16
0
    /**
     * @brief display event list
     * @global type $course_code
     * @global type $is_editor
     * @global type $langEvents
     * @global type $langCalendar
     * @global type $langDateNow
     * @global type $dateFormatLong
     * @global type $langHour
     * @global type $langHours
     * @global type $langDuration
     * @global type $langAgendaNoTitle
     * @global type $langDelete
     * @global type $langConfirmDeleteEvent
     * @global type $langConfirmDeleteRecursive
     * @global type $langConfirmDeleteRecursiveEvents
     * @global type $langModify
     * @global type $langVisible
     * @param type $events
     * @param type $sens
     * @return string
     */
    function event_list($events, $sens, $type = '') {
        global $course_code, $is_editor, $langDateNow, $dateFormatLong,
                $langHour, $langHours, $langDuration, $langAgendaNoTitle, $langDelete,
                $langConfirmDeleteEvent, $langConfirmDeleteRecursive, $langConfirmDeleteRecursiveEvents,
                $langEditChange, $langViewHide, $langViewShow, $id, $is_admin;

        $dateNow = date("j-n-Y / H:i", time());
        $barMonth = '';
        $nowBarShowed = false;
        $eventlist = "<div class='table-responsive'><table class='table-default'>";
        foreach ($events as $myrow) {
            $content = standard_text_escape($myrow->content);
            $d = strtotime($myrow->start);
            if (!$nowBarShowed) {
                // Following order
                if ((($d > time()) and ($sens == " ASC")) or ( ($d < time()) and ( $sens == " DESC "))) {
                    if ($barMonth != date("m", time())) {
                        $barMonth = date("m", time());
                        $eventlist .= "<tr>";
                        // current month
                        $eventlist .= "<td colspan='2' class='monthLabel list-header'><b>" . ucfirst(claro_format_locale_date("%B %Y", time())) . "</b></td>";
                        $eventlist .= "</tr>";
                    }
                    $nowBarShowed = TRUE;
                    $eventlist .= "<tr>";
                    $eventlist .= "<td colspan='2' class='today'>$langDateNow $dateNow</td>";
                    $eventlist .= "</tr>";
                }
            }
            if ($barMonth != date("m", $d)) {
                $barMonth = date("m", $d);
                // month LABEL
                $eventlist .= "<tr>";
                $eventlist .= "<td colspan='2' class='monthLabel list-header'>";
                $eventlist .= "<div align='center'><b>" . ucfirst(claro_format_locale_date("%B %Y", $d)) . "</b></div></td>";
                $eventlist .= "</tr>";
            }

            $classvis = '';
            if ($is_editor) {
                if ($myrow->visible == 0) {
                    $classvis = 'class = "not_visible"';
                }
            }
            $eventlist .= "<tr $classvis>";
            if ($is_editor or $type == 'personal' or ($is_admin and $type == 'admin')) {
                $eventlist .= "<td style='padding:15px;'>";
            } else {
                $eventlist .= "<td style='padding:15px;' colspan='2'>";
            }
            if (($myrow->duration != '0:00') and ($myrow->duration != '')) {
                if ($myrow->duration == 1) {
                    $message = $langHour;
                } else {
                    $message = $langHours;
                }
                $msg = "($langDuration: " . q($myrow->duration) . " $message)";
            } else {
                $msg = '';
            }
            if ($myrow->title == '') {
                $eventlist .= "<a href='$_SERVER[PHP_SELF]?course=$course_code&amp;id=$myrow->id'>$langAgendaNoTitle</a>";
            } else {
                $eventlist .= "<strong><a href='$_SERVER[PHP_SELF]?course=$course_code&amp;id=$myrow->id'>".q($myrow->title)."</a></strong> &nbsp;&nbsp;$msg";
            }

            $eventlist .= "<div><span class='day'>" . ucfirst(claro_format_locale_date($dateFormatLong, $d)) . "</span> ($langHour: " . ucfirst(date('H:i', $d)) . ")</div>";
            if (isset($id)) {
                $eventlist .= "<br>";
                $eventlist .= "<div class='text-muted'>$content</div>";
            }
            $eventlist .= "</td>";
            if ($type == 'admin' and $is_admin == true) {
               $eventlist .= "<td class='option-btn-cell'>";
               $eventlist .= action_button(array(
                        array('title' => $langEditChange,
                             'url' => "?admin=1&amp;modify=$myrow->id",
                             'icon' => 'fa-edit'),
                        array('title' => $langConfirmDeleteRecursive,
                                   'url' => "?delete=$myrow->id&et=admin&amp;rep=yes",
                                   'icon' => 'fa-times-circle-o',
                                   'class' => 'delete',
                                   'confirm' => $langConfirmDeleteRecursiveEvents,
                                   'show' => !(is_null($myrow->recursion_period) || is_null($myrow->recursion_end))),
                        array('title' => $langDelete,
                              'url' => "?delete=$myrow->id&et=admin",
                              'icon' => 'fa-times',
                              'class' => 'delete',
                              'confirm' => $langConfirmDeleteEvent)
                   ));
              $eventlist .= "</td>";
            } else {
               if ($is_editor) {
                    $eventlist .= "<td class='option-btn-cell'>";
                    $eventlist .= action_button(array(
                        array('title' => $langEditChange,
                             'url' => "?course=$course_code&amp;id=$myrow->id&amp;edit=true",
                             'icon' => 'fa-edit'),
                        array('title' => $myrow->visible ?   $langViewHide : $langViewShow,
                             'url' => "?course=$course_code&amp;id=$myrow->id" . ($myrow->visible? "&amp;mkInvisibl=true" : "&amp;mkVisibl=true"),
                             'icon' => $myrow->visible ? 'fa-eye-slash' : 'fa-eye'),
                       array('title' => $langDelete,
                             'url' => "?course=$course_code&amp;id=$myrow->id&amp;delete=yes",
                             'icon' => 'fa-times',
                             'class' => 'delete',
                             'confirm' => $langConfirmDeleteEvent),
                       array('title' => $langConfirmDeleteRecursive,
                             'url' => "?course=$course_code&amp;id=$myrow->id&amp;delete=yes&amp;rep=yes",
                             'icon' => 'fa-times-circle-o',
                             'class' => 'delete',
                             'confirm' => $langConfirmDeleteRecursiveEvents,
                             'show' => !(is_null($myrow->recursion_period) || is_null($myrow->recursion_end)))
                   ));
                    $eventlist .= "</td>";
                } elseif ($type == 'personal') { // personal or admin event
                    $eventlist .= "<td class='option-btn-cell'>";
                    $eventlist .= action_button(array(
                            array('title' => $langEditChange,
                                  'url' => "?modify=$myrow->id",
                                  'icon' => 'fa-edit'),
                            array('title' => $langDelete,
                                  'url' => "?delete=$myrow->id&et=$type",
                                  'icon' => 'fa-times',
                                  'class' => 'delete',
                                  'confirm' => $langConfirmDeleteEvent),
                            array('title' => $langConfirmDeleteRecursive,
                                  'url' => "?delete=$myrow->id&et=$type&amp;rep=yes",
                                  'icon' => 'fa-times-circle-o',
                                  'class' => 'delete',
                                  'confirm' => $langConfirmDeleteRecursiveEvents,
                                  'show' => !(is_null($myrow->recursion_period) || is_null($myrow->recursion_end))),
                        ));
                   $eventlist .= "</td>";
                }
           }
           $eventlist .= "</tr>";
       }
       $eventlist .= "</table></div>";
       return $eventlist;
   }
コード例 #17
0
 /**
  * A function to generate day view of a set of events
  * @param array $day day to show
  * @param integer $month month to show
  * @param integer $year year to show
  * @param array $weekdaynames
  * @return object with `count` attribute containing the number of associated events with the item
  */
 public static function day_calendar($day, $month, $year)
 {
     global $langEvents, $langActions, $langCalendar, $langDateNow, $is_editor, $dateFormatLong, $langNoEvents, $langDay, $langWeek, $langMonth, $langView;
     $calendar_content = "";
     if (is_null($day)) {
         $day = 1;
     }
     $nextdaydate = new DateTime("{$year}-{$month}-{$day}");
     $nextdaydate->add(new DateInterval('P1D'));
     $previousdaydate = new DateTime("{$year}-{$month}-{$day}");
     $previousdaydate->sub(new DateInterval('P1D'));
     $thisday = new DateTime("{$year}-{$month}-{$day}");
     $daydescription = ucfirst(claro_format_locale_date($dateFormatLong, $thisday->getTimestamp()));
     $backward = array('day' => $previousdaydate->format('d'), 'month' => $previousdaydate->format('m'), 'year' => $previousdaydate->format('Y'));
     $foreward = array('day' => $nextdaydate->format('d'), 'month' => $nextdaydate->format('m'), 'year' => $nextdaydate->format('Y'));
     $calendar_content .= '<div class="right" style="width:100%">' . $langView . ':&nbsp;' . '<a href="#" onclick="show_day(selectedday, selectedmonth, selectedyear);return false;">' . $langDay . '</a>&nbsp;|&nbsp;' . '<a href="#" onclick="show_week(selectedday, selectedmonth, selectedyear);return false;">' . $langWeek . '</a>&nbsp;|&nbsp;' . '<a href="#" onclick="show_month(selectedday, selectedmonth, selectedyear);return false;">' . $langMonth . '</a></div>';
     $calendar_content .= "<table class='table-default'>";
     $calendar_content .= "<tr>";
     $calendar_content .= '<td width="25"><a href="#" onclick="show_day(' . $backward['day'] . ',' . $backward['month'] . ',' . $backward['year'] . '); return false;">&laquo;</a></td>';
     $calendar_content .= "<td class='center'><b>{$daydescription}</b></td>";
     $calendar_content .= '<td width="25" class="right"><a href="#" onclick="show_day(' . $foreward['day'] . ',' . $foreward['month'] . ',' . $foreward['year'] . '); return false;">&raquo;</a></td>';
     $calendar_content .= "</tr>";
     $calendar_content .= "</table>";
     $eventlist = Calendar_Events::get_calendar_events("day", "{$year}-{$month}-{$day}");
     $calendar_content .= "<table width='100%' class='tbl_alt'>";
     $curhour = 0;
     $now = getdate();
     $today = new DateTime($now['year'] . '-' . $now['mon'] . '-' . $now['mday'] . ' ' . $now['hours'] . ':' . $now['minutes']);
     if ($now['year'] . '-' . $now['mon'] . '-' . $now['mday'] == "{$year}-{$month}-{$day}") {
         $thisdayistoday = true;
     } else {
         $thisdayistoday = false;
     }
     $thishour = new DateTime($today->format('Y-m-d H:00'));
     $cursorhour = new DateTime("{$year}-{$month}-{$day} 00:00");
     $curstarthour = "";
     foreach ($eventlist as $thisevent) {
         $thiseventstart = new DateTime($thisevent->start);
         $thiseventhour = new DateTime($thiseventstart->format('Y-m-d H:00'));
         if ($curstarthour != $thiseventhour) {
             //event date changed
             while ($cursorhour < $thiseventhour) {
                 if ($thisdayistoday && $thishour >= $cursorhour && intval($cursorhour->diff($thishour, true)->format('%h')) < 6) {
                     $class = 'today';
                 } else {
                     $class = 'monthLabel';
                 }
                 $calendar_content .= "<tr><td colspan='3' class='{$class}'>" . "&nbsp;<b>" . ucfirst($cursorhour->format('H:i')) . "</b></td></tr>";
                 if (intval($cursorhour->diff($thiseventhour, true)->format('%h')) > 6) {
                     $calendar_content .= "<tr><td colspan='3'>{$langNoEvents}</td></tr>";
                 }
                 $cursorhour->add(new DateInterval('PT6H'));
                 $curhour += 6;
             }
             if ($thisdayistoday && $thishour >= $cursorhour && intval($cursorhour->diff($thishour, true)->format('%h')) < 6) {
                 $class = 'today';
             } else {
                 $class = 'monthLabel';
             }
             //No hour tr for the event
             //$calendar_content .= "<tr><td colspan='3' class='$class'>" . "&nbsp;<b>" . ucfirst($thiseventhour->format('H:i')) . "</b></td></tr>";
             if ($cursorhour <= $thiseventhour) {
                 $cursorhour->add(new DateInterval('PT6H'));
                 $curhour += 6;
             }
         }
         $calendar_content .= Calendar_Events::day_calendar_item($thisevent, 'even');
         $curstarthour = $thiseventhour;
         //$numLine++;
     }
     /* Fill with empty days*/
     for ($i = $curhour; $i < 24; $i += 6) {
         if ($thisdayistoday && $thishour >= $cursorhour && intval($cursorhour->diff($thishour, true)->format('%h')) < 6) {
             $class = 'today';
         } else {
             $class = 'monthLabel';
         }
         $calendar_content .= "<tr><td colspan='3' class='{$class}'>" . "&nbsp;<b>" . ucfirst($cursorhour->format('H:i')) . "</b></td></tr>";
         $calendar_content .= "<tr><td colspan='3'>{$langNoEvents}</td></tr>";
         $cursorhour->add(new DateInterval('PT6H'));
     }
     $calendar_content .= "</table>";
     /* Legend */
     $calendar_content .= Calendar_Events::calendar_legend();
     return $calendar_content;
 }
コード例 #18
0
ファイル: course_home.php プロジェクト: nikosv/openeclass
/**
 * @brief fetch course announcements
 * @global type $course_id
 * @global type $course_code
 * @global type $langNoAnnounce
 * @global type $urlAppend
 * @global type $dateFormatLong
 * @return string
 */
function course_announcements() {
    global $course_id, $course_code, $langNoAnnounce, $urlAppend, $dateFormatLong;

    if (visible_module(MODULE_ID_ANNOUNCE)) {
        $q = Database::get()->queryArray("SELECT title, `date`, id
                            FROM announcement
                            WHERE course_id = ?d AND
                                  visible = 1
                            ORDER BY `date` DESC LIMIT 5", $course_id);
        if ($q) { // if announcements exist
            $ann_content = '';
            foreach ($q as $ann) {
                $ann_url = $urlAppend . "modules/announcements/?course=$course_code&amp;an_id=" . $ann->id;
                $ann_date = claro_format_locale_date($dateFormatLong, strtotime($ann->date));
                $ann_content .= "<li class='list-item'>
                                    <span class='item-wholeline'><div class='text-title'><a href='$ann_url'>" . q(ellipsize($ann->title, 60)) ."</a></div>$ann_date</span>
                                </li>";
            }
            return $ann_content;
        }
    }
    return "<li class='list-item'><span class='item-wholeline'><div class='text-title not_visible'> - $langNoAnnounce - </div></span></li>";
}