public function __construct($userId = null, $courseId = null, $database = null) { $this->userId = $userId ? $userId : claro_get_current_user_id(); $this->courseId = $courseId ? $courseId : claro_get_current_course_id(); $this->database = $database ? $database : Claroline::getDatabase(); $this->tbl = array_merge(get_module_main_tbl(array('rel_course_user')), get_module_course_tbl(array('group_team', 'group_rel_team_user'))); }
public function __construct($assignement, $courseId = null, $database = null) { $this->database = $database ? $database : Claroline::getDatabase(); $this->assignement = $assignement; $this->courseId = $courseId ? $courseId : claro_get_current_course_id(); $this->tbl = array_merge(get_module_main_tbl(array('rel_course_user', 'user')), get_module_course_tbl(array('wrk_submission', 'group_team'), $this->courseId)); $this->submissionTitleList = array(); }
protected function loadNumberOfUser() { $tableName = get_module_main_tbl(array('user')); if (!is_null($this->getSelector())) { $where = $this->getSelector()->getStrategy(); } else { $where = ""; } $sql = "SELECT count(*)" . " FROM `" . $tableName['user'] . "`" . " " . $where; $this->numberOfUser = claro_sql_query_fetch_single_value($sql); }
protected function loadNumberOfMessage() { if (!$this->numberOfMessage) { if (!is_null($this->messageFilter)) { $strategy = $this->messageFilter->getStrategy(); } else { $strategy = ""; } $tableName = get_module_main_tbl(array('im_message')); $readSQL = "SELECT count(*) \n" . "FROM `" . $tableName['im_message'] . "` AS M \n" . "WHERE M.sender = " . (int) $this->userId . "\n" . " " . $strategy; $this->numberOfMessage = claro_sql_query_fetch_single_value($readSQL); } }
/** * load the current message from the data base */ public function load() { $tableName = get_module_main_tbl(array('im_message', 'im_message_status', 'user', 'im_recipient')); $messageSQL = "SELECT U.nom AS lastName, U.prenom AS firstName, M.message_id, M.sender, M.subject, \n" . "M.message, M.send_time, R.is_read, R.is_deleted, R.user_id , M.course, M.group, M.tools, \n" . "RE.sent_to" . " FROM `" . $tableName['im_message'] . "` as M \n" . " LEFT JOIN `" . $tableName['im_message_status'] . "` as R ON M.message_id = R.message_id\n" . " LEFT JOIN `" . $tableName['user'] . "` AS U ON M.sender = U.user_id\n" . " LEFT JOIN `" . $tableName['im_recipient'] . "` AS RE ON M.message_id = RE.message_id\n" . " WHERE R.user_id = " . (int) $this->userId . "\n" . " AND M.message_id = " . (int) $this->messageId . "\n"; $this->setFromArray(claro_sql_query_fetch_single_row($messageSQL)); }
/** * Get the list of users in the group * @return Database_ResultSet group members */ public function getGroupMembers() { if (!$this->_userList) { $mainTableName = get_module_main_tbl(array('user', 'rel_course_user')); $courseTableName = get_module_course_tbl(array('group_rel_team_user'), $this->_courseObj->courseId); $sql = "\n SELECT\n `user`.`user_id` AS `id`,\n `user`.`nom` AS `lastName`,\n `user`.`prenom` AS `firstName`,\n `user`.`email`\n FROM\n `{$mainTableName['user']}` AS `user`\n INNER JOIN\n `{$courseTableName['group_rel_team_user']}` AS `user_group`\n ON\n `user`.`user_id` = `user_group`.`user`\n INNER JOIN\n `{$mainTableName['rel_course_user']}` AS `course_user`\n ON\n `user`.`user_id` = `course_user`.`user_id`\n WHERE\n `user_group`.`team`= {$this->_groupId}\n AND\n `course_user`.`code_cours` = '{$this->_courseObj->sysCode}'"; $this->_userList = Claroline::getDatabase()->query($sql); } return $this->_userList; }
/** * * @param Claro_Class $class * @param Database_Connection $database */ public function __construct($class, $database = null) { $this->class = $class; $this->database = $database ? $database : Claroline::getDatabase(); $this->userIdList = false; $this->tbl = get_module_main_tbl(array('rel_class_user')); }
/** * Send the message to member of user list * * @param array of userId $recipientListID list of user identification * @param int $messageId message identification */ private final function sendMessageToUser($recipientListId, $messageId) { $tableName = get_module_main_tbl(array('im_message_status')); //send a message to each user foreach ($recipientListId as $currentRecipient) { $addInternalMessageSQL = "INSERT INTO `" . $tableName['im_message_status'] . "` " . "(user_id, message_id, is_read, is_deleted) \n" . "values (" . (int) $currentRecipient . "," . (int) $messageId . ",0 , 0)\n"; if (!claro_sql_query($addInternalMessageSQL)) { throw new Exception(claro_sql_errno() . ":" . claro_sql_error()); } $this->addRecipient($messageId, $currentRecipient); } }
/** * * @param Claro_Course $course * @param mixed $database Database_Connection instance or null, if null, the default database connection will be used */ public function __construct($course, $database = null, $result = null) { $this->course = $course; $this->database = $database ? $database : Claroline::getDatabase(); $this->tableNames = get_module_main_tbl(array('rel_course_user')); $this->tableNames = array_merge($this->tableNames, get_module_course_tbl(array('bb_rel_topic_userstonotify', 'group_team', 'userinfo_content', 'group_rel_team_user', 'tracking_event'), $this->course->courseId)); $this->result = $result ? $result : new Claro_BatchRegistrationResult(); }
/** * return true if the current message is a platform message, * false if this is not a platform message * * @return boolean true if the current message is a platform message * false if the current message is not a platform message */ public function isPlatformMessage() { $tableName = get_module_main_tbl(array('im_recipient')); $sql = "SELECT DISTINCT sent_to \n" . " FROM `" . $tableName['im_recipient'] . "` \n" . " WHERE message_id = " . $this->getId(); $sentto = claro_sql_query_fetch_single_value($sql); if ($sentto == 'toAll') { return true; } else { return false; } }
*/ $tlabelReq = 'MOBILE'; require dirname(__FILE__) . '/../../claroline/inc/claro_init_global.inc.php'; if (!get_conf('activeWebService', true)) { header('Service Unavailable', true, 503); die; } if (!isset($_REQUEST['token']) || empty($_REQUEST['token'])) { header('Missing Argument', true, 400); die; } elseif (strlen($_REQUEST['token']) != 30) { header('Invalid Argument', true, 400); die; } $token = $_REQUEST['token']; $tableName = get_module_main_tbl(array('mobile_tokens')); $tableName = $tableName['mobile_tokens']; $sql = 'SELECT * FROM `' . $tableName . '` WHERE token = \'' . claro_sql_escape($token) . '\' AND ADDTIME(`requestTime`,\'0 0:0:30\') > NOW()'; $result = Claroline::getDatabase()->query($sql); if (!$result->isEmpty()) { $row = $result->fetch(); $pathInfo = $row['requestedPath']; $uid = $row['userId']; $canRetry = $row['canRetry']; $wasFolder = $row['wasFolder']; $extension = get_file_extension($pathInfo); $mimeType = get_mime_on_ext($pathInfo); if ($canRetry) { $sql = 'UPDATE `' . $tableName . '` SET `canRetry` = \'0\' WHERE token = \'' . claro_sql_escape($token) . '\''; Claroline::getDatabase()->exec($sql); }
protected function mergeCourseMessaging($uidToRemove, $uidToKeep, $thisCourseCode) { // update messaging $tableName = get_module_main_tbl(array('im_message', 'im_message_status', 'im_recipient')); $getUserMessagesInCourse = "SELECT M.message_id AS id" . " FROM `" . $tableName['im_message'] . "` as M\n" . " LEFT JOIN `" . $tableName['im_recipient'] . "` as R ON M.message_id = R.message_id\n" . " WHERE R.user_id = " . (int) $uidToKeep . " AND M.course = '" . claro_sql_escape($thisCourseCode) . "'"; $userToKeepMsgList = claro_sql_query_fetch_all($getUserMessagesInCourse); if (!empty($userToKeepMsgList)) { $messageListToRemoveArr = array(); foreach ($userToKeepMsgList as $message) { $messageListToRemoveArr[] = (int) $message['id']; } $messageListToRemove = implode(',', $messageListToRemoveArr); // Remove the user to remove from the course $sql = "DELETE FROM `{$tableName['im_recipient']}`\n WHERE user_id = " . (int) $uidToRemove . "\n AND message_id IN ({$messageListToRemove})"; if (!claro_sql_query($sql)) { Console::error("Cannot delete duplicate im_recipient for -{$uidToRemove} in {$thisCourseCode}"); $this->hasError = true; } $sql = "DELETE FROM `{$tableName['im_message_status']}`\n WHERE user_id = " . (int) $uidToRemove . "\n AND message_id IN ({$messageListToRemove})"; if (!claro_sql_query($sql)) { Console::error("Cannot delete duplicate im_message_status for -{$uidToRemove} in {$thisCourseCode}"); $this->hasError = true; } } $getUserMessagesInCourse = "SELECT M.message_id AS id" . " FROM `" . $tableName['im_message'] . "` as M\n" . " LEFT JOIN `" . $tableName['im_recipient'] . "` as R ON M.message_id = R.message_id\n" . " WHERE R.user_id = " . (int) $uidToRemove . " AND M.course = '" . claro_sql_escape($thisCourseCode) . "'"; $userToKeepMsgList = claro_sql_query_fetch_all($getUserMessagesInCourse); if (!empty($userToKeepMsgList)) { $messageListToUpdateArr = array(); foreach ($userToKeepMsgList as $message) { $messageListToUpdateArr[] = (int) $message['id']; } $messageListToUpdate = implode(',', $messageListToUpdateArr); // Replace the user id of the user to remove $sql = "UPDATE `{$tableName['im_recipient']}`\n SET user_id = " . (int) $uidToKeep . "\n WHERE user_id = " . (int) $uidToRemove . "\n AND message_id IN ({$messageListToUpdate})"; if (!claro_sql_query($sql)) { Console::error("Cannot change im_recipient from -{$uidToRemove} to +{$uidToKeep} in {$thisCourseCode}"); $this->hasError = true; } $sql = "UPDATE `{$tableName['im_message_status']}`\n SET user_id = " . (int) $uidToKeep . "\n WHERE user_id = " . (int) $uidToRemove . "\n AND message_id IN ({$messageListToUpdate})"; if (!claro_sql_query($sql)) { Console::error("Cannot change im_message_status from -{$uidToRemove} to +{$uidToKeep} in {$thisCourseCode}"); $this->hasError = true; } } }
function can_answer_message($messageId) { $tableName = get_module_main_tbl(array('im_message_status')); $select = "SELECT count(*)\n" . " FROM `" . $tableName['im_message_status'] . "` as M\n" . " WHERE (M.user_id = " . (int) claro_get_current_user_id() . " OR M.user_id = 0)\n" . " AND M.message_id = " . (int) $messageId; $nbMessage = claro_sql_query_fetch_single_value($select); return $nbMessage > 0 ? true : false; }
/** * empty the trashbox * */ public function empyTrashBox() { $tableName = get_module_main_tbl(array('im_message_status')); $sql = "DELETE FROM `" . $tableName['im_message_status'] . "`\n" . " WHERE is_deleted = 1\n" . " AND user_id = " . (int) $this->getUserId() . "\n"; claro_sql_query($sql); }
/** * Return all manager id of a course. * * @param String course id * @return Array array of int */ function claro_get_course_manager_id($cid = NULL) { if (is_null($cid)) { if (!claro_is_in_a_course()) { return false; } $cid = claro_get_current_course_id(); } $tableName = get_module_main_tbl(array('rel_course_user')); $sql = "SELECT user_id " . "FROM `" . $tableName['rel_course_user'] . "` " . "WHERE code_cours='" . claro_sql_escape($cid) . "' " . "AND isCourseManager = 1"; $result = claro_sql_query_fetch_all_cols($sql); return $result['user_id']; }
/** * return true if the user in parameter is manager of the course in 2nd parameters * * @param int $userId user id * @param string $courseCode syscode du cours * @return boolean true if the user is manager of the course * false if the user is not manager of the course */ function claro_is_user_course_manager($userId, $courseCode) { $tableName = get_module_main_tbl(array('rel_course_user')); $sql = "SELECT count(*)" . " FROM `" . $tableName['rel_course_user'] . "`" . " WHERE code_cours = '" . claro_sql_escape($courseCode) . "'" . " AND user_id = " . (int) $userId . " AND isCourseManager = 1"; return claro_sql_query_fetch_single_value($sql) > 0; }
public function __construct($config = array()) { $tableNames = get_module_main_tbl(array('oauth_clients', 'oauth_access_tokens', 'oauth_refresh_tokens', 'oauth_authorization_codes', 'oauth_jwt', 'oauth_scopes', 'oauth_public_keys')); $this->config = array_merge(array('client_table' => $tableNames['oauth_clients'], 'access_token_table' => $tableNames['oauth_access_tokens'], 'refresh_token_table' => $tableNames['oauth_refresh_tokens'], 'code_table' => $tableNames['oauth_authorization_codes'], 'jwt_table' => $tableNames['oauth_jwt'], 'scope_table' => $tableNames['oauth_scopes'], 'public_key_table' => $tableNames['oauth_public_keys']), $config); }
public function __construct() { // convert to Claroline course table names $tbl_lp_names = get_module_main_tbl(array('desktop_portlet')); $this->tblDesktopPortlet = $tbl_lp_names['desktop_portlet']; }
function getSingleResource($args) { $tlabelReq = 'MOBILE'; $thisFile = isset($args['resID']) ? $args['resID'] : null; $cid = claro_get_current_course_id(); if (is_null($cid) || is_null($thisFile)) { throw new InvalidArgumentException('Missing cid or resourceId argument!'); } if (claro_is_course_allowed()) { /* INITIALISATION = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ $tableName = get_module_main_tbl(array('mobile_tokens')); $tableName = $tableName['mobile_tokens']; $limit = 5; $baseWorkDir = get_path('coursesRepositorySys') . claro_get_course_path($cid) . '/document'; if (is_dir($baseWorkDir . $thisFile) || is_file($baseWorkDir . $thisFile)) { if (is_dir($baseWorkDir . $thisFile)) { if ($is_allowedToEdit || get_conf('cldoc_allowNonManagersToDownloadFolder', true) || get_conf('cldoc_allowNonManagersToDownloadFolder', true) && get_conf('cldoc_allowAnonymousToDownloadFolder', true)) { /* * PREPARE THE FILE COLLECTION */ if (!$is_allowedToEdit) { // Build an exclude file list to prevent simple user // to see document contained in "invisible" directories $searchExcludeList = getInvisibleDocumentList($baseWorkDir); } else { $searchExcludeList = array(); } $filePathList = claro_search_file(search_string_to_pcre(''), $baseWorkDir . $thisFile, true, 'FILE', $searchExcludeList); /* * BUILD THE ZIP ARCHIVE */ require_once get_path('incRepositorySys') . '/lib/thirdparty/pclzip/pclzip.lib.php'; // Build archive in tmp course folder $downloadArchivePath = get_conf('cldoc_customTmpPath', ''); if (empty($downloadArchivePath)) { $downloadArchivePath = get_path('coursesRepositorySys') . claro_get_course_path() . '/tmp/zip'; $downloadArchiveFile = $downloadArchivePath . '/' . uniqid('') . '.zip'; } else { $downloadArchiveFile = rtrim($downloadArchivePath, '/') . '/' . claro_get_current_course_id() . '_CLDOC_' . uniqid('') . '.zip'; } if (!is_dir($downloadArchivePath)) { mkdir($downloadArchivePath, CLARO_FILE_PERMISSIONS, true); } $downloadArchive = new PclZip($downloadArchiveFile); $downloadArchive->add($filePathList, PCLZIP_OPT_REMOVE_PATH, $baseWorkDir . $thisFile); if (file_exists($downloadArchiveFile)) { $pathInfo = $downloadArchiveFile; } else { throw new RuntimeException('Internal Server Error', 500); } } else { throw new RuntimeException('Not allowed', 403); } } elseif (is_file($baseWorkDir . $thisFile)) { require_once get_path('incRepositorySys') . '/lib/file/downloader.lib.php'; Claroline::getInstance()->notification->addListener('download', 'trackInCourse'); $connectorPath = secure_file_path(get_module_path($tlabelReq) . '/connector/downloader.cnr.php'); require_once $connectorPath; $className = $tlabelReq . '_Downloader'; $downloader = new $className($tlabelReq, $cid, claro_get_current_user_id()); if ($downloader && $downloader->isAllowedToDownload($thisFile)) { $pathInfo = $downloader->getFilePath($thisFile); $pathInfo = secure_file_path($pathInfo); // Check if path exists in course folder if (!file_exists($pathInfo) || is_dir($pathInfo)) { throw new RuntimeException('Resource not found', 404); } } else { throw new RuntimeException('Not allowed', 403); } } for ($result = $try = 0; $try < $limit && $result < 1; $try++) { /* Create token and register into the db. Retry until the registration complete or fail $limit times. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ $token = bin2hex(openssl_random_pseudo_bytes(15)); $sql = 'REPLACE INTO `' . $tableName . '` (`userId`, `token`, `requestedPath`, `requestTime`, `wasFolder`, `canRetry`) ' . 'VALUES (\'' . claro_get_current_user_id() . '\', \'' . $token . '\', \'' . claro_sql_escape($pathInfo) . '\', NOW(), \'' . (is_dir($baseWorkDir . $thisFile) ? 1 : 0) . '\' , \'' . (isset($args['platform']) && $args['platform'] == 'WP' ? 1 : 0) . '\');'; $result = Claroline::getDatabase()->exec($sql); } $response['token'] = $try == $limit ? null : $token; return $response; } else { throw new RuntimeException('Resource not found', 404); } } else { throw new RuntimeException('Not allowed', 403); } }
/** * add a user in the table of recipient * * @param int $messageId message id * @param int $userId user id (recipient id) */ protected function addRecipient($messageId, $userId) { $tableName = get_module_main_tbl(array('im_recipient')); $sql = "INSERT INTO `" . $tableName['im_recipient'] . "` " . "(message_id, user_id, sent_to) \n" . "VALUES (" . (int) $messageId . ", " . (int) $userId . ", 'toAll')\n"; claro_sql_query($sql); }
/** * return list of user of the group id * * @param int $gid groupe identification * @return array of int: list of user */ function get_group_user_list($gid, $courseId = NULL) { $mainTableName = get_module_main_tbl(array('user', 'rel_course_user')); $courseTableName = get_module_course_tbl(array('group_rel_team_user'), $courseId); $sql = "SELECT `user`.`user_id` AS `id`, `user`.`nom` AS `lastName`, `user`.`prenom` AS `firstName`, `user`.`email`\n FROM `" . $mainTableName['user'] . "` AS `user`\n INNER JOIN `" . $courseTableName['group_rel_team_user'] . "` AS `user_group`\n ON `user`.`user_id` = `user_group`.`user`\n INNER JOIN `" . $mainTableName['rel_course_user'] . "`AS `course_user`\n ON `user`.`user_id` = `course_user`.`user_id`\n WHERE `user_group`.`team`= '" . $gid . "'\n AND `course_user`.`code_cours` = '" . $courseId . "'"; return claro_sql_query_fetch_all($sql); }
/** * delete all message of the list in parameter * * @param array of int $messageIdList array of message_id */ public function deleteMessageList($messageIdList) { $tableName = get_module_main_tbl(array('im_message_status', 'im_recipient', 'im_message')); $messageIdList = array_map('intval', $messageIdList); $messageIdString = implode(',', $messageIdList); // delete completely all message of the list if ($messageIdString != "") { // delete status message (remove from received messagebox) $sql = "DELETE FROM `" . $tableName['im_message_status'] . "`\n" . "WHERE message_id IN(" . $messageIdString . ")"; claro_sql_query($sql); // remove all recipient $sql = "DELETE FROM `" . $tableName['im_recipient'] . "`\n" . "WHERE message_id IN(" . $messageIdString . ")"; claro_sql_query($sql); // remove from outbox $sql = "DELETE FROM `" . $tableName['im_message'] . "`\n" . "WHERE message_id IN(" . $messageIdString . ")"; claro_sql_query($sql); } }
public function delete() { $tableName = get_module_main_tbl(array('im_message_status', 'im_recipient', 'im_message')); // delete status message (remove from receaved messagebox) $sql = "DELETE FROM `" . $tableName['im_message_status'] . "`\n" . "WHERE message_id = " . (int) $this->getId() . "\n"; claro_sql_query($sql); // remove all recipient $sql = "DELETE FROM `" . $tableName['im_recipient'] . "`\n" . "WHERE message_id = " . (int) $this->getId() . "\n"; claro_sql_query($sql); // remove from outbox $sql = "DELETE FROM `" . $tableName['im_message'] . "`\n" . "WHERE message_id = " . (int) $this->getId() . "\n"; claro_sql_query($sql); }