From f872b02789a7592621aa8e3a3964a6459e0cfd57 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 30 Apr 2014 12:36:02 +0200 Subject: [PATCH 1/6] Adding session_id in get_view see BT#7852 --- main/newscorm/learnpath.class.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/main/newscorm/learnpath.class.php b/main/newscorm/learnpath.class.php index 37a9ce3e90..563f7f8e48 100644 --- a/main/newscorm/learnpath.class.php +++ b/main/newscorm/learnpath.class.php @@ -3390,7 +3390,8 @@ class learnpath * @param integer Optional attempt number. If none given, takes the highest from the lp_view table * @return integer DB lp_view id */ - public function get_view($attempt_num = 0) { + public function get_view($attempt_num = 0) + { if ($this->debug > 0) { error_log('New LP - In learnpath::get_view()', 0); } @@ -3403,19 +3404,25 @@ class learnpath $lp_view_table = Database :: get_course_table(TABLE_LP_VIEW); $course_id = api_get_course_int_id(); + $sessionId = api_get_session_id(); $sql = "SELECT id, view_count FROM $lp_view_table - WHERE c_id = ".$course_id." AND lp_id = " . $this->get_id() ." AND user_id = " . $this->get_user_id() . " " .$search . - " ORDER BY view_count DESC"; + WHERE + c_id = " . $course_id . " AND + lp_id = " . $this->get_id() . " AND + user_id = " . $this->get_user_id() . " AND + session_id = $sessionId + $search + ORDER BY view_count DESC"; $res = Database::query($sql); if (Database :: num_rows($res) > 0) { $row = Database :: fetch_array($res); $this->lp_view_id = $row['id']; } else { // There is no database record, create one. - $sql = "INSERT INTO $lp_view_table (c_id, lp_id,user_id,view_count) VALUES - ($course_id, " . $this->get_id() . "," . $this->get_user_id() . ",1)"; - $res = Database::query($sql); + $sql = "INSERT INTO $lp_view_table (c_id, lp_id,user_id, view_count, session_id) VALUES + ($course_id, " . $this->get_id() . "," . $this->get_user_id() . ", 1, $sessionId)"; + Database::query($sql); $id = Database :: insert_id(); $this->lp_view_id = $id; } From a95e560b499afc20f03b2d5f806f8c0ef3c49009 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 30 Apr 2014 14:14:51 +0200 Subject: [PATCH 2/6] Removing constants IS_PHP_* removing PHP < 5.2 support see #7113 Formatting code, fixing typos, removing custom replaces to string functions. --- main/inc/lib/internationalization.lib.php | 653 +++--------------- .../lib/internationalization_internal.lib.php | 91 +-- main/inc/lib/main_api.lib.php | 20 +- 3 files changed, 86 insertions(+), 678 deletions(-) diff --git a/main/inc/lib/internationalization.lib.php b/main/inc/lib/internationalization.lib.php index 0d94d0938e..935191d7d5 100644 --- a/main/inc/lib/internationalization.lib.php +++ b/main/inc/lib/internationalization.lib.php @@ -11,7 +11,6 @@ * @package chamilo.library */ - /** * Constants */ @@ -23,33 +22,40 @@ define('SPECIAL_CLOSING_TAG', '=]'); // Predefined date formats in Chamilo provided by the language sub-system. // To be used as a parameter for the function api_format_date() -define('TIME_NO_SEC_FORMAT', 0); // 15:23 -define('DATE_FORMAT_SHORT', 1); // Aug 25, 09 -define('DATE_FORMAT_LONG', 2); // Monday August 25, 09 -define('DATE_FORMAT_LONG_NO_DAY', 10); // August 25, 2009 -define('DATE_TIME_FORMAT_LONG', 3); // Monday August 25, 2009 at 03:28 PM +define('TIME_NO_SEC_FORMAT', 0); // 15:23 +define('DATE_FORMAT_SHORT', 1); // Aug 25, 09 +define('DATE_FORMAT_LONG', 2); // Monday August 25, 09 +define('DATE_FORMAT_LONG_NO_DAY', 10); // August 25, 2009 +define('DATE_TIME_FORMAT_LONG', 3); // Monday August 25, 2009 at 03:28 PM -define('DATE_FORMAT_NUMBER', 4); // 25.08.09 +define('DATE_FORMAT_NUMBER', 4); // 25.08.09 define('DATE_TIME_FORMAT_LONG_24H', 5); // August 25, 2009 at 15:28 -define('DATE_TIME_FORMAT_SHORT', 6); // Aug 25, 2009 at 03:28 PM -define('DATE_TIME_FORMAT_SHORT_TIME_FIRST', 7); // 03:28 PM, Aug 25 2009 -define('DATE_FORMAT_NUMBER_NO_YEAR', 8); // 25.08 dd-mm -define('DATE_FORMAT_ONLY_DAYNAME', 9); // Monday, Sunday, etc +define('DATE_TIME_FORMAT_SHORT', 6); // Aug 25, 2009 at 03:28 PM +define('DATE_TIME_FORMAT_SHORT_TIME_FIRST', 7); // 03:28 PM, Aug 25 2009 +define('DATE_FORMAT_NUMBER_NO_YEAR', 8); // 25.08 dd-mm +define('DATE_FORMAT_ONLY_DAYNAME', 9); // Monday, Sunday, etc // Formatting person's name. -define('PERSON_NAME_COMMON_CONVENTION', 0); // Formatting a person's name using the pattern as it has been - // configured in the internationalization database for every language. - // This (default) option would be the most used. -// The followind options may be used in limited number of places for overriding the common convention: -define('PERSON_NAME_WESTERN_ORDER', 1); // Formatting a person's name in Western order: first_name last_name -define('PERSON_NAME_EASTERN_ORDER', 2); // Formatting a person's name in Eastern order: last_name first_name -define('PERSON_NAME_LIBRARY_ORDER', 3); // Contextual: formatting person's name in library order: last_name, first_name -define('PERSON_NAME_EMAIL_ADDRESS', PERSON_NAME_WESTERN_ORDER); // Contextual: formatting a person's name assotiated with an email-address. Ivan: I am not sure how seems email servers an clients would interpret name order, so I assign the Western order. -define('PERSON_NAME_DATA_EXPORT', PERSON_NAME_EASTERN_ORDER); // Contextual: formatting a person's name for data-exporting operarions. For backward compatibility this format has been set to Eastern order. - -// The following constants are used for tunning language detection functionality. +// Formatting a person's name using the pattern as it has been +// configured in the internationalization database for every language. +// This (default) option would be the most used. +define('PERSON_NAME_COMMON_CONVENTION', 0); +// The following options may be used in limited number of places for overriding the common convention: + +// Formatting a person's name in Western order: first_name last_name +define('PERSON_NAME_WESTERN_ORDER', 1); +// Formatting a person's name in Eastern order: last_name first_name +define('PERSON_NAME_EASTERN_ORDER', 2); +// Contextual: formatting person's name in library order: last_name, first_name +define('PERSON_NAME_LIBRARY_ORDER', 3); +// Contextual: formatting a person's name assotiated with an email-address. Ivan: I am not sure how seems email servers an clients would interpret name order, so I assign the Western order. +define('PERSON_NAME_EMAIL_ADDRESS', PERSON_NAME_WESTERN_ORDER); +// Contextual: formatting a person's name for data-exporting operations. For backward compatibility this format has been set to Eastern order. +define('PERSON_NAME_DATA_EXPORT', PERSON_NAME_EASTERN_ORDER); + +// The following constants are used for tuning language detection functionality. // We reduce the text for language detection to the given number of characters -// for increaseing speed and to decrease memory consumption. +// for increasing speed and to decrease memory consumption. define ('LANGUAGE_DETECT_MAX_LENGTH', 2000); // Maximum allowed difference in so called delta-points for aborting certain language detection. // The value 80000 is good enough for speed and detection accuracy. @@ -58,15 +64,12 @@ define ('LANGUAGE_DETECT_MAX_LENGTH', 2000); define ('LANGUAGE_DETECT_MAX_DELTA', 140000); /** - * Initialization - */ - -/** - * Initialization of some internal default valies in the internationalization library. + * Initialization of some internal default values in the internationalization library. * @return void * Note: This function should be called only once in the global initialization script. */ -function api_initialize_internationalization() { +function api_initialize_internationalization() +{ if (MBSTRING_INSTALLED) { @ini_set('mbstring.func_overload', 0); @ini_set('mbstring.encoding_translation', 0); @@ -88,6 +91,7 @@ function api_set_internationalization_default_encoding($encoding) { _api_mb_internal_encoding($encoding); _api_mb_regex_encoding($encoding); _api_iconv_set_encoding('iconv_internal_encoding', $encoding); + return $result; } @@ -680,84 +684,84 @@ function api_format_date($time, $format = null, $language = null) { switch ($format) { case DATE_FORMAT_ONLY_DAYNAME: $date_format = get_lang('dateFormatOnlyDayName', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::SHORT; $timetype = IntlDateFormatter::NONE; } break; case DATE_FORMAT_NUMBER_NO_YEAR: $date_format = get_lang('dateFormatShortNumberNoYear', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::SHORT; $timetype = IntlDateFormatter::NONE; } break; case DATE_FORMAT_NUMBER: $date_format = get_lang('dateFormatShortNumber', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::SHORT; $timetype = IntlDateFormatter::NONE; } break; case TIME_NO_SEC_FORMAT: $date_format = get_lang('timeNoSecFormat', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::NONE; $timetype = IntlDateFormatter::SHORT; } break; case DATE_FORMAT_SHORT: $date_format = get_lang('dateFormatShort', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::LONG; $timetype = IntlDateFormatter::NONE; } break; case DATE_FORMAT_LONG: $date_format = get_lang('dateFormatLong', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::NONE; } break; case DATE_TIME_FORMAT_LONG: $date_format = get_lang('dateTimeFormatLong', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; } break; case DATE_FORMAT_LONG_NO_DAY: $date_format = get_lang('dateFormatLongNoDay', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; } break; case DATE_TIME_FORMAT_SHORT: $date_format = get_lang('dateTimeFormatShort', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; } break; case DATE_TIME_FORMAT_SHORT_TIME_FIRST: $date_format = get_lang('dateTimeFormatShortTimeFirst', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; } break; case DATE_TIME_FORMAT_LONG_24H: $date_format = get_lang('dateTimeFormatLong24H', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; } break; default: $date_format = get_lang('dateTimeFormatLong', '', $language); - if (IS_PHP_53 && INTL_INSTALLED) { + if (INTL_INSTALLED) { $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; } @@ -766,7 +770,6 @@ function api_format_date($time, $format = null, $language = null) { $date_format = $format; } - //if (IS_PHP_53 && INTL_INSTALLED && $datetype !== null && $timetype !== null) { if (0) { //if using PHP 5.3 format dates like: $dateFormatShortNumber, can't be used // @@ -774,9 +777,6 @@ function api_format_date($time, $format = null, $language = null) { if (is_null($language)) { $language = api_get_language_isocode(); } - /*$date_formatter = datefmt_create($language, $datetype, $timetype, date_default_timezone_get()); - $formatted_date = api_to_system_encoding(datefmt_format($date_formatter, $time), 'UTF-8');*/ - $date_formatter = new IntlDateFormatter($language, $datetype, $timetype, date_default_timezone_get()); //$date_formatter->setPattern($date_format); $formatted_date = api_to_system_encoding($date_formatter->format($time), 'UTF-8'); @@ -1273,8 +1273,7 @@ function api_to_system_encoding($string, $from_encoding = null, $check_utf8_vali if (api_is_valid_utf8($string)) { return $string; } - } - elseif (api_is_utf8($from_encoding)) { + } elseif (api_is_utf8($from_encoding)) { if (!api_is_valid_utf8($string)) { return $string; } @@ -1315,8 +1314,7 @@ function api_htmlentities($string, $quote_style = ENT_COMPAT, $encoding = null) if (!api_is_utf8($encoding)) { // Just in case. $string = api_utf8_decode($string, $encoding); } - } - elseif (_api_convert_encoding_supports($encoding)) { + } elseif (_api_convert_encoding_supports($encoding)) { if (!api_is_utf8($encoding)) { $string = _api_convert_encoding($string, 'UTF-8', $encoding); } @@ -1330,7 +1328,7 @@ function api_htmlentities($string, $quote_style = ENT_COMPAT, $encoding = null) } /** - * Convers HTML entities into normal characters. + * Converts HTML entities into normal characters. * @param string $string The input string. * @param int $quote_style (optional) The quote style - ENT_COMPAT (default), ENT_QUOTES, ENT_NOQUOTES. * @param string $encoding (optional) The encoding (of the result) used in conversion. If it is omited, the platform character set is assumed. @@ -1355,7 +1353,7 @@ function api_html_entity_decode($string, $quote_style = ENT_COMPAT, $encoding = } return $string; } - return $string; // Here the function guves up. + return $string; // Here the function gives up. } /** @@ -1552,15 +1550,12 @@ function api_transliterate($string, $unknown = '?', $from_encoding = null) { } $ord = $ord & 255; $result .= isset($map[$bank]['en'][$ord]) ? $map[$bank]['en'][$ord] : $unknown; - $head = ''; - } - elseif ($c < "\x80") { + } elseif ($c < "\x80") { // ASCII byte. $result .= $c; $head = ''; - } - elseif ($c < "\xc0") { + } elseif ($c < "\xc0") { // Illegal tail bytes. if ($head == '') { $result .= $unknown; @@ -1744,32 +1739,11 @@ function api_str_split($string, $split_length = 1, $encoding = null) { * @link http://php.net/manual/en/function.mb-stripos */ function api_stripos($haystack, $needle, $offset = 0, $encoding = null) { - if (empty($encoding)) { - $encoding = _api_mb_internal_encoding(); - } - if (!is_string($needle)) { - $needle = (int)$needle; - if (api_is_utf8($encoding)) { - $needle = _api_utf8_chr($needle); - } else { - $needle = chr($needle); - } - } - if ($needle == '') { - return false; - } if (_api_mb_supports($encoding)) { - return @mb_stripos($haystack, $needle, $offset, $encoding); - } - elseif (api_is_encoding_supported($encoding)) { - if (MBSTRING_INSTALLED) { - if (!api_is_utf8($encoding)) { - $haystack = api_utf8_encode($haystack, $encoding); - $needle = api_utf8_encode($needle, $encoding); - } - return @mb_stripos($haystack, $needle, $offset, 'UTF-8'); + if (empty($encoding)) { + $encoding = _api_mb_internal_encoding(); } - return api_strpos(api_strtolower($haystack, $encoding), api_strtolower($needle, $encoding), $offset, $encoding); + return mb_stripos($haystack, $needle, $offset, $encoding); } return stripos($haystack, $needle, $offset); } @@ -1790,49 +1764,11 @@ function api_stripos($haystack, $needle, $offset = 0, $encoding = null) { * @link http://php.net/manual/en/function.mb-stristr */ function api_stristr($haystack, $needle, $before_needle = false, $encoding = null) { - if (empty($encoding)) { - $encoding = _api_mb_internal_encoding(); - } - if (!is_string($needle)) { - $needle = (int)$needle; - if (api_is_utf8($encoding)) { - $needle = _api_utf8_chr($needle); - } else { - $needle = chr($needle); - } - } - if ($needle == '') { - return false; - } if (_api_mb_supports($encoding)) { - return @mb_stristr($haystack, $needle, $before_needle, $encoding); - } - elseif (api_is_encoding_supported($encoding)) { - if (MBSTRING_INSTALLED) { - if (!api_is_utf8($encoding)) { - $haystack = api_utf8_encode($haystack, $encoding); - $needle = api_utf8_encode($needle, $encoding); - } - $result = @mb_stristr($haystack, $needle, $before_needle, 'UTF-8'); - if ($result === false) { - return false; - } - if (!api_is_utf8($encoding)) { - return api_utf8_decode($result, $encoding); - } - return $result; - } - $result = api_strstr(api_strtolower($haystack, $encoding), api_strtolower($needle, $encoding), $before_needle, $encoding); - if ($result === false) { - return false; - } - if ($before_needle) { - return api_substr($haystack, 0, api_strlen($result, $encoding), $encoding); + if (empty($encoding)) { + $encoding = _api_mb_internal_encoding(); } - return api_substr($haystack, api_strlen($haystack, $encoding) - api_strlen($result, $encoding), null, $encoding); - } - if (!IS_PHP_53) { - return stristr($haystack, $needle); + return mb_stristr($haystack, $needle, $before_needle, $encoding); } return stristr($haystack, $needle, $before_needle); } @@ -1864,9 +1800,6 @@ function api_strlen($string, $encoding = null) { if (_api_iconv_supports($encoding)) { return @iconv_strlen($string, $encoding); } - if (api_is_utf8($encoding)) { - return api_byte_count(preg_replace("/[\x80-\xBF]/", '', $string)); - } return strlen($string); } @@ -1886,43 +1819,10 @@ function api_strpos($haystack, $needle, $offset = 0, $encoding = null) { if (empty($encoding)) { $encoding = _api_mb_internal_encoding(); } - if (!is_string($needle)) { - $needle = (int)$needle; - if (api_is_utf8($encoding)) { - $needle = _api_utf8_chr($needle); - } else { - $needle = chr($needle); - } - } - if ($needle == '') { - return false; - } if (_api_is_single_byte_encoding($encoding)) { return strpos($haystack, $needle, $offset); - } - elseif (_api_mb_supports($encoding)) { - return @mb_strpos($haystack, $needle, $offset, $encoding); - } - elseif (api_is_encoding_supported($encoding)) { - if (!api_is_utf8($encoding)) { - $haystack = api_utf8_encode($haystack, $encoding); - $needle = api_utf8_encode($needle, $encoding); - } - if (MBSTRING_INSTALLED) { - return @mb_strpos($haystack, $needle, $offset, 'UTF-8'); - } - if (empty($offset)) { - $haystack = explode($needle, $haystack, 2); - if (count($haystack) > 1) { - return api_strlen($haystack[0]); - } - return false; - } - $haystack = api_substr($haystack, $offset); - if (($pos = api_strpos($haystack, $needle)) !== false ) { - return $pos + $offset; - } - return false; + } elseif (_api_mb_supports($encoding)) { + return mb_strpos($haystack, $needle, $offset, $encoding); } return strpos($haystack, $needle, $offset); } @@ -1946,17 +1846,6 @@ function api_strrchr($haystack, $needle, $before_needle = false, $encoding = nul if (empty($encoding)) { $encoding = _api_mb_internal_encoding(); } - if (!is_string($needle)) { - $needle = (int)$needle; - if (api_is_utf8($encoding)) { - $needle = _api_utf8_chr($needle); - } else { - $needle = chr($needle); - } - } - if ($needle == '') { - return false; - } if (_api_is_single_byte_encoding($encoding)) { if (!$before_needle) { return strrchr($haystack, $needle); @@ -1966,26 +1855,8 @@ function api_strrchr($haystack, $needle, $before_needle = false, $encoding = nul return false; } return api_substr($haystack, 0, api_strlen($haystack, $encoding) - api_strlen($result, $encoding), $encoding); - } - elseif (_api_mb_supports($encoding)) { - return @mb_strrchr($haystack, $needle, $before_needle, $encoding); - } - elseif (MBSTRING_INSTALLED && api_is_encoding_supported($encoding)) { - if (!api_is_utf8($encoding)) { - $haystack = api_utf8_encode($haystack, $encoding); - $needle = api_utf8_encode($needle, $encoding); - } - $result = @mb_strrchr($haystack, $needle, $before_needle, 'UTF-8'); - if ($result === false) { - return false; - } - if (!api_is_utf8($encoding)) { - return api_utf8_decode($result, $encoding); - } - return $result; - } - if (!$before_needle) { - return strrchr($haystack, $needle); + } elseif (_api_mb_supports($encoding)) { + return mb_strrchr($haystack, $needle, $before_needle, $encoding); } $result = strrchr($haystack, $needle); if ($result === false) { @@ -2030,7 +1901,8 @@ function api_strrev($string, $encoding = null) { * @link http://php.net/manual/en/function.strripos * @link http://php.net/manual/en/function.mb-strripos */ -function api_strripos($haystack, $needle, $offset = 0, $encoding = null) { +function api_strripos($haystack, $needle, $offset = 0, $encoding = null) +{ return api_strrpos(api_strtolower($haystack, $encoding), api_strtolower($needle, $encoding), $offset, $encoding); } @@ -2046,72 +1918,13 @@ function api_strripos($haystack, $needle, $offset = 0, $encoding = null) { * @link http://php.net/manual/en/function.strrpos * @link http://php.net/manual/en/function.mb-strrpos */ -function api_strrpos($haystack, $needle, $offset = 0, $encoding = null) { - - if (empty($encoding)) { - $encoding = _api_mb_internal_encoding(); - } - if (!is_string($needle)) { - $needle = (int)$needle; - if (api_is_utf8($encoding)) { - $needle = _api_utf8_chr($needle); - } else { - $needle = chr($needle); - } - } - if ($needle == '') { - return false; - } - if (_api_is_single_byte_encoding($encoding)) { - return strrpos($haystack, $needle, $offset); - } - if (_api_mb_supports($encoding) && IS_PHP_52) { - return @mb_strrpos($haystack, $needle, $offset, $encoding); - } elseif (api_is_encoding_supported($encoding)) { - - if (!api_is_utf8($encoding)) { - $haystack = api_utf8_encode($haystack, $encoding); - $needle = api_utf8_encode($needle, $encoding); - } - // In PHP 5.1 the $offset parameter didn't exist see http://php.net/manual/en/function.mb-strrpos.php - if (MBSTRING_INSTALLED && IS_PHP_SUP_OR_EQ_51) { - //return @mb_strrpos($haystack, $needle, $offset, 'UTF-8'); - //@todo fix the missing $offset parameter - return @mb_strrpos($haystack, $needle, 'UTF-8'); - } - if (MBSTRING_INSTALLED && IS_PHP_SUP_OR_EQ_52) { - return @mb_strrpos($haystack, $needle, $offset, 'UTF-8'); - } - - // This branch (this fragment of code) is an adaptation from the CakePHP(tm) Project, http://www.cakefoundation.org - $found = false; - $haystack = _api_utf8_to_unicode($haystack); - $haystack_count = count($haystack); - $matches = array_count_values($haystack); - $needle = _api_utf8_to_unicode($needle); - $needle_count = count($needle); - $position = $offset; - while (($found === false) && ($position < $haystack_count)) { - if (isset($needle[0]) && $needle[0] === $haystack[$position]) { - for ($i = 1; $i < $needle_count; $i++) { - if ($needle[$i] !== $haystack[$position + $i]) { - if ($needle[$i] === $haystack[($position + $i) -1]) { - $position--; - $found = true; - continue; - } - } - } - if (!$offset && isset($matches[$needle[0]]) && $matches[$needle[0]] > 1) { - $matches[$needle[0]] = $matches[$needle[0]] - 1; - } elseif ($i === $needle_count) { - $found = true; - $position--; - } - } - $position++; +function api_strrpos($haystack, $needle, $offset = 0, $encoding = null) +{ + if (_api_mb_supports($encoding)) { + if (empty($encoding)) { + $encoding = _api_mb_internal_encoding(); } - return ($found) ? $position : false; + return mb_strrpos($haystack, $needle, $offset, $encoding); } return strrpos($haystack, $needle, $offset); } @@ -2147,46 +1960,10 @@ function api_strstr($haystack, $needle, $before_needle = false, $encoding = null return false; } if (_api_is_single_byte_encoding($encoding)) { - // Adding the missing parameter $before_needle to the original function strstr(), PHP_VERSION < 5.3 - if (!$before_needle) { - return strstr($haystack, $needle); - } - if (!IS_PHP_53) { - $result = explode($needle, $haystack, 2); - if ($result === false || count($result) < 2) { - return false; - } - return $result[0]; - } return strstr($haystack, $needle, $before_needle); } if (_api_mb_supports($encoding)) { - return @mb_strstr($haystack, $needle, $before_needle, $encoding); - } - elseif (MBSTRING_INSTALLED && api_is_encoding_supported($encoding)) { - if (!api_is_utf8($encoding)) { - $haystack = api_utf8_encode($haystack, $encoding); - $needle = api_utf8_encode($needle, $encoding); - } - $result = @mb_strstr($haystack, $needle, $before_needle, 'UTF-8'); - if ($result !== false) { - if (!api_is_utf8($encoding)) { - return api_utf8_decode($result, $encoding); - } - return $result; - } - return false; - } - // Adding the missing parameter $before_needle to the original function strstr(), PHP_VERSION < 5.3 - if (!$before_needle) { - return strstr($haystack, $needle); - } - if (!IS_PHP_53) { - $result = explode($needle, $haystack, 2); - if ($result === false || count($result) < 2) { - return false; - } - return $result[0]; + return mb_strstr($haystack, $needle, $before_needle, $encoding); } return strstr($haystack, $needle, $before_needle); } @@ -2205,53 +1982,7 @@ function api_strtolower($string, $encoding = null) { $encoding = _api_mb_internal_encoding(); } if (_api_mb_supports($encoding)) { - return @mb_strtolower($string, $encoding); - } - elseif (api_is_encoding_supported($encoding)) { - if (!api_is_utf8($encoding)) { - $string = api_utf8_encode($string, $encoding); - } - if (MBSTRING_INSTALLED) { - $string = @mb_strtolower($string, 'UTF-8'); - } else { - // This branch (this fragment of code) is an adaptation from the CakePHP(tm) Project, http://www.cakefoundation.org - $codepoints = _api_utf8_to_unicode($string); - $length = count($codepoints); - $matched = false; - $result = array(); - for ($i = 0 ; $i < $length; $i++) { - $codepoint = $codepoints[$i]; - if ($codepoint < 128) { - $str = strtolower(chr($codepoint)); - $strlen = api_byte_count($str); - for ($ii = 0 ; $ii < $strlen; $ii++) { - $lower = ord($str[$ii]); - } - $result[] = $lower; - $matched = true; - } else { - $matched = false; - $properties = &_api_utf8_get_letter_case_properties($codepoint, 'upper'); - if (!empty($properties)) { - foreach ($properties as $key => $value) { - if ($properties[$key]['upper'] == $codepoint && count($properties[$key]['lower'][0]) === 1) { - $result[] = $properties[$key]['lower'][0]; - $matched = true; - break 1; - } - } - } - } - if ($matched === false) { - $result[] = $codepoint; - } - } - $string = _api_utf8_from_unicode($result); - } - if (!api_is_utf8($encoding)) { - return api_utf8_decode($string, $encoding); - } - return $string; + return mb_strtolower($string, $encoding); } return strtolower($string); } @@ -2270,91 +2001,7 @@ function api_strtoupper($string, $encoding = null) { $encoding = _api_mb_internal_encoding(); } if (_api_mb_supports($encoding)) { - return @mb_strtoupper($string, $encoding); - } - elseif (api_is_encoding_supported($encoding)) { - if (!api_is_utf8($encoding)) { - $string = api_utf8_encode($string, $encoding); - } - if (MBSTRING_INSTALLED) { - $string = @mb_strtoupper($string, 'UTF-8'); - } else { - // This branch (this fragment of code) is an adaptation from the CakePHP(tm) Project, http://www.cakefoundation.org - $codepoints = _api_utf8_to_unicode($string); - $length = count($codepoints); - $matched = false; - $replaced = array(); - $result = array(); - for ($i = 0 ; $i < $length; $i++) { - $codepoint = $codepoints[$i]; - if ($codepoint < 128) { - $str = strtoupper(chr($codepoint)); - $strlen = api_byte_count($str); - for ($ii = 0 ; $ii < $strlen; $ii++) { - $lower = ord($str[$ii]); - } - $result[] = $lower; - $matched = true; - } else { - $matched = false; - $properties = &_api_utf8_get_letter_case_properties($codepoint); - $property_count = count($properties); - if (!empty($properties)) { - foreach ($properties as $key => $value) { - $matched = false; - $replace = 0; - if ($length > 1 && count($properties[$key]['lower']) > 1) { - $j = 0; - for ($ii = 0; $ii < count($properties[$key]['lower']); $ii++) { - $next_codepoint = $next_codepoints[$i + $ii]; - if (isset($next_codepoint) && ($next_codepoint == $properties[$key]['lower'][$j + $ii])) { - $replace++; - } - } - if ($replace == count($properties[$key]['lower'])) { - $result[] = $properties[$key]['upper']; - $replaced = array_merge($replaced, array_values($properties[$key]['lower'])); - $matched = true; - break 1; - } - } elseif ($length > 1 && $property_count > 1) { - $j = 0; - for ($ii = 1; $ii < $property_count; $ii++) { - $next_codepoint = $next_codepoints[$i + $ii - 1]; - if (in_array($next_codepoint, $properties[$ii]['lower'])) { - for ($jj = 0; $jj < count($properties[$ii]['lower']); $jj++) { - $next_codepoint = $next_codepoints[$i + $jj]; - if (isset($next_codepoint) && ($next_codepoint == $properties[$ii]['lower'][$j + $jj])) { - $replace++; - } - } - if ($replace == count($properties[$ii]['lower'])) { - $result[] = $properties[$ii]['upper']; - $replaced = array_merge($replaced, array_values($properties[$ii]['lower'])); - $matched = true; - break 2; - } - } - } - } - if ($properties[$key]['lower'][0] == $codepoint) { - $result[] = $properties[$key]['upper']; - $matched = true; - break 1; - } - } - } - } - if ($matched === false && !in_array($codepoint, $replaced, true)) { - $result[] = $codepoint; - } - } - $string = _api_utf8_from_unicode($result); - } - if (!api_is_utf8($encoding)) { - return api_utf8_decode($string, $encoding); - } - return $string; + return mb_strtoupper($string, $encoding); } return strtoupper($string); } @@ -2383,82 +2030,7 @@ function api_substr($string, $start, $length = null, $encoding = null) { return substr($string, $start, $length); } if (_api_mb_supports($encoding)) { - return @mb_substr($string, $start, $length, $encoding); - } - elseif (api_is_encoding_supported($encoding)) { - if (!api_is_utf8($encoding)) { - $string = api_utf8_encode($string, $encoding); - } - if (MBSTRING_INSTALLED) { - $string = @mb_substr($string, $start, $length, 'UTF-8'); - } else { - // The following branch of code is from the Drupal CMS, see the function drupal_substr(). - $strlen = api_byte_count($string); - // Find the starting byte offset - $bytes = 0; - if ($start > 0) { - // Count all the continuation bytes from the start until we have found - // $start characters - $bytes = -1; $chars = -1; - while ($bytes < $strlen && $chars < $start) { - $bytes++; - $c = ord($string[$bytes]); - if ($c < 0x80 || $c >= 0xC0) { - $chars++; - } - } - } - else if ($start < 0) { - // Count all the continuation bytes from the end until we have found - // abs($start) characters - $start = abs($start); - $bytes = $strlen; $chars = 0; - while ($bytes > 0 && $chars < $start) { - $bytes--; - $c = ord($string[$bytes]); - if ($c < 0x80 || $c >= 0xC0) { - $chars++; - } - } - } - $istart = $bytes; - // Find the ending byte offset - if ($length === NULL) { - $bytes = $strlen - 1; - } - else if ($length > 0) { - // Count all the continuation bytes from the starting index until we have - // found $length + 1 characters. Then backtrack one byte. - $bytes = $istart; $chars = 0; - while ($bytes < $strlen && $chars < $length) { - $bytes++; - $c = ord($string[$bytes]); - if ($c < 0x80 || $c >= 0xC0) { - $chars++; - } - } - $bytes--; - } - else if ($length < 0) { - // Count all the continuation bytes from the end until we have found - // abs($length) characters - $length = abs($length); - $bytes = $strlen - 1; $chars = 0; - while ($bytes >= 0 && $chars < $length) { - $c = ord($string[$bytes]); - if ($c < 0x80 || $c >= 0xC0) { - $chars++; - } - $bytes--; - } - } - $iend = $bytes; - $string = substr($string, $istart, max(0, $iend - $istart + 1)); - } - if (!api_is_utf8($encoding)) { - $string = api_utf8_decode($string, $encoding); - } - return $string; + return mb_substr($string, $start, $length, $encoding); } return substr($string, $start, $length); } @@ -2476,7 +2048,7 @@ function api_substr_count($haystack, $needle, $encoding = null) { $encoding = _api_mb_internal_encoding(); } if (_api_mb_supports($encoding)) { - return @mb_substr_count($haystack, $needle, $encoding); + return mb_substr_count($haystack, $needle, $encoding); } return substr_count($haystack, $needle); } @@ -2544,7 +2116,7 @@ function api_ucfirst($string, $encoding = null) { if (empty($encoding)) { $encoding = _api_mb_internal_encoding(); } - return api_strtoupper(api_substr($string, 0, 1, $encoding), $encoding) . api_substr($string, 1, api_strlen($string, $encoding), $encoding); + return api_strtoupper(api_substr($string, 0, 1, $encoding), $encoding) . api_substr($string, 1, api_strlen($string, $encoding), $encoding); } /** @@ -2556,30 +2128,11 @@ function api_ucfirst($string, $encoding = null) { * @link http://php.net/manual/en/function.ucwords */ function api_ucwords($string, $encoding = null) { - if (empty($encoding)) { - $encoding = _api_mb_internal_encoding(); - } if (_api_mb_supports($encoding)) { - return @mb_convert_case($string, MB_CASE_TITLE, $encoding); - } - if (api_is_encoding_supported($encoding)) { - if (!api_is_utf8($encoding)) { - $string = api_utf8_encode($string, $encoding); - } - if (MBSTRING_INSTALLED) { - $string = @mb_convert_case($string, MB_CASE_TITLE, 'UTF-8'); - } else { - // The following fragment (branch) of code is based on the function utf8_ucwords() by Harry Fuecks - // See http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php - // Note: [\x0c\x09\x0b\x0a\x0d\x20] matches - form feeds, horizontal tabs, vertical tabs, linefeeds and carriage returns. - // This corresponds to the definition of a "word" defined at http://www.php.net/ucwords - $pattern = '/(^|([\x0c\x09\x0b\x0a\x0d\x20]+))([^\x0c\x09\x0b\x0a\x0d\x20]{1})[^\x0c\x09\x0b\x0a\x0d\x20]*/u'; - $string = preg_replace_callback($pattern, '_api_utf8_ucwords_callback', $string); - } - if (!api_is_utf8($encoding)) { - return api_utf8_decode($string, $encoding); + if (empty($encoding)) { + $encoding = _api_mb_internal_encoding(); } - return $string; + return mb_convert_case($string, MB_CASE_TITLE, $encoding); } return ucwords($string); } @@ -3603,8 +3156,8 @@ function api_is_encoding_supported($encoding) { * Note: See the file chamilo/main/inc/lib/internationalization_database/non_utf8_encodings.php * if you wish to revise the leading non-UTF-8 encoding for your language. */ -function api_get_non_utf8_encoding($language = null) { - +function api_get_non_utf8_encoding($language = null) +{ $language_is_supported = api_is_language_supported($language); if (!$language_is_supported || empty($language)) { $language = api_get_interface_language(false, true); @@ -3725,7 +3278,6 @@ function api_detect_encoding($string, $language = null) { return $result; } - /** * String validation functions concerning certain encodings */ @@ -3751,51 +3303,6 @@ function api_is_valid_ascii(&$string) { return !preg_match('/[^\x00-\x7F]/S', $string); } -/** - * - * Experimental translation feature for Chamilo - * - * Install this in Ubuntu - * - * sudo locale-gen es_ES - * sudo apt-get install php-gettext - * - * Install Spanish locale: $ sudo locale-gen es_ES - * Install English locale: $ sudo locale-gen en_US - * - * To view the list of locales installed in ubuntu - * locale -a - * - * In Debian check this file More info: http://algorytmy.pl/doc/php/ref.gettext.php - * sudo vim /etc/locale.gen - * - * Translate po files using this GUI - * sudo apt-get install poedit - * - * Some help here: - * - * Config getext - * http://zez.org/article/articleview/42/3/ - * * - * Using getext in ubuntu - * http://www.sourcerally.net/regin/49-How-to-get-PHP-and-gettext-working-%28ubuntu,-debian%29 - * - * Getext tutorial - * http://mel.melaxis.com/devblog/2005/08/06/localizing-php-web-sites-using-gettext/ - * - */ -function setting_gettext() { - $domain = 'default'; - $locale = api_get_language_isocode(); - $locale = 'es_ES'; - putenv("LC_ALL=$locale"); - setlocale(LC_ALL, $locale); - bindtextdomain($domain, api_get_path(SYS_LANG_PATH)); - bind_textdomain_codeset($domain, 'UTF-8'); - textdomain($domain); -} - - /** * Return true a date is valid diff --git a/main/inc/lib/internationalization_internal.lib.php b/main/inc/lib/internationalization_internal.lib.php index 1652c58440..06d31d6a56 100755 --- a/main/inc/lib/internationalization_internal.lib.php +++ b/main/inc/lib/internationalization_internal.lib.php @@ -167,7 +167,6 @@ function _api_compare_n_grams(&$n_grams, $encoding, $max_delta = LANGUAGE_DETECT return $result; } - /** * Appendix to "Date and time formats" */ @@ -259,7 +258,6 @@ function _api_clean_person_name($person_name) { return preg_replace(array('/\s+/', '/, ,/', '/,+/', '/^[ ,]/', '/[ ,]$/'), array(' ', ', ', ',', '', ''), $person_name); } - /** * Appendix to "Multibyte string conversion functions" */ @@ -595,7 +593,6 @@ function _api_html_entity_from_unicode($codepoint) { return '&#'.$codepoint.';'; } - /** * Appendix to "Common multibyte string functions" */ @@ -681,7 +678,6 @@ function _api_utf8_ucwords_callback($matches) { return $matches[2] . api_ucfirst(ltrim($matches[0]), 'UTF-8'); } - /** * Appendix to "Common sting operations with arrays" */ @@ -702,7 +698,6 @@ function _api_array_utf8_decode($variable) { return $variable; } - /** * Appendix to "String comparison" */ @@ -832,7 +827,6 @@ function _api_get_collator_sort_flag($sort_flag = SORT_REGULAR) { return Collator::SORT_REGULAR; } - /** * ICU locales (accessible through intl extension). */ @@ -884,7 +878,6 @@ function api_get_default_locale() { return _api_set_default_locale(); } - /** * Appendix to "Encoding management functions" */ @@ -1035,7 +1028,7 @@ function _api_iconv_set_encoding($type, $encoding = null) { } /** - * Ckecks whether a given encoding is known to define single-byte characters only. + * Checks whether a given encoding is known to define single-byte characters only. * The result might be not accurate for unknown by this library encodings. This is not fatal, * then the library picks up conversions plus Unicode related internal algorithms. * @param string $encoding A given encoding identificator. @@ -1131,85 +1124,3 @@ function _api_html_entity_supports($encoding) { } return $supports[$encoding]; } - - -/** - * Upgrading the PHP5 mbstring extension - */ - -// A multibyte replacement of strchr(). This function exists in PHP 5 >= 5.2.0 -// See http://php.net/manual/en/function.mb-strrchr -if (MBSTRING_INSTALLED && !function_exists('mb_strchr')) { - function mb_strchr($haystack, $needle, $part = false, $encoding = null) { - if (empty($encoding)) { - $encoding = mb_internal_encoding(); - } - return mb_strstr($haystack, $needle, $part, $encoding); - } -} - -// A multibyte replacement of stripos(). This function exists in PHP 5 >= 5.2.0 -// See http://php.net/manual/en/function.mb-stripos -if (MBSTRING_INSTALLED && !function_exists('mb_stripos')) { - function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { - if (empty($encoding)) { - $encoding = mb_internal_encoding(); - } - return mb_strpos(mb_strtolower($haystack, $encoding), mb_strtolower($needle, $encoding), $offset, $encoding); - } -} - -// A multibyte replacement of stristr(). This function exists in PHP 5 >= 5.2.0 -// See http://php.net/manual/en/function.mb-stristr -if (MBSTRING_INSTALLED && !function_exists('mb_stristr')) { - function mb_stristr($haystack, $needle, $part = false, $encoding = null) { - if (empty($encoding)) { - $encoding = mb_internal_encoding(); - } - $pos = mb_strpos(mb_strtolower($haystack, $encoding), mb_strtolower($needle, $encoding), 0, $encoding); - if ($pos === false) { - return false; - } - if ($part) { - return mb_substr($haystack, 0, $pos + 1, $encoding); - } - return mb_substr($haystack, $pos, mb_strlen($haystack, $encoding), $encoding); - } -} - -// A multibyte replacement of strrchr(). This function exists in PHP 5 >= 5.2.0 -// See http://php.net/manual/en/function.mb-strrchr -if (MBSTRING_INSTALLED && !function_exists('mb_strrchr')) { - function mb_strrchr($haystack, $needle, $part = false, $encoding = null) { - if (empty($encoding)) { - $encoding = mb_internal_encoding(); - } - $needle = mb_substr($needle, 0, 1, $encoding); - $pos = mb_strrpos($haystack, $needle, mb_strlen($haystack, $encoding) - 1, $encoding); - if ($pos === false) { - return false; - } - if ($part) { - return mb_substr($haystack, 0, $pos + 1, $encoding); - } - return mb_substr($haystack, $pos, mb_strlen($haystack, $encoding), $encoding); - } -} - -// A multibyte replacement of strstr(). This function exists in PHP 5 >= 5.2.0 -// See http://php.net/manual/en/function.mb-strstr -if (MBSTRING_INSTALLED && !function_exists('mb_strstr')) { - function mb_strstr($haystack, $needle, $part = false, $encoding = null) { - if (empty($encoding)) { - $encoding = mb_internal_encoding(); - } - $pos = mb_strpos($haystack, $needle, 0, $encoding); - if ($pos === false) { - return false; - } - if ($part) { - return mb_substr($haystack, 0, $pos + 1, $encoding); - } - return mb_substr($haystack, $pos, mb_strlen($haystack, $encoding), $encoding); - } -} diff --git a/main/inc/lib/main_api.lib.php b/main/inc/lib/main_api.lib.php index 5ebe790a47..b3895dac39 100644 --- a/main/inc/lib/main_api.lib.php +++ b/main/inc/lib/main_api.lib.php @@ -221,16 +221,6 @@ define('USERNAME_PURIFIER', '/[^0-9A-Za-z_\.]/'); define('USERNAME_PURIFIER_MAIL', '/[^0-9A-Za-z_\.@]/'); define('USERNAME_PURIFIER_SHALLOW', '/\s/'); -// Constants for detection some important PHP5 subversions. -$php_version = (float) PHP_VERSION; - -define('IS_PHP_52', !((float)$php_version < 5.2)); -define('IS_PHP_53', !((float)$php_version < 5.3)); - -define('IS_PHP_SUP_OR_EQ_53', ($php_version >= 5.3)); -define('IS_PHP_SUP_OR_EQ_52', ($php_version >= 5.2 && !IS_PHP_53)); -define('IS_PHP_SUP_OR_EQ_51', ($php_version >= 5.1 && !IS_PHP_52 && !IS_PHP_53)); - // This constant is a result of Windows OS detection, it has a boolean value: // true whether the server runs on Windows OS, false otherwise. define('IS_WINDOWS_OS', api_is_windows_os()); @@ -7222,20 +7212,20 @@ function api_get_origin() function api_get_full_setting($variable, $key = null) { $variable = Database::escape_string($variable); $sql = "SELECT * - FROM settings_current + FROM settings_current WHERE variable = '$variable' "; - + if (!empty($key)) { $key = Database::escape_string($key); $sql .= "AND subkey = '$key'"; } - + $result = Database::query($sql); $setting = array(); - + while ($row = Database::fetch_assoc($result)) { $setting[] = $row; } - + return $setting; } From ec798ab1ae890f053b4f5f3cac71b5c6a64dbbb3 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 30 Apr 2014 14:49:40 +0200 Subject: [PATCH 3/6] Fixing table with no columns see BT#8048 --- main/inc/lib/table_sort.class.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main/inc/lib/table_sort.class.php b/main/inc/lib/table_sort.class.php index 322d548f83..80d6a65c8d 100644 --- a/main/inc/lib/table_sort.class.php +++ b/main/inc/lib/table_sort.class.php @@ -103,6 +103,7 @@ class TableSort // Probably an attack return $data; } + if (!in_array($direction, array(SORT_ASC, SORT_DESC))) { // Probably an attack return $data; @@ -197,7 +198,8 @@ class TableSort usort($data, create_function('$a, $b', $compare_function)); } - if (is_array($column_show)) { + if (is_array($column_show) && !empty($column_show)) { + // We show only the columns data that were set up on the $column_show array $new_order_data = array(); $count_data = count($data); @@ -214,7 +216,6 @@ class TableSort // Replace the multi-arrays $data = $new_order_data; } - return $data; } From 3f1194c63e7e8a0098b38825c0260b04606aba32 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 30 Apr 2014 15:06:49 +0200 Subject: [PATCH 4/6] Fixing empty group list see BT#8048 --- main/inc/lib/groupmanager.lib.php | 43 +++++++------------------------ 1 file changed, 9 insertions(+), 34 deletions(-) diff --git a/main/inc/lib/groupmanager.lib.php b/main/inc/lib/groupmanager.lib.php index e52cc5bfce..c93f08ac90 100644 --- a/main/inc/lib/groupmanager.lib.php +++ b/main/inc/lib/groupmanager.lib.php @@ -93,12 +93,8 @@ class GroupManager //condition for the session $session_id = api_get_session_id(); - $my_status_of_user_in_course = CourseManager::get_user_in_course_status($my_user_id, $course_info['code']); - // COURSEMANAGER or STUDENT - if ($my_status_of_user_in_course == COURSEMANAGER || api_is_allowed_to_edit(null, true) || api_is_drh()) { - $can_see_groups = 1; - $sql = "SELECT g.id, + $sql = "SELECT g.id, g.name, g.description, g.category_id, @@ -110,26 +106,12 @@ class GroupManager ug.user_id is_member FROM $table_group g LEFT JOIN $table_group_user ug - ON (ug.group_id = g.id AND ug.user_id = '".api_get_user_id()."' AND ug.c_id = $course_id AND g.c_id = $course_id)"; - } elseif ($my_status_of_user_in_course == STUDENT || $_SESSION['studentview'] == 'studentview') { - $can_see_groups = 1; - - $sql = "SELECT g.id, - g.name, - g.description, - g.category_id, - g.max_student maximum_number_of_members, - g.secret_directory, - g.self_registration_allowed, - g.self_unregistration_allowed, - g.session_id, - ug.user_id is_member - FROM $table_group g - LEFT JOIN $table_group_user ug - ON (ug.group_id = g.id AND ug.user_id = '".api_get_user_id()."' AND ug.c_id = $course_id AND g.c_id = $course_id)"; - } else { - return array(); - } + ON ( + ug.group_id = g.id AND + ug.user_id = '".api_get_user_id()."' AND + ug.c_id = $course_id AND + g.c_id = $course_id + )"; $sql .= " WHERE 1=1 "; @@ -150,17 +132,12 @@ class GroupManager } $sql .= " GROUP BY g.id ORDER BY UPPER(g.name)"; - if ($can_see_groups == 1) { - $groupList = Database::query($sql); - } else { - return array(); - } + $groupList = Database::query($sql); $groups = array(); while ($thisGroup = Database::fetch_array($groupList)) { $thisGroup['number_of_members'] = count(self::get_subscribed_users($thisGroup['id'])); - - if ($thisGroup['session_id']!=0) { + if ($thisGroup['session_id'] != 0) { $sql = 'SELECT name FROM '.Database::get_main_table(TABLE_MAIN_SESSION).' WHERE id='.$thisGroup['session_id']; $rs_session = Database::query($sql); @@ -2116,7 +2093,6 @@ class GroupManager self::user_has_access($user_id, $this_group['id'], self::GROUP_TOOL_WIKI)) && !(api_is_course_coach() && intval($this_group['session_id']) != $session_id) ) { - $group_name = ''. Security::remove_XSS($this_group['name']).' '; if (!empty($user_id) && !empty($this_group['id_tutor']) && $user_id == $this_group['id_tutor']) { @@ -2201,7 +2177,6 @@ class GroupManager $group_data[] = $row; } // end loop - $table = new SortableTableFromArrayConfig($group_data, 1, 20, 'group_category_'.$category_id); $table->set_additional_parameters(array('category' => $category_id)); $column = 0; From a4ec74b1e58e6242fd86b4273d04127d3f8cf476 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 30 Apr 2014 15:42:16 +0200 Subject: [PATCH 5/6] Minor - fixing PHP warnings. --- main/newscorm/lp_list.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/main/newscorm/lp_list.php b/main/newscorm/lp_list.php index 02003e44ea..367394ac09 100644 --- a/main/newscorm/lp_list.php +++ b/main/newscorm/lp_list.php @@ -191,6 +191,7 @@ if (!empty($flat_list)) { $url_start_lp = 'lp_controller.php?'.api_get_cidreq().'&action=view&lp_id='.$id; $name = Security::remove_XSS($details['lp_name']); + $extra = null; if ($is_allowed_to_edit) { $url_start_lp .= '&isStudentView=true'; $dsp_desc = ''.$details['lp_maker'].' '.(learnpath::is_lp_visible_for_student($id, api_get_user_id()) ? '' : ' - ('.get_lang('LPNotVisibleToStudent').')'); @@ -227,6 +228,12 @@ if (!empty($flat_list)) { $dsp_edit_close = ''; $token_parameter = "&sec_token=$token"; + $dsp_edit_lp = null; + $dsp_publish = null; + $dsp_reinit = null; + $dsp_disk = null; + $copy = null; + $lp_auto_lunch_icon = null; if ($is_allowed_to_edit) { @@ -355,7 +362,6 @@ if (!empty($flat_list)) { $copy = Display::url(Display::return_icon('cd_copy.png', get_lang('Copy'), array(), ICON_SIZE_SMALL), api_get_self()."?".api_get_cidreq()."&action=copy&lp_id=$id"); /* Auto Lunch LP code */ - $lp_auto_lunch_icon = ''; if (api_get_course_setting('enable_lp_auto_launch') == 1) { if ($details['autolaunch'] == 1 && $autolunch_exists == false) { $autolunch_exists = true; @@ -441,4 +447,4 @@ learnpath::generate_learning_path_folder($course_info); //Deleting the objects Session::erase('oLP'); Session::erase('lpobject'); -Display::display_footer(); \ No newline at end of file +Display::display_footer(); From 906bba14793b2d705a4d92ea4c9286a5585e6140 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 27 Dec 2013 16:30:02 +0100 Subject: [PATCH 6/6] Adding addAnnouncementToAllUsersInSessions option see BT#7217 Conflicts: main/announcements/announcements.inc.php --- main/announcements/announcements.inc.php | 58 ++++++++++++++++++++++-- main/announcements/announcements.php | 13 ++++-- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/main/announcements/announcements.inc.php b/main/announcements/announcements.inc.php index 88d572bf19..3d3b0bf1cb 100644 --- a/main/announcements/announcements.inc.php +++ b/main/announcements/announcements.inc.php @@ -306,7 +306,8 @@ class AnnouncementManager $sentTo, $file = array(), $file_comment = null, - $end_date = null + $end_date = null, + $sendToUsersInSession = false ) { $_course = api_get_course_info(); $tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT); @@ -366,6 +367,12 @@ class AnnouncementManager } } } + + if ($sendToUsersInSession) { + self::addAnnouncementToAllUsersInSessions($last_id); + } + + return $last_id; } } @@ -379,7 +386,7 @@ class AnnouncementManager * @param string $file_comment * @return bool|int */ - public static function add_group_announcement($emailTitle, $newContent, $to, $to_users, $file = array(), $file_comment = '') + public static function add_group_announcement($emailTitle, $newContent, $to, $to_users, $file = array(), $file_comment = '', $sendToUsersInSession = false) { $_course = api_get_course_info(); @@ -432,6 +439,11 @@ class AnnouncementManager } } } + + if ($sendToUsersInSession) { + self::addAnnouncementToAllUsersInSessions($last_id); + } + return $last_id; } @@ -446,7 +458,7 @@ class AnnouncementManager * @param mixed attachment * @param string file comment */ - public static function edit_announcement($id, $emailTitle, $newContent, $to, $file = array(), $file_comment = '') + public static function edit_announcement($id, $emailTitle, $newContent, $to, $file = array(), $file_comment = '', $sendToUsersInSession = false) { global $_course; @@ -478,6 +490,10 @@ class AnnouncementManager $sql_delete = "DELETE FROM $tbl_item_property WHERE c_id = $course_id AND ref='$id' AND tool='announcement'"; Database::query($sql_delete); + if ($sendToUsersInSession) { + self::addAnnouncementToAllUsersInSessions($id); + } + // store in item_property (first the groups, then the users if (!is_null($to)) { @@ -503,6 +519,42 @@ class AnnouncementManager } } + /** + * @param int $announcementId + */ + public static function addAnnouncementToAllUsersInSessions($announcementId) + { + $courseCode = api_get_course_id(); + $_course = api_get_course_info(); + + $sessionList = SessionManager::get_session_by_course(api_get_course_id()); + + if (!empty($sessionList)) { + foreach ($sessionList as $sessionInfo) { + $sessionId = $sessionInfo['id']; + $userList = CourseManager::get_user_list_from_course_code($courseCode, $sessionId); + + if (!empty($userList)) { + foreach ($userList as $user) { + api_item_property_update( + $_course, + TOOL_ANNOUNCEMENT, + $announcementId, + "AnnouncementUpdated", + api_get_user_id(), + 0, + $user['user_id'], + 0, + 0, + $sessionId + ); + } + } + } + } + + } + /** * @param int $insert_id * @return bool diff --git a/main/announcements/announcements.php b/main/announcements/announcements.php index ddf118c18e..b96e02ed10 100644 --- a/main/announcements/announcements.php +++ b/main/announcements/announcements.php @@ -354,13 +354,14 @@ if (api_is_allowed_to_edit(false,true) OR (api_get_course_setting('allow_user_ed $error_message = get_lang('TitleIsRequired'); $content_to_modify = $newContent; } else if ($submitAnnouncement) { + $sendToUsersInSession = isset($_POST['send_to_users_in_session']) ? true : false; if (isset($id) && $id) { // there is an Id => the announcement already exists => update mode if ($ctok == $_POST['sec_token']) { $file_comment = $_POST['file_comment']; $file = $_FILES['user_upload']; - AnnouncementManager::edit_announcement($id, $emailTitle, $newContent, $_POST['selectedform'], $file, $file_comment); + AnnouncementManager::edit_announcement($id, $emailTitle, $newContent, $_POST['selectedform'], $file, $file_comment, $sendToUsersInSession); /* MAIL FUNCTION */ if ($_POST['email_ann'] && empty($_POST['onlyThoseMails'])) { @@ -374,9 +375,9 @@ if (api_is_allowed_to_edit(false,true) OR (api_get_course_setting('allow_user_ed $file = $_FILES['user_upload']; $file_comment = $_POST['file_comment']; if (!empty($group_id)) { - $insert_id = AnnouncementManager::add_group_announcement($safe_emailTitle, $safe_newContent, array('GROUP:'.$group_id), $_POST['selectedform'], $file, $file_comment); + $insert_id = AnnouncementManager::add_group_announcement($safe_emailTitle, $safe_newContent, array('GROUP:'.$group_id), $_POST['selectedform'], $file, $file_comment, $sendToUsersInSession); } else { - $insert_id = AnnouncementManager::add_announcement($safe_emailTitle, $safe_newContent, $_POST['selectedform'], $file, $file_comment); + $insert_id = AnnouncementManager::add_announcement($safe_emailTitle, $safe_newContent, $_POST['selectedform'], $file, $file_comment, $sendToUsersInSession); } //store_resources($_SESSION['source_type'],$insert_id); $_SESSION['select_groupusers']="hide"; @@ -646,6 +647,10 @@ if ($display_form) { echo ' '; + echo '
'; + echo ''; + echo '
'; + if (!isset($announcement_to_modify) ) $announcement_to_modify =''; ($email_ann=='1')?$checked='checked':$checked=''; @@ -711,7 +716,7 @@ if ($display_form) { echo $oFCKeditor->CreateHtml(); echo ''; - //File attachment + //File attachment echo '