45        include_once(
"./Services/Object/classes/class.ilObject.php");
 
   48        return "<img src=\"" . 
$filename . 
"\" alt=\"" . 
$lng->txt(
"obj_" . 
$a_type) . 
"\" title=\"" . 
$lng->txt(
"obj_" . 
$a_type) . 
"\" border=\"0\" vspace=\"0\"/>";
 
   65        include_once(
"./Services/Object/classes/class.ilObject.php");
 
   79    public static function getImagePath(
$img, $module_path = 
"", $mode = 
"output", $offline = 
false)
 
   83        $styleDefinition = 
null;
 
   84        if (isset(
$DIC[
"styleDefinition"])) {
 
   85            $styleDefinition = 
$DIC[
"styleDefinition"];
 
   88        if (is_int(strpos(
$_SERVER[
"PHP_SELF"], 
"setup.php"))) {
 
   91        if ($module_path != 
"") {
 
   92            $module_path = 
"/" . $module_path;
 
   96        $default_img = 
"." . $module_path . 
"/templates/default/images/" . 
$img;
 
   99        require_once(
"./Services/Style/System/classes/class.ilStyleDefinition.php");
 
  100        $current_skin = ilStyleDefinition::getCurrentSkin();
 
  101        $current_style = ilStyleDefinition::getCurrentStyle();
 
  103        if (is_object($styleDefinition)) {
 
  104            $image_dir = $styleDefinition->getImageDirectory($current_style);
 
  106        if ($current_skin == 
"default") {
 
  107            $user_img = 
"." . $module_path . 
"/templates/default/" . $image_dir . 
"/" . 
$img;
 
  108            $skin_img = 
"." . $module_path . 
"/templates/default/images/" . 
$img;
 
  109        } elseif (is_object($styleDefinition) && $current_skin != 
"default") {
 
  110            $user_img = 
"./Customizing/global/skin/" .
 
  111                $current_skin . $module_path . 
"/" . $image_dir . 
"/" . 
$img;
 
  112            $skin_img = 
"./Customizing/global/skin/" .
 
  113                $current_skin . $module_path . 
"/images/" . 
$img;
 
  130            return "./images/" . 
$img;
 
  131        } elseif (@file_exists($user_img) && $image_dir != 
"") {
 
  133        } elseif (file_exists($skin_img)) {
 
  152        if (substr($relative_path, 0, 2) == 
'./') {
 
  153            $relative_path = (substr($relative_path, 1));
 
  155        if (substr($relative_path, 0, 1) != 
'/') {
 
  156            $relative_path = 
'/' . $relative_path;
 
  158        $htmlpath = ILIAS_HTTP_PATH . $relative_path;
 
  182        require_once(
"./Services/Style/System/classes/class.ilStyleDefinition.php");
 
  183        $stylesheet_name = (strlen($a_css_name))
 
  185            : ilStyleDefinition::getCurrentStyle() . 
".css";
 
  186        if (strlen($a_css_location) && (strcmp(substr($a_css_location, -1), 
"/") != 0)) {
 
  187            $a_css_location = $a_css_location . 
"/";
 
  192        require_once(
"./Services/Style/System/classes/class.ilStyleDefinition.php");
 
  193        if (ilStyleDefinition::getCurrentSkin() != 
"default") {
 
  194            $filename = 
"./Customizing/global/skin/" . ilStyleDefinition::getCurrentSkin() . 
"/" . $a_css_location . $stylesheet_name;
 
  197            $filename = 
"./" . $a_css_location . 
"templates/default/" . $stylesheet_name;
 
  200        if ($mode != 
"filesystem") {
 
  201            $vers = str_replace(
" ", 
"-", 
$ilSetting->get(
"ilias_version"));
 
  202            $vers = 
"?vers=" . str_replace(
".", 
"-", $vers);
 
  205            $vers .= ($skin->getVersion() != 
'' ? str_replace(
".", 
"-", 
'-' . $skin->getVersion()) : 
'');
 
  220    public static function getJSLocation($a_js_name, $a_js_location = 
"", $add_version = 
false)
 
  227        $js_name = $a_js_name;
 
  228        if (strlen($a_js_location) && (strcmp(substr($a_js_location, -1), 
"/") != 0)) {
 
  229            $a_js_location = $a_js_location . 
"/";
 
  234        require_once(
"./Services/Style/System/classes/class.ilStyleDefinition.php");
 
  235        if (ilStyleDefinition::getCurrentSkin() != 
"default") {
 
  236            $filename = 
"./Customizing/global/skin/" . ilStyleDefinition::getCurrentSkin() . 
"/" . $a_js_location . $js_name;
 
  239            $filename = 
"./" . $a_js_location . 
"templates/default/" . $js_name;
 
  243            $vers = str_replace(
" ", 
"-", 
$ilSetting->get(
"ilias_version"));
 
  244            $vers = 
"?vers=" . str_replace(
".", 
"-", $vers);
 
  261                $base .= 
"../Services/Privacy/";
 
  264            $base = 
"./Services/Privacy/";
 
  267        if (is_file(
$base . 
"w3c/p3p.xml")) {
 
  268            return ILIAS_HTTP_PATH . 
"w3c/p3p.xml";
 
  270            return ILIAS_HTTP_PATH . 
"/w3c/p3p_template.xml";
 
  288        if ($mode != 
"filesystem") {
 
  289            $vers = str_replace(
" ", 
"-", 
$ilSetting->get(
"ilias_version"));
 
  290            $vers = 
"?vers=" . str_replace(
".", 
"-", $vers);
 
  294        require_once(
"./Services/Style/System/classes/class.ilStyleDefinition.php");
 
  295        if (ilStyleDefinition::getCurrentSkin() == 
"default") {
 
  296            $in_style = 
"./templates/" . ilStyleDefinition::getCurrentSkin() . 
"/" 
  297                                    . ilStyleDefinition::getCurrentStyle() . 
"_cont.css";
 
  299            $in_style = 
"./Customizing/global/skin/" . ilStyleDefinition::getCurrentSkin() . 
"/" 
  300                                                    . ilStyleDefinition::getCurrentStyle() . 
"_cont.css";
 
  303        if (is_file(
"./" . $in_style)) {
 
  304            return $in_style . $vers;
 
  306            return "templates/default/delos_cont.css" . $vers;
 
  333        $direct_text = 
false,
 
  343        if ($multiple == 
true) {
 
  344            $multiple = 
" multiple=\"multiple\"";
 
  350        $class = 
" class=\" form-control " . $style_class . 
"\"";
 
  356        if (is_array($attribs)) {
 
  357            foreach ($attribs as 
$key => $val) {
 
  362            $disabled = 
' disabled=\"disabled\"';
 
  365        $str = 
"<select name=\"" . $varname . 
"\"" . $multiple . 
" $class size=\"" . 
$size . 
"\" $attributes $disabled>\n";
 
  369            if (is_array($val)) {
 
  375                ? 
' style="' . 
$style . 
'" ' 
  379                $str .= 
" <option $sty value=\"" . 
$key . 
"\"";
 
  381                $str .= 
" <option $sty value=\"" . $val . 
"\"";
 
  383            if (is_array($selected)) {
 
  384                if (in_array(
$key, $selected)) {
 
  385                    $str .= 
" selected=\"selected\"";
 
  387            } elseif ($selected == 
$key) {
 
  388                $str .= 
" selected=\"selected\"";
 
  392                $str .= 
">" . $val . 
"</option>\n";
 
  394                $str .= 
">" . 
$lng->txt($val) . 
"</option>\n";
 
  398        $str .= 
"</select>\n";
 
  414        return($values[$selected]);
 
  428    public static function formCheckbox($checked, $varname, $value, $disabled = 
false)
 
  430        $str = 
"<input type=\"checkbox\" name=\"" . $varname . 
"\"";
 
  433            $str .= 
" checked=\"checked\"";
 
  437            $str .= 
" disabled=\"disabled\"";
 
  442        if (substr($varname, -2) == 
"[]") {
 
  448            $varname_id = substr($varname, 0, -2) . 
"_" . $value;
 
  450            $varname_id = $varname;
 
  454        $varname_id = str_replace(
"[", 
"_", $varname_id);
 
  455        $varname_id = str_replace(
"]", 
"", $varname_id);
 
  457        $str .= 
" value=\"" . $value . 
"\" id=\"" . $varname_id . 
"\" />\n";
 
  476            $str = 
"<input disabled type=\"radio\" name=\"" . $varname . 
"\"";
 
  478            $str = 
"<input type=\"radio\" name=\"" . $varname . 
"\"";
 
  481            $str .= 
" checked=\"checked\"";
 
  484        $str .= 
" value=\"" . $value . 
"\"";
 
  485        $str .= 
" id=\"" . $value . 
"\" />\n";
 
  501    public static function formRadioButton($checked, $varname, $value, $onclick=
null, $disabled = 
false)
 
  506            $str .= (
'onclick="' . $onclick . 
'"');
 
  509        $str .= (
" type=\"radio\" name=\"" . $varname . 
"\"");
 
  511            $str .= 
" checked=\"checked\"";
 
  515            $str .= 
" disabled=\"disabled\"";
 
  518        $str .= 
" value=\"" . $value . 
"\"";
 
  520        $str .= 
" id=\"" . $value . 
"\" />\n";
 
  535    public static function formInput($varname, $value, $disabled = 
false)
 
  537        $str = 
"<input type=\"input\" name=\"" . $varname . 
"\"";
 
  542        $str .= 
" value=\"" . $value . 
"\"";
 
  544        $str .= 
" id=\"" . $value . 
"\" />\n";
 
  570        if (
"" != $a_path && 
"/" != substr($a_path, -1)) {
 
  612        foreach ($emptyFields as 
$key => $val) {
 
  614                if ($feedback != 
"") {
 
  648    public static function Linkbar($AScript, $AHits, $ALimit, $AOffset, $AParams = array(), $ALayout = array(), $prefix = 
'')
 
  653        $layout_prev = 
"<<";
 
  654        $layout_next = 
">>";
 
  657        if ((is_array($ALayout) && (count($ALayout) > 0))) {
 
  658            if ($ALayout[
"link"]) {
 
  659                $layout_link = 
" class=\"" . $ALayout[
"link"] . 
"\"";
 
  662            if ($ALayout[
"prev"]) {
 
  663                $layout_prev = $ALayout[
"prev"];
 
  666            if ($ALayout[
"next"]) {
 
  667                $layout_next = $ALayout[
"next"];
 
  673        if ($AHits > $ALimit || $AOffset > 0) {
 
  674            if (!empty($AParams)) {
 
  675                foreach ($AParams as 
$key => $value) {
 
  680            if (strpos($AScript, 
'&')) {
 
  681                $link = $AScript . 
"&" . 
$params . $prefix . 
"offset=";
 
  683                $link = $AScript . 
"?" . 
$params . $prefix . 
"offset=";
 
  688                $prevoffset = $AOffset - $ALimit;
 
  689                if ($prevoffset < 0) {
 
  692                $LinkBar .= 
"<a" . $layout_link . 
" href=\"" . $link . $prevoffset . 
"\">" . $layout_prev . 
" </a>";
 
  696            $pages=intval($AHits/$ALimit);
 
  699            if (($AHits % $ALimit)) {
 
  707            for (
$i = 1 ;
$i <= $pages ; 
$i++) {
 
  708                $newoffset=$ALimit*(
$i-1);
 
  710                if ($newoffset == $AOffset) {
 
  711                    $LinkBar .= 
"[" . 
$i . 
"] ";
 
  713                    $LinkBar .= 
'<a ' . $layout_link . 
' href="' .
 
  714                        $link . $newoffset . 
'">[' . 
$i . 
']</a> ';
 
  721            if (!(($AOffset/$ALimit)==($pages-1)) && ($pages!=1)) {
 
  722                $newoffset=$AOffset+$ALimit;
 
  723                $LinkBar .= 
"<a" . $layout_link . 
" href=\"" . $link . $newoffset . 
"\"> " . $layout_next . 
"</a>";
 
  750            "/(^|[\s]+)(www\.)([A-Za-z0-9#&=?.\/\-]+)/i",
 
  757            "/(^|[\s]+)(ftp\.)([A-Za-z0-9#&=?.\/\-]+)/i",
 
  767        $ret = str_replace(
'src="http://', 
'"***masked_im_start***', 
$ret);
 
  769        include_once(
"./Services/Utilities/classes/class.ilMWParserAdapter.php");
 
  774        $ret = str_replace(
'"***masked_im_start***', 
'src="http://', 
$ret);
 
  778        if ($detectGotoLinks) {
 
  780            $regExp = 
"<a[^>]*href=\"(" . str_replace(
"/", 
"\/", ILIAS_HTTP_PATH) . 
"\/goto.php\?target=\w+_(\d+)[^\"]*)\"[^>]*>[^<]*<\/a>";
 
  782            $ret = preg_replace_callback(
 
  783                "/" . $regExp . 
"/i",
 
  784                array(
"ilUtil", 
"replaceLinkProperties"),
 
  789            $regExp = 
"<a[^>]*href=\"(" . str_replace(
"/", 
"\/", ILIAS_HTTP_PATH) . 
"\/goto_.*[a-z0-9]+_([0-9]+)\.html)\"[^>]*>[^<]*<\/a>";
 
  791            $ret = preg_replace_callback(
 
  792                "/" . $regExp . 
"/i",
 
  793                array(
"ilUtil", 
"replaceLinkProperties"),
 
  817        $ref_id = $matches[2];
 
  823                $link = 
"<a href=" . $matches[1] . 
" target=\"_self\">" . 
$title . 
"</a>";
 
  847    public static function makeDateSelect($prefix, $year = 
"", $month = 
"", $day = 
"", $startyear = 
"", $a_long_month = 
true, $a_further_options = array(), $emptyoption = 
false)
 
  854        if (isset($a_further_options[
'disabled']) and $a_further_options[
'disabled']) {
 
  855            $disabled = 
'disabled="disabled" ';
 
  860            if (!strlen($year)) {
 
  861                $year = $now[
"year"];
 
  863            if (!strlen($month)) {
 
  864                $month = $now[
"mon"];
 
  872        $month = (int) $month;
 
  877        $sel_day .= 
'<select class="form-control" ';
 
  878        if (isset($a_further_options[
'select_attributes'])) {
 
  879            foreach ($a_further_options[
'select_attributes'] as 
$name => $value) {
 
  880                $sel_day .= (
$name . 
'="' . $value . 
'" ');
 
  884        $sel_day .= $disabled . 
"name=\"" . $prefix . 
"[d]\" id=\"" . $prefix . 
"_d\">\n";
 
  887            $sel_day .= 
"<option value=\"0\">--</option>\n";
 
  889        for (
$i = 1; 
$i <= 31; 
$i++) {
 
  890            $sel_day .= 
"<option value=\"$i\">" . 
sprintf(
"%02d", 
$i) . 
"</option>\n";
 
  892        $sel_day .= 
"</select>\n";
 
  893        $sel_day = preg_replace(
"/(value\=\"$day\")/", 
"$1 selected=\"selected\"", $sel_day);
 
  896        $sel_month = 
'<select class="form-control" ';
 
  897        if (isset($a_further_options[
'select_attributes'])) {
 
  898            foreach ($a_further_options[
'select_attributes'] as 
$name => $value) {
 
  899                $sel_month .= (
$name . 
'="' . $value . 
'" ');
 
  902        $sel_month .= $disabled . 
"name=\"" . $prefix . 
"[m]\" id=\"" . $prefix . 
"_m\">\n";
 
  905            $sel_month .= 
"<option value=\"0\">--</option>\n";
 
  907        for (
$i = 1; 
$i <= 12; 
$i++) {
 
  909                $sel_month .= 
"<option value=\"$i\">" . 
$lng->txt(
"month_" . 
sprintf(
"%02d", 
$i) . 
"_long") . 
"</option>\n";
 
  911                $sel_month .= 
"<option value=\"$i\">" . 
$i . 
"</option>\n";
 
  914        $sel_month .= 
"</select>\n";
 
  915        $sel_month = preg_replace(
"/(value\=\"$month\")/", 
"$1 selected=\"selected\"", $sel_month);
 
  918        $sel_year = 
'<select class="form-control" ';
 
  919        if (isset($a_further_options[
'select_attributes'])) {
 
  920            foreach ($a_further_options[
'select_attributes'] as 
$name => $value) {
 
  921                $sel_year .= (
$name . 
'="' . $value . 
'" ');
 
  924        $sel_year .= $disabled . 
"name=\"" . $prefix . 
"[y]\" id=\"" . $prefix . 
"_y\">\n";
 
  925        if ((strlen($startyear) == 0) || ($startyear > $year)) {
 
  926            if (!$emptyoption || $year != 0) {
 
  927                $startyear = $year - 5;
 
  931        if (($year + 5) < (
date(
'Y', time()) + 5)) {
 
  932            $end_year = 
date(
'Y', time()) + 5;
 
  934            $end_year = $year + 5;
 
  938            $sel_year .= 
"<option value=\"0\">----</option>\n";
 
  940        for (
$i = $startyear; 
$i <= $end_year; 
$i++) {
 
  941            $sel_year .= 
"<option value=\"$i\">" . 
sprintf(
"%04d", 
$i) . 
"</option>\n";
 
  943        $sel_year .= 
"</select>\n";
 
  944        $sel_year = preg_replace(
"/(value\=\"$year\")/", 
"$1 selected=\"selected\"", $sel_year);
 
  947        $dateformat = 
"d-m-Y";
 
  948        $dateformat = strtolower(preg_replace(
"/\W/", 
"", $dateformat));
 
  949        $dateformat = strtolower(preg_replace(
"/(\w)/", 
"%%$1", $dateformat));
 
  950        $dateformat = preg_replace(
"/%%d/", $sel_day, $dateformat);
 
  951        $dateformat = preg_replace(
"/%%m/", $sel_month, $dateformat);
 
  952        $dateformat = preg_replace(
"/%%y/", $sel_year, $dateformat);
 
  974    public static function makeTimeSelect($prefix, $short = 
true, $hour = 
"", $minute = 
"", $second = 
"", $a_use_default = 
true, $a_further_options = array())
 
  983        if (count($a_further_options)) {
 
  984            if (isset($a_further_options[
'minute_steps'])) {
 
  985                $minute_steps = $a_further_options[
'minute_steps'];
 
  987            if (isset($a_further_options[
'disabled']) and $a_further_options[
'disabled']) {
 
  988                $disabled = 
'disabled="disabled" ';
 
  992        if ($a_use_default and !strlen(
"$hour$minute$second")) {
 
  999            $minute = (int) $minute;
 
 1000            $second = (int) $second;
 
 1003        $sel_hour = 
'<select ';
 
 1004        if (isset($a_further_options[
'select_attributes'])) {
 
 1005            foreach ($a_further_options[
'select_attributes'] as 
$name => $value) {
 
 1006                $sel_hour .= 
$name . 
'=' . $value . 
' ';
 
 1009        $sel_hour .= 
" " . $disabled . 
"name=\"" . $prefix . 
"[h]\" id=\"" . $prefix . 
"_h\" class=\"form-control\">\n";
 
 1012        for (
$i = 0; 
$i <= 23; 
$i++) {
 
 1014                $sel_hour .= 
"<option value=\"$i\">" . 
sprintf(
"%02d", 
$i) . 
"</option>\n";
 
 1016                $sel_hour .= 
"<option value=\"$i\">" . 
date(
"ga", mktime(
$i, 0, 0)) . 
"</option>\n";
 
 1019        $sel_hour .= 
"</select>\n";
 
 1020        $sel_hour = preg_replace(
"/(value\=\"$hour\")/", 
"$1 selected=\"selected\"", $sel_hour);
 
 1023        $sel_minute .= 
"<select " . $disabled . 
"name=\"" . $prefix . 
"[m]\" id=\"" . $prefix . 
"_m\" class=\"form-control\">\n";
 
 1025        for (
$i = 0; 
$i <= 59; 
$i = 
$i + $minute_steps) {
 
 1026            $sel_minute .= 
"<option value=\"$i\">" . 
sprintf(
"%02d", 
$i) . 
"</option>\n";
 
 1028        $sel_minute .= 
"</select>\n";
 
 1029        $sel_minute = preg_replace(
"/(value\=\"$minute\")/", 
"$1 selected=\"selected\"", $sel_minute);
 
 1033            $sel_second .= 
"<select " . $disabled . 
"name=\"" . $prefix . 
"[s]\" id=\"" . $prefix . 
"_s\" class=\"form-control\">\n";
 
 1035            for (
$i = 0; 
$i <= 59; 
$i++) {
 
 1036                $sel_second .= 
"<option value=\"$i\">" . 
sprintf(
"%02d", 
$i) . 
"</option>\n";
 
 1038            $sel_second .= 
"</select>\n";
 
 1039            $sel_second = preg_replace(
"/(value\=\"$second\")/", 
"$1 selected=\"selected\"", $sel_second);
 
 1041        $timeformat = 
$lng->text[
"lang_timeformat"];
 
 1042        if (strlen($timeformat) == 0) {
 
 1043            $timeformat = 
"H:i:s";
 
 1045        $timeformat = strtolower(preg_replace(
"/\W/", 
"", $timeformat));
 
 1046        $timeformat = preg_replace(
"/(\w)/", 
"%%$1", $timeformat);
 
 1047        $timeformat = preg_replace(
"/%%h/", $sel_hour, $timeformat);
 
 1048        $timeformat = preg_replace(
"/%%i/", $sel_minute, $timeformat);
 
 1050            $timeformat = preg_replace(
"/%%s/", 
"", $timeformat);
 
 1052            $timeformat = preg_replace(
"/%%s/", $sel_second, $timeformat);
 
 1076        if ($mailAddressParserFactory === 
null) {
 
 1083                $parser    = $mailAddressParserFactory->getParser($a_email);
 
 1084                $addresses = 
$parser->parse();
 
 1091                "AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|" .
 
 1092                "BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|" .
 
 1093                "ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|" .
 
 1094                "HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|" .
 
 1095                "LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|" .
 
 1096                "MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|" .
 
 1097                "PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|" .
 
 1098                "TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|" .
 
 1099                "WF|WS|XN|YE|YT|YU|ZA|ZM|ZW" 
 1102            return(preg_match(
"/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(" . $tlds . 
")|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i", $a_email));
 
 1114    public static function isPassword($a_passwd, &$customError = 
null)
 
 1120        include_once(
'./Services/PrivacySecurity/classes/class.ilSecuritySettings.php');
 
 1124        if (empty($a_passwd)) {
 
 1125            $customError = 
$lng->txt(
'password_empty');
 
 1133        if ($security->getPasswordMinLength() > 0 && strlen($a_passwd) < $security->getPasswordMinLength()) {
 
 1134            $errors[] = 
sprintf(
$lng->txt(
'password_to_short'), $security->getPasswordMinLength());
 
 1135            $isPassword = 
false;
 
 1140        if ($security->getPasswordMaxLength() > 0 && strlen($a_passwd) > $security->getPasswordMaxLength()) {
 
 1141            $errors[] = 
sprintf(
$lng->txt(
'password_to_long'), $security->getPasswordMaxLength());
 
 1142            $isPassword = 
false;
 
 1146        if ($security->isPasswordCharsAndNumbersEnabled()) {
 
 1147            $hasCharsAndNumbers = 
true;
 
 1150            if (!preg_match(
'/[A-Za-z]+/', $a_passwd)) {
 
 1151                $hasCharsAndNumbers = 
false;
 
 1155            if (!preg_match(
'/[0-9]+/', $a_passwd)) {
 
 1156                $hasCharsAndNumbers = 
false;
 
 1159            if (!$hasCharsAndNumbers) {
 
 1160                $errors[] = 
$lng->txt(
'password_must_chars_and_numbers');
 
 1161                $isPassword = 
false;
 
 1165        require_once 
'Services/Utilities/classes/class.ilStr.php';
 
 1166        if ($security->getPasswordNumberOfUppercaseChars() > 0) {
 
 1167            if (
ilStr::strLen($a_passwd) - 
ilStr::strLen(preg_replace(
'/[A-Z]/', 
'', $a_passwd)) < $security->getPasswordNumberOfUppercaseChars()) {
 
 1168                $errors[]   = 
sprintf(
$lng->txt(
'password_must_contain_ucase_chars'), $security->getPasswordNumberOfUppercaseChars());
 
 1169                $isPassword = 
false;
 
 1173        if ($security->getPasswordNumberOfLowercaseChars() > 0) {
 
 1174            if (
ilStr::strLen($a_passwd) - 
ilStr::strLen(preg_replace(
'/[a-z]/', 
'', $a_passwd)) < $security->getPasswordNumberOfLowercaseChars()) {
 
 1175                $errors[]   = 
sprintf(
$lng->txt(
'password_must_contain_lcase_chars'), $security->getPasswordNumberOfLowercaseChars());
 
 1176                $isPassword = 
false;
 
 1181        if ($security->isPasswordSpecialCharsEnabled()) {
 
 1183            if (!preg_match(self::getPasswordValidChars(
true, 
true), $a_passwd)) {
 
 1184                $errors[] = 
$lng->txt(
'password_must_special_chars');
 
 1185                $isPassword = 
false;
 
 1190        if (!preg_match(self::getPasswordValidChars(), $a_passwd)) {
 
 1191            $errors[] = 
$lng->txt(
'password_contains_invalid_chars');
 
 1192            $isPassword = 
false;
 
 1198        } elseif (count(
$errors) > 1) {
 
 1199            $customError = 
$lng->txt(
'password_multiple_errors');
 
 1200            $customError .= 
'<br />' . implode(
'<br />', 
$errors);
 
 1214        include_once 
'Services/PrivacySecurity/classes/class.ilSecuritySettings.php';
 
 1219        if (is_string($user)) {
 
 1221        } elseif (is_array($user)) {
 
 1223            $login  = $user[
'login'];
 
 1224            $userId = $user[
'id'];
 
 1226            $login  = $user->getLogin();
 
 1227            $userId = $user->getId();
 
 1232        if ($login && (
int) $security->getPasswordMustNotContainLoginnameStatus() &&
 
 1233            strpos(strtolower($clear_text_password), strtolower($login)) !== 
false 
 1235            $error_language_variable = 
'password_contains_parts_of_login_err';
 
 1252            if ($a_only_special_chars) {
 
 1253                return '/[_\.\+\?\#\-\*\@!\$\%\~\/\:\;]+/';
 
 1255                return '/^[A-Za-z0-9_\.\+\?\#\-\*\@!\$\%\~\/\:\;]+$/';
 
 1258            return 'A-Z a-z 0-9 _.+?#-*@!$%~/:;';
 
 1275        include_once(
'./Services/PrivacySecurity/classes/class.ilSecuritySettings.php');
 
 1278        $infos = array(
sprintf(
$lng->txt(
'password_allow_chars'), self::getPasswordValidChars(
false)));
 
 1281        if ($security->getPasswordMinLength() > 0) {
 
 1282            $infos[] = 
sprintf(
$lng->txt(
'password_to_short'), $security->getPasswordMinLength());
 
 1286        if ($security->getPasswordMaxLength() > 0) {
 
 1287            $infos[] = 
sprintf(
$lng->txt(
'password_to_long'), $security->getPasswordMaxLength());
 
 1291        if ($security->isPasswordCharsAndNumbersEnabled()) {
 
 1292            $infos[] = 
$lng->txt(
'password_must_chars_and_numbers');
 
 1296        if ($security->isPasswordSpecialCharsEnabled()) {
 
 1297            $infos[] = 
$lng->txt(
'password_must_special_chars');
 
 1300        if ($security->getPasswordNumberOfUppercaseChars() > 0) {
 
 1301            $infos[] = 
sprintf(
$lng->txt(
'password_must_contain_ucase_chars'), $security->getPasswordNumberOfUppercaseChars());
 
 1304        if ($security->getPasswordNumberOfLowercaseChars() > 0) {
 
 1305            $infos[] = 
sprintf(
$lng->txt(
'password_must_contain_lcase_chars'), $security->getPasswordNumberOfLowercaseChars());
 
 1308        return implode(
'<br />', $infos);
 
 1319        if (empty($a_login)) {
 
 1323        if (strlen($a_login) < 3) {
 
 1330        if (!preg_match(
"/^[A-Za-z0-9_\.\+\*\@!\$\%\~\-]+$/", $a_login)) {
 
 1354        $a_next_blank = 
false,
 
 1355        $a_keep_extension = 
false 
 1357        include_once(
"./Services/Utilities/classes/class.ilStr.php");
 
 1359            if ($a_next_blank) {
 
 1369            if ($a_keep_extension) {
 
 1370                $p = strrpos($a_str, 
'.');      
 
 1372            if ($p === 
false || $p == 0 || strlen($a_str) - $p > $a_len) {
 
 1375                    $a_str .= 
"\xe2\x80\xa6"; 
 
 1379                    $a_str = 
ilStr::subStr($a_str, 0, $len - (strlen($a_str) - $p + 1)) . 
"\xe2\x80\xa6" . substr($a_str, $p);
 
 1381                    $a_str = 
ilStr::subStr($a_str, 0, $len - (strlen($a_str) - $p + 1)) . substr($a_str, $p);
 
 1404        include_once(
"./Services/Utilities/classes/class.ilStr.php");
 
 1405        $str_arr = explode(
" ", $a_str);
 
 1407        for (
$i = 0; 
$i < count($str_arr); 
$i++) {
 
 1411                    $str_arr[
$i].= 
"...";
 
 1416        return implode($str_arr, 
" ");
 
 1431        while (is_int(strpos($a_str, 
"="))) {
 
 1432            $eq_pos = strpos($a_str, 
"=");
 
 1433            $qu1_pos = strpos($a_str, 
"\"");
 
 1434            $qu2_pos = strpos(substr($a_str, $qu1_pos + 1), 
"\"") + $qu1_pos + 1;
 
 1435            if (is_int($eq_pos) && is_int($qu1_pos) && is_int($qu2_pos)) {
 
 1436                $var = trim(substr($a_str, 0, $eq_pos));
 
 1437                $val = trim(substr($a_str, $qu1_pos + 1, ($qu2_pos - $qu1_pos) - 1));
 
 1438                $attribs[$var] = $val;
 
 1439                $a_str = substr($a_str, $qu2_pos + 1);
 
 1465    public static function rCopy($a_sdir, $a_tdir, $preserveTimeAttributes = 
false)
 
 1467        $sourceFS = LegacyPathHelper::deriveFilesystemFrom($a_sdir);
 
 1468        $targetFS = LegacyPathHelper::deriveFilesystemFrom($a_tdir);
 
 1470        $sourceDir = LegacyPathHelper::createRelativePath($a_sdir);
 
 1471        $targetDir = LegacyPathHelper::createRelativePath($a_tdir);
 
 1474        if (!$sourceFS->hasDir($sourceDir)) {
 
 1478        $sourceList = $sourceFS->listContents($sourceDir, 
true);
 
 1480        foreach ($sourceList as $item) {
 
 1481            if ($item->isDir()) {
 
 1485                $itemPath = $targetDir . 
'/' . substr($item->getPath(), strlen($sourceDir));
 
 1486                $stream = $sourceFS->readStream($item->getPath());
 
 1487                $targetFS->writeStream($itemPath, 
$stream);
 
 1514        if ($mode == 
"filesystem") {
 
 1515            return "./" . ILIAS_WEB_DIR . 
"/" . CLIENT_ID;
 
 1517            if (
defined(
"ILIAS_MODULE")) {
 
 1518                return "../" . ILIAS_WEB_DIR . 
"/" . CLIENT_ID;
 
 1520                return "./" . ILIAS_WEB_DIR . 
"/" . CLIENT_ID;
 
 1537        return CLIENT_DATA_DIR;
 
 1551        include_once(
"./Services/User/classes/class.ilObjUser.php");
 
 1552        return ilObjUser::_getUsersOnline($a_user_id);
 
 1567        include_once(
"./Services/User/classes/class.ilObjUser.php");
 
 1580        if ($a_temp_path === 
null) {
 
 1583            $temp_path = $a_temp_path;
 
 1586        if (!is_dir($temp_path)) {
 
 1589        $temp_name = tempnam($temp_path, 
"tmp");
 
 1595        $temp_name = str_replace(
"\\", 
"/", $temp_name);
 
 1630    public static function unzip($a_file, $overwrite = 
false, $a_flat = 
false)
 
 1636        if (!is_file($a_file)) {
 
 1644            copy($a_file, $tmpdir . DIRECTORY_SEPARATOR . basename($a_file));
 
 1645            $orig_file = $a_file;
 
 1646            $a_file = $tmpdir . DIRECTORY_SEPARATOR . basename($a_file);
 
 1647            $origpathinfo = pathinfo($orig_file);
 
 1650        $pathinfo = pathinfo($a_file);
 
 1651        $dir = $pathinfo[
"dirname"];
 
 1652        $file = $pathinfo[
"basename"];
 
 1657        $unzip = PATH_TO_UNZIP;
 
 1708        $dir_realpath = realpath($dir);
 
 1709        foreach (
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir)) as 
$name => $f) {
 
 1710            if (is_link(
$name)) {
 
 1712                if (substr(
$target, 0, strlen($dir_realpath)) != $dir_realpath) {
 
 1721            include_once(
"./Services/Utilities/classes/class.ilFileUtils.php");
 
 1722            $filearray = array();
 
 1724            if (is_array($filearray[
"file"])) {
 
 1725                foreach ($filearray[
"file"] as $k => $f) {
 
 1726                    if (substr($f, 0, 1) != 
"." && $f != basename($orig_file)) {
 
 1727                        copy($filearray[
"path"][$k] . $f, $origpathinfo[
"dirname"] . DIRECTORY_SEPARATOR . $f);
 
 1741    public static function zip($a_dir, $a_file, $compress_content = 
false)
 
 1745        if ($compress_content) {
 
 1747            $pathinfo = pathinfo($a_dir);
 
 1748            chdir($pathinfo[
"dirname"]);
 
 1751        $pathinfo = pathinfo($a_file);
 
 1752        $dir = $pathinfo[
"dirname"];
 
 1753        $file = $pathinfo[
"basename"];
 
 1755        if (!$compress_content) {
 
 1766        if (is_array($a_dir)) {
 
 1768            foreach ($a_dir as $dir) {
 
 1769                $name = basename($dir);
 
 1773            $name = basename($a_dir);
 
 1774            if (trim(
$name) != 
"*") {
 
 1791        $pathinfo = pathinfo($a_dir);
 
 1792        chdir($pathinfo[
"dirname"]);
 
 1794        $pathinfo = pathinfo($a_file);
 
 1795        $dir = $pathinfo[
"dirname"];
 
 1796        $file = $pathinfo[
"basename"];
 
 1799        $mkisofs = PATH_TO_MKISOFS;
 
 1805        $name = basename($a_dir);
 
 1808        $zipcmd = 
"-r -J -o " . $a_file . 
" " . 
$source;
 
 1824        return PATH_TO_CONVERT;
 
 1850        if ($current_version >= 
$version) {
 
 1864        if (preg_match(
"/([0-9]+)\.([0-9]+)\.([0-9]+)([\.|\-]([0-9]+))?/", $a_version, $match)) {
 
 1865            $version = str_pad($match[1], 2, 0, STR_PAD_LEFT) .
 
 1866                str_pad($match[2], 2, 0, STR_PAD_LEFT) .
 
 1867                str_pad($match[3], 2, 0, STR_PAD_LEFT) .
 
 1868                str_pad($match[5], 2, 0, STR_PAD_LEFT);
 
 1885        $a_target_format = 
"",
 
 1887        $a_background_color = 
"" 
 1889        $format_str = ($a_target_format != 
"")
 
 1890            ? strtoupper($a_target_format) . 
":" 
 1893        if ($a_geometry != 
"") {
 
 1894            if (is_int(strpos($a_geometry, 
"x"))) {
 
 1895                $geometry = 
" -geometry " . $a_geometry . 
" ";
 
 1897                $geometry = 
" -geometry " . $a_geometry . 
"x" . $a_geometry . 
" ";
 
 1901        $bg_color = ($a_background_color != 
"")
 
 1902            ? 
" -background color " . $a_background_color . 
" " 
 1919    public static function resizeImage($a_from, $a_to, $a_width, $a_height, $a_constrain_prop = 
false)
 
 1921        if ($a_constrain_prop) {
 
 1922            $size = 
" -geometry " . $a_width . 
"x" . $a_height . 
" ";
 
 1924            $size = 
" -resize " . $a_width . 
"x" . $a_height . 
"! ";
 
 1937    public static function img($a_src, $a_alt = 
"", $a_width = 
"", $a_height = 
"", $a_border = 0, $a_id = 
"", $a_class = 
"")
 
 1939        $img = 
'<img src="' . $a_src . 
'"';
 
 1941            $img.= 
' alt="' . htmlspecialchars($a_alt) . 
'" title="' . htmlspecialchars($a_alt) . 
'"';
 
 1943        if ($a_width != 
"") {
 
 1944            $img.= 
' width="' . htmlspecialchars($a_width) . 
'"';
 
 1946        if ($a_height != 
"") {
 
 1947            $img.= 
' height="' . htmlspecialchars($a_height) . 
'"';
 
 1949        if ($a_class != 
"") {
 
 1950            $img.= 
' class="' . $a_class . 
'"';
 
 1953            $img.= 
' id="' . $a_id . 
'"';
 
 1955        $img.= 
' border="' . (int) $a_border . 
'"/>';
 
 1966    public static function deliverData($a_data, $a_filename, $mime = 
"application/octet-stream", $charset = 
"")
 
 1968        $disposition = 
"attachment"; 
 
 1971        include_once 
'./Services/Http/classes/class.ilHTTPS.php';
 
 1980            #header("Pragma: ");
 
 1981            #header("Cache-Control: ");
 
 1982            #header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
 
 1983            #header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
 
 1984            #header("Cache-Control: no-store, no-cache, must-revalidate"); 
 
 1985            #header("Cache-Control: post-check=0, pre-check=0", false);
 
 1986        } elseif ($disposition == 
"attachment") {
 
 1987            header(
"Cache-control: private");
 
 1989            header(
"Cache-Control: no-cache, must-revalidate");
 
 1990            header(
"Pragma: no-cache");
 
 1995        if (strlen($charset)) {
 
 1996            $charset = 
"; charset=$charset";
 
 1998        header(
"Content-Type: $mime$charset");
 
 1999        header(
"Content-Disposition:$disposition; filename=\"" . 
$ascii_filename . 
"\"");
 
 2001        header(
"Content-Length: " . (
string) (strlen($a_data)));
 
 2005            header(
'Cache-Control: must-revalidate, post-check=0, pre-check=0');
 
 2006            header(
'Pragma: public');
 
 2009        header(
"Connection: close");
 
 2027        $removeAfterDelivery = 
false,
 
 2028        $a_exit_after = 
true 
 2032        if (!file_exists($a_file)) {
 
 2043        if (strlen($a_mime)) {
 
 2044            $delivery->setMimeType($a_mime);
 
 2047        $delivery->setDownloadFileName($a_filename);
 
 2048        $delivery->setConvertFileNameToAsci((
bool) !
$DIC[
'ilClientIniFile']->
readVariable(
'file_access', 
'disable_ascii'));
 
 2049        $delivery->setDeleteFile($removeAfterDelivery);
 
 2050        $delivery->deliver();
 
 2065        $chunksize = 1*(1024*1024); 
 
 2067        $handle = fopen($a_file, 
'rb');
 
 2068        if ($handle === 
false) {
 
 2071        while (!feof($handle)) {
 
 2072            $buffer = fread($handle, $chunksize);
 
 2075        return fclose($handle);
 
 2106        $umlauts = array(
"Ä"=>
"Ae", 
"Ö"=>
"Oe", 
"Ü"=>
"Ue",
 
 2107            "ä"=>
"ae", 
"ö"=>
"oe", 
"ü"=>
"ue", 
"ß"=>
"ss");
 
 2108        foreach ($umlauts as $src => $tgt) {
 
 2109            $a_filename = str_replace($src, $tgt, $a_filename);
 
 2130        $sep = 
'###HTMLTAG###';
 
 2132        preg_match_all(
"@<[^>]*>@", $htmlText, $matches);
 
 2133        $tmp = preg_replace(
"@(<[^>]*>)@", $sep, $htmlText);
 
 2134        $tmp = explode($sep, $tmp);
 
 2136        for (
$i=0; 
$i<count($tmp); 
$i++) {
 
 2137            $tmp[
$i] = htmlentities($tmp[
$i], ENT_COMPAT, 
"UTF-8");
 
 2140        $tmp = join($sep, $tmp);
 
 2142        for (
$i=0; 
$i<count($matches[0]); 
$i++) {
 
 2143            $tmp = preg_replace(
"@$sep@", $matches[0][
$i], $tmp, 1);
 
 2157        return PATH_TO_JAVA;
 
 2176        $url = (is_int(strpos($a_url, 
"?")))
 
 2177            ? $a_url . $amp . $a_par
 
 2178            : $a_url . 
"?" . $a_par;
 
 2203        $a_dir = trim($a_dir);
 
 2206        if (substr($a_dir, -1) == 
"/") {
 
 2207            $a_dir = substr($a_dir, 0, -1);
 
 2211        if (!(
$path = substr($a_dir, 0, strrpos($a_dir, 
"/") - strlen($a_dir)))) {
 
 2217        return @mkdir($a_dir, fileperms(
$path));
 
 2242        $dirs = array($a_dir);
 
 2243        $a_dir = dirname($a_dir);
 
 2246        while ($last_dirname != $a_dir) {
 
 2247            array_unshift($dirs, $a_dir);
 
 2248            $last_dirname = $a_dir;
 
 2249            $a_dir = dirname($a_dir);
 
 2253        $reverse_paths = array_reverse($dirs, 
true);
 
 2255        foreach ($reverse_paths as 
$key => $value) {
 
 2256            if ($found_index == -1) {
 
 2257                if (is_dir($value)) {
 
 2258                    $found_index = 
$key;
 
 2264        foreach ($dirs as $dirindex => $dir) {
 
 2266            if ($dirindex >= $found_index) {
 
 2267                if (!file_exists($dir)) {
 
 2268                    if (strcmp(substr($dir, strlen($dir)-1, 1), 
"/") == 0) {
 
 2271                        $dir = substr($dir, 0, strlen($dir)-1);
 
 2273                    if (!mkdir($dir, $umask)) {
 
 2274                        error_log(
"Can't make directory: $dir");
 
 2277                } elseif (!is_dir($dir)) {
 
 2282                    $umask = fileperms($dir);
 
 2305    public static function delDir($a_dir, $a_clean_only = 
false)
 
 2307        if (!is_dir($a_dir) || is_int(strpos($a_dir, 
".."))) {
 
 2311        $current_dir = opendir($a_dir);
 
 2320        while ($entryname = readdir($current_dir)) {
 
 2325            if (is_dir($a_dir . 
"/" . 
$file) and (
$file != 
"." and 
$file!=
"..")) {
 
 2328                unlink($a_dir . 
"/" . 
$file);
 
 2332        closedir($current_dir);
 
 2333        if (!$a_clean_only) {
 
 2354    public static function getDir($a_dir, $a_rec = 
false, $a_sub_dir = 
"")
 
 2356        $current_dir = opendir($a_dir . $a_sub_dir);
 
 2360        $subitems = array();
 
 2361        while ($entry = readdir($current_dir)) {
 
 2362            if (is_dir($a_dir . 
"/" . $entry)) {
 
 2363                $dirs[$entry] = array(
"type" => 
"dir", 
"entry" => $entry,
 
 2364                    "subdir" => $a_sub_dir);
 
 2365                if ($a_rec && $entry != 
"." && $entry != 
"..") {
 
 2367                    $subitems = array_merge($subitems, 
$si);
 
 2370                if ($entry != 
"." && $entry != 
"..") {
 
 2371                    $size = filesize($a_dir . $a_sub_dir . 
"/" . $entry);
 
 2372                    $files[$entry] = array(
"type" => 
"file", 
"entry" => $entry,
 
 2373                    "size" => 
$size, 
"subdir" => $a_sub_dir);
 
 2380        return array_merge($dirs, 
$files, $subitems);
 
 2391        if (is_array($a_arr)) {
 
 2392            foreach ($a_arr as $k => $v) {
 
 2406        $df = new \ILIAS\Data\Factory;
 
 2419        if (is_array($a_data)) {
 
 2420            foreach ($a_data as $k => $v) {
 
 2441    public static function stripSlashes($a_str, $a_strip_html = 
true, $a_allow = 
"")
 
 2443        if (ini_get(
"magic_quotes_gpc")) {
 
 2444            $a_str = stripslashes($a_str);
 
 2460        if (ini_get(
"magic_quotes_gpc")) {
 
 2461            $a_str = stripslashes($a_str);
 
 2473    public static function secureString($a_str, $a_strip_html = 
true, $a_allow = 
"")
 
 2476        $only_secure = 
true;
 
 2477        $allow_tags = explode(
">", $a_allow);
 
 2479        $allow_array = array();
 
 2480        foreach ($allow_tags as $allow) {
 
 2482                $allow = str_replace(
"<", 
"", $allow);
 
 2484                if (!in_array($allow, $sec_tags)) {
 
 2485                    $only_secure = 
false;
 
 2487                $allow_array[] = $allow;
 
 2492        if (($only_secure || $a_allow == 
"") && $a_strip_html) {
 
 2493            if ($a_allow == 
"") {
 
 2494                $allow_array = array(
"b", 
"i", 
"strong", 
"em", 
"code", 
"cite",
 
 2495                    "gap", 
"sub", 
"sup", 
"pre", 
"strike", 
"bdo");
 
 2501            $a_str = strip_tags($a_str);                
 
 2513            if ($a_strip_html) {
 
 2523        return array(
"strong", 
"em", 
"u", 
"strike", 
"ol", 
"li", 
"ul", 
"p", 
"div",
 
 2524            "i", 
"b", 
"code", 
"sup", 
"sub", 
"pre", 
"gap", 
"a", 
"img", 
"bdo");
 
 2529        foreach ($allow_array as 
$t) {
 
 2542                        array(
"param" => 
"align", 
"value" => 
"left"),
 
 2543                        array(
"param" => 
"align", 
"value" => 
"center"),
 
 2544                        array(
"param" => 
"align", 
"value" => 
"justify"),
 
 2545                        array(
"param" => 
"align", 
"value" => 
"right")
 
 2560        foreach ($allow_array as 
$t) {
 
 2573                        array(
"param" => 
"align", 
"value" => 
"left"),
 
 2574                        array(
"param" => 
"align", 
"value" => 
"center"),
 
 2575                        array(
"param" => 
"align", 
"value" => 
"justify"),
 
 2576                        array(
"param" => 
"align", 
"value" => 
"right")
 
 2598        if (ini_get(
"magic_quotes_gpc")) {
 
 2599            return stripslashes($a_str);
 
 2624        if ($a_make_links_clickable) {
 
 2641            $numberOfMatches = preg_match_all(
'/(?:(?:http|https|ftp|ftps|mailto):|www\.)(?:[a-zA-Z0-9]|[;\/?:|&=+$,]|[\\-_.!~*\'()]|%[0-9a-fA-F]{2}|#|[;?:@&=+$,])+/', $a_str, $matches, PREG_OFFSET_CAPTURE);
 
 2645            foreach ($matches[0] as $match) {
 
 2646                $matched_text = $match[0];
 
 2650                $encoded .= nl2br(htmlspecialchars(substr($a_str, $pos1, $pos2 - $pos1)));
 
 2656                $pos1 = $pos2 + strlen($matched_text);
 
 2658            if ($pos1 < strlen($a_str)) {
 
 2659                $encoded .= nl2br(htmlspecialchars(substr($a_str, $pos1)));
 
 2662            $encoded = nl2br(htmlspecialchars($a_str));
 
 2675        $att = $ws . 
"[^>]*" . $ws;
 
 2678            '/<(' . 
$tag . $att . 
'(' . $tag_att . $ws . 
'="' . $ws . 
'(([$@!*()~;,_0-9A-z\/:=%.&#?+\-])*)")' . $att . 
')>/i',
 
 2683            $a_str = preg_replace(
 
 2684                "/<" . preg_quote($found[1], 
"/") . 
">/i",
 
 2685                '<' . 
$tag . 
' ' . $tag_att . $tag_att . 
'="' . $found[3] . 
'">',
 
 2688            if ($old_str == $a_str) {
 
 2689                $ilLog->write(
"ilUtil::maskA-" . htmlentities($old_str) . 
" == " .
 
 2690                    htmlentities($a_str));
 
 2694        $a_str = str_ireplace(
 
 2709            '/<(' . 
$tag . 
' ' . $tag_att . $tag_att . 
'="(([$@!*()~;,_0-9A-z\/:=%.&#?+\-])*)")>/i',
 
 2714            $a_str = preg_replace(
 
 2715                "/<" . preg_quote($found[1], 
"/") . 
">/i",
 
 2719            if ($old_str == $a_str) {
 
 2720                $ilLog->write(
"ilUtil::unmaskA-" . htmlentities($old_str) . 
" == " .
 
 2721                    htmlentities($a_str));
 
 2725        $a_str = str_replace(
'</' . 
$tag . 
'>', 
'</' . 
$tag . 
'>', $a_str);
 
 2731        $a_str = str_replace(
 
 2732            array(
"<$t>", 
"<" . strtoupper(
$t) . 
">"),
 
 2733            "<" . 
$t . 
">",
 
 2736        $a_str = str_replace(
 
 2737            array(
"</$t>", 
"</" . strtoupper(
$t) . 
">"),
 
 2738            "</" . 
$t . 
">",
 
 2742        if (is_array($fix_param)) {
 
 2743            foreach ($fix_param  as $p) {
 
 2746                $a_str = str_replace(
 
 2748                    "<" . 
"$t $k=\"$v\"" . 
">",
 
 2759        $a_str = str_replace(
"<" . 
$t . 
">", 
"<" . 
$t . 
">", $a_str);
 
 2760        $a_str = str_replace(
"</" . 
$t . 
">", 
"</" . 
$t . 
">", $a_str);
 
 2762        if (is_array($fix_param)) {
 
 2763            foreach ($fix_param  as $p) {
 
 2766                $a_str = str_replace(
 
 2767                    "<$t $k=\"$v\">",
 
 2768                    "<" . 
"$t $k=\"$v\"" . 
">",
 
 2778        $a_str = str_ireplace(
"javascript", 
"jvscrpt", $a_str);
 
 2779        $a_str = str_ireplace(array(
"%00", 
"%0a", 
"%0d", 
"%1a", 
"�", 
"�",
 
 2780            "�", 
"�", 
"
", 
"
", 
"
", 
"
"), 
"-", $a_str);
 
 2801        $negativestr = 
"a,abbr,acronym,address,applet,area,base,basefont," .
 
 2802            "big,blockquote,body,br,button,caption,center,cite,code,col," .
 
 2803            "colgroup,dd,del,dfn,dir,div,dl,dt,em,fieldset,font,form,frame," .
 
 2804            "frameset,h1,h2,h3,h4,h5,h6,head,hr,html,i,iframe,img,input,ins,isindex,kbd," .
 
 2805            "label,legend,li,link,map,menu,meta,noframes,noscript,object,ol," .
 
 2806            "optgroup,option,p,param,q,s,samp,script,select,small,span," .
 
 2807            "strike,strong,style,sub,sup,table,tbody,td,textarea,tfoot,th,thead," .
 
 2808            "title,tr,tt,u,ul,var";
 
 2809        $a_allow = strtolower($a_allow);
 
 2810        $negatives = explode(
",", $negativestr);
 
 2811        $outer_old_str = 
"";
 
 2812        while ($outer_old_str != $a_str) {
 
 2813            $outer_old_str = $a_str;
 
 2814            foreach ($negatives as $item) {
 
 2815                $pos = strpos($a_allow, 
"<$item>");
 
 2818                if ($pos === 
false) {
 
 2820                    while ($old_str != $a_str) {
 
 2822                        $a_str = preg_replace(
"/<\/?\s*$item(\/?)\s*>/i", 
"", $a_str);
 
 2823                        $a_str = preg_replace(
"/<\/?\s*$item(\/?)\s+([^>]*)>/i", 
"", $a_str);
 
 2831            $a_str = preg_replace(
"/<\s*\w*(\/?)(\s+[^>]*)?(\s+on[^>]*)>/i", 
"", $a_str);
 
 2834            $a_str = preg_replace(
"/<\s*\w*(\/?)\s+[^>]*javascript[^>]*>/i", 
"", $a_str);
 
 2838            $a_str = preg_replace(
"/<\s*\w*(\/?)\s+[^>]*expression[^>]*>/i", 
"", $a_str);
 
 2860        $a_str = htmlspecialchars($a_str);
 
 2864        $a_str = str_replace(
"{", 
"{", $a_str);
 
 2865        $a_str = str_replace(
"}", 
"}", $a_str);
 
 2881        if (filter_var(
$url, FILTER_VALIDATE_URL) === 
false &&
 
 2882            filter_var(
"http://" . 
$url, FILTER_VALIDATE_URL) === 
false &&
 
 2883            filter_var(
"http:" . 
$url, FILTER_VALIDATE_URL) === 
false &&
 
 2884            filter_var(
"http://de.de" . 
$url, FILTER_VALIDATE_URL) === 
false &&
 
 2885            filter_var(
"http://de.de/" . 
$url, FILTER_VALIDATE_URL) === 
false) {
 
 2888        if (trim(strtolower(parse_url(
$url, PHP_URL_SCHEME))) == 
"javascript") {
 
 2891        $url = htmlspecialchars(
$url, ENT_QUOTES);
 
 2908        return addslashes($a_str);
 
 2940        while (($spos=strpos($a_parstr, 
"=")) && 
$ok) {
 
 2942            $cpar = substr($a_parstr, 0, $spos);
 
 2943            $a_parstr = substr($a_parstr, $spos, strlen($a_parstr)-$spos);
 
 2944            while (substr($cpar, 0, 1)==
"," ||substr($cpar, 0, 1)==
" " || substr($cpar, 0, 1)==chr(13) || substr($cpar, 0, 1)==chr(10)) {
 
 2945                $cpar = substr($cpar, 1, strlen($cpar)-1);
 
 2947            while (substr($cpar, strlen($cpar)-1, 1)==
" " || substr($cpar, strlen($cpar)-1, 1)==chr(13) || substr($cpar, strlen($cpar)-1, 1)==chr(10)) {
 
 2948                $cpar = substr($cpar, 0, strlen($cpar)-1);
 
 2953            while ($cpar != $cpar_old) {
 
 2955                $cpar = preg_replace(
"/[^a-zA-Z0-9_]/i", 
"", $cpar);
 
 2960                if ($spos=strpos($a_parstr, 
"\"")) {
 
 2961                    $a_parstr = substr($a_parstr, $spos+1, strlen($a_parstr)-$spos);
 
 2962                    $spos=strpos($a_parstr, 
"\"");
 
 2963                    if (is_int($spos)) {
 
 2964                        $cval = substr($a_parstr, 0, $spos);
 
 2966                        $a_parstr = substr($a_parstr, $spos+1, strlen($a_parstr)-$spos-1);
 
 2985        if (is_array($a_par_arr)) {
 
 2987            foreach ($a_par_arr as $par => $val) {
 
 3004        $ret = $a_str . 
": ";
 
 3005        for (
$i=0; 
$i<strlen($a_str); 
$i++) {
 
 3006            $ret.= ord(substr($a_str, 
$i, 1)) . 
" ";
 
 3020        if (strtolower($a_yn) == 
"y") {
 
 3054        global $array_sortby,$array_sortorder;
 
 3056        if (!isset($array_sortby)) {
 
 3063        if ($array_sortorder == 
"asc") {
 
 3067        if ($array_sortorder == 
"desc") {
 
 3068            return !
ilStr::strCmp($a[$array_sortby], $b[$array_sortby]);
 
 3085        global $array_sortby,$array_sortorder;
 
 3087        if ($array_sortorder == 
"asc") {
 
 3088            return $a[
"$array_sortby"] > $b[
"$array_sortby"];
 
 3091        if ($array_sortorder == 
"desc") {
 
 3092            return $a[
"$array_sortby"] < $b[
"$array_sortby"];
 
 3110        $a_array_sortorder = 0,
 
 3112        $a_keep_keys = 
false 
 3114        include_once(
"./Services/Utilities/classes/class.ilStr.php");
 
 3117        if (!$a_keep_keys) {
 
 3118            return self::stableSortArray($array, $a_array_sortby, $a_array_sortorder, $a_numeric, $a_keep_keys);
 
 3122        global $array_sortby,$array_sortorder;
 
 3123        $array_sortby = $a_array_sortby;
 
 3125        if ($a_array_sortorder == 
"desc") {
 
 3126            $array_sortorder = 
"desc";
 
 3128            $array_sortorder = 
"asc";
 
 3132                uasort($array, array(
"ilUtil", 
"sort_func_numeric"));
 
 3134                usort($array, array(
"ilUtil", 
"sort_func_numeric"));
 
 3138                uasort($array, array(
"ilUtil", 
"sort_func"));
 
 3140                usort($array, array(
"ilUtil", 
"sort_func"));
 
 3162    public static function stableSortArray($array, $a_array_sortby, $a_array_sortorder = 0, $a_numeric = 
false)
 
 3164        global $array_sortby,$array_sortorder;
 
 3166        $array_sortby = $a_array_sortby;
 
 3168        if ($a_array_sortorder == 
"desc") {
 
 3169            $array_sortorder = 
"desc";
 
 3171            $array_sortorder = 
"asc";
 
 3175        $sort_array = array_values($array);
 
 3185    public static function mergesort(&$array, $cmp_function = 
'strcmp')
 
 3188        if (count($array) < 2) {
 
 3193        $halfway = count($array) / 2;
 
 3194        $array1 = array_slice($array, 0, $halfway);
 
 3195        $array2 = array_slice($array, $halfway);
 
 3202        if (call_user_func($cmp_function, end($array1), $array2[0]) < 1) {
 
 3203            $array = array_merge($array1, $array2);
 
 3210        while ($ptr1 < count($array1) && $ptr2 < count($array2)) {
 
 3211            if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2]) < 1) {
 
 3212                $array[] = $array1[$ptr1++];
 
 3214                $array[] = $array2[$ptr2++];
 
 3219        while ($ptr1 < count($array1)) {
 
 3220            $array[] = $array1[$ptr1++];
 
 3222        while ($ptr2 < count($array2)) {
 
 3223            $array[] = $array2[$ptr2++];
 
 3244        $existing_sub_key_values = array();
 
 3246        foreach ($array as 
$key=>$sub_array) {
 
 3247            if (!in_array($sub_array[$sub_key], $existing_sub_key_values)) {
 
 3248                $existing_sub_key_values[] = $sub_array[$sub_key];
 
 3268        $a_desired_type = strtolower($a_desired_type);
 
 3270        $im_types = ImageTypes();
 
 3272        switch ($a_desired_type) {
 
 3275            if ($im_types & IMG_JPG) {
 
 3278            if ($im_types & IMG_GIF) {
 
 3281            if ($im_types & IMG_PNG) {
 
 3287            if ($im_types & IMG_GIF) {
 
 3290            if ($im_types & IMG_JPG) {
 
 3293            if ($im_types & IMG_PNG) {
 
 3299            if ($im_types & IMG_PNG) {
 
 3302            if ($im_types & IMG_JPG) {
 
 3305            if ($im_types & IMG_GIF) {
 
 3311            if ($im_types & IMG_PNG) {
 
 3314            if ($im_types & IMG_JPG) {
 
 3317            if ($im_types & IMG_GIF) {
 
 3337        if (($a_mime == 
"image/gif") || ($a_mime == 
"image/jpeg") ||
 
 3338        ($a_mime == 
"image/png") || ($a_mime == 
"application/x-shockwave-flash") ||
 
 3339        ($a_mime == 
"image/tiff") || ($a_mime == 
"image/x-ms-bmp") ||
 
 3340        ($a_mime == 
"image/psd") || ($a_mime == 
"image/iff")) {
 
 3357        if (!isset(
$DIC[
'ilCtrl']) || !
$DIC[
'ilCtrl'] instanceof 
ilCtrl) {
 
 3360            $ctrl = 
$DIC->ctrl();
 
 3362        $ctrl->redirectToURL($a_script);
 
 3375        if (substr($a_value, 0, 4) == 
"il__") {
 
 3376            $a_value = 
"il_" . IL_INST_ID . 
"_" . substr($a_value, 4, strlen($a_value) - 4);
 
 3399        if (isset(
$DIC[
"ilErr"])) {
 
 3403        if (empty($a_group_name)) {
 
 3404            $message = __METHOD__ . 
": No groupname given!";
 
 3408        $clause = ($a_id) ? 
" AND obj_id != " . 
$ilDB->quote($a_id) . 
" " : 
"";
 
 3410        $q = 
"SELECT obj_id FROM object_data " .
 
 3411        "WHERE title = " . 
$ilDB->quote($a_group_name, 
"text") . 
" " .
 
 3412        "AND type = " . 
$ilDB->quote(
"grp", 
"text") .
 
 3417        if (
$r->numRows()) {
 
 3432        $my_pid = getmypid();
 
 3433        return (
"MEMORY USAGE (% KB PID ): " . `ps -eo%mem,rss,pid | grep $my_pid`);
 
 3444        if (strtolower(substr(php_uname(), 0, 3)) == 
"win") {
 
 3453        setlocale(LC_CTYPE, 
"UTF8", 
"en_US.UTF-8"); 
 
 3455        return escapeshellarg($a_arg);
 
 3469        if (ini_get(
'safe_mode') == 1) {
 
 3472        setlocale(LC_CTYPE, 
"UTF8", 
"en_US.UTF-8"); 
 
 3473        return escapeshellcmd($a_arg);
 
 3489        if (
ilUtil::isWindows() && strpos($cmd, 
" ") !== 
false && substr($cmd, 0, 1) !== 
'"') {
 
 3491            $cmd = 
'"' . $cmd . 
'"';
 
 3495                if (version_compare(phpversion(), 
"5.2", 
"<") && strpos($args, 
'"') !== 
false) {
 
 3496                    $cmd = 
'"' . $cmd . 
" " . $args . 
'"';
 
 3500                    $cmd .= 
" " . $args;
 
 3506            $cmd .= 
" " . $args;
 
 3511        $DIC->logger()->root()->debug(
"ilUtil::execQuoted: " . $cmd . 
".");
 
 3538    public static function excelTime($year = 
"", $month = 
"", $day = 
"", $hour = 
"", $minute = 
"", $second = 
"")
 
 3540        $starting_time = mktime(0, 0, 0, 1, 2, 1970);
 
 3541        if (strcmp(
"$year$month$day$hour$minute$second", 
"") == 0) {
 
 3542            $target_time = time();
 
 3548        $target_time = mktime($hour, $minute, $second, $month, $day, $year);
 
 3549        $difference = $target_time - $starting_time;
 
 3550        $days = (($difference - ($difference % 86400)) / 86400);
 
 3551        $difference = $difference - ($days * 86400) + 3600;
 
 3554        return str_replace(
",", 
".", ($days + 25570 + ($difference / 86400)));
 
 3565        $def_arr = explode(
",", SUFFIX_REPL_DEFAULT);
 
 3566        foreach ($def_arr as 
$def) {
 
 3570        $def_arr = explode(
",", SUFFIX_REPL_ADDITIONAL);
 
 3571        foreach ($def_arr as 
$def) {
 
 3582        $file_peaces = explode(
'.', $a_initial_filename);
 
 3584        $file_extension = array_pop($file_peaces);
 
 3586        if (SUFFIX_REPL_ADDITIONAL) {
 
 3587            $string_extensions = SUFFIX_REPL_DEFAULT . 
"," . SUFFIX_REPL_ADDITIONAL;
 
 3589            $string_extensions = SUFFIX_REPL_DEFAULT;
 
 3592        $sufixes = explode(
",", $string_extensions);
 
 3594        if (in_array($file_extension, $sufixes)) {
 
 3595            $file_extension = 
"sec";
 
 3598        array_push($file_peaces, $file_extension);
 
 3600        $safe_filename = 
"";
 
 3601        foreach ($file_peaces as $piece) {
 
 3602            $safe_filename .= 
"$piece";
 
 3603            if ($piece != end($file_peaces)) {
 
 3604                $safe_filename .= 
".";
 
 3608        return $safe_filename;
 
 3625        if ($a_dir == 
"/" || $a_dir == 
"" || is_int(strpos($a_dir, 
".."))
 
 3626            || trim($a_old_suffix) == 
"") {
 
 3631        if (!@is_dir($a_dir)) {
 
 3636        $dir = opendir($a_dir);
 
 3638        while (
$file = readdir($dir)) {
 
 3639            if (
$file != 
"." and
 
 3642                if (@is_dir($a_dir . 
"/" . 
$file)) {
 
 3647                if (@is_file($a_dir . 
"/" . 
$file)) {
 
 3649                    if (strrpos(
$file, 
'.') == (strlen(
$file) - 1)) {
 
 3650                        rename($a_dir . 
'/' . 
$file, substr($a_dir . 
'/' . 
$file, 0, -1));
 
 3654                    $path_info = pathinfo($a_dir . 
"/" . 
$file);
 
 3656                    if (strtolower($path_info[
"extension"]) ==
 
 3657                    strtolower($a_old_suffix)) {
 
 3658                        $pos = strrpos($a_dir . 
"/" . 
$file, 
".");
 
 3659                        $new_name = substr($a_dir . 
"/" . 
$file, 0, $pos) . 
"." . $a_new_suffix;
 
 3660                        rename($a_dir . 
"/" . 
$file, $new_name);
 
 3670        return  strpos(
$_SERVER[
"SCRIPT_FILENAME"], 
"api") !== 
false ||
 
 3671        strpos(
$_SERVER[
"SCRIPT_FILENAME"], 
"dummy") !== 
false;
 
 3676        if (preg_match(
"/&" . $paramName . 
"=/", $qstring)) {
 
 3677            return preg_replace(
"/&" . $paramName . 
"=[^&]+/", 
"&" . $paramName . 
"=" . urlencode($paramValue), $qstring);
 
 3679            return $qstring . 
"&" . $paramName . 
"=" . urlencode($paramValue);
 
 3685        foreach ($parametersArray as $paramName => $paramValue) {
 
 3700        srand((
double) microtime()*1000000);
 
 3702        include_once(
'./Services/PrivacySecurity/classes/class.ilSecuritySettings.php');
 
 3705        for (
$i=1; 
$i<=$a_number; 
$i++) {
 
 3706            $min = ($security->getPasswordMinLength() > 0)
 
 3707                ? $security->getPasswordMinLength()
 
 3709            $max = ($security->getPasswordMaxLength() > 0)
 
 3710                ? $security->getPasswordMaxLength()
 
 3715            $random = new \ilRandom();
 
 3716            $length  = $random->int($min, $max);
 
 3717            $next  = $random->int(1, 2);
 
 3719            $vowels_uc = strtoupper($vowels);
 
 3720            $consonants = 
"bcdfghjklmnpqrstvwxyz";
 
 3721            $consonants_uc = strtoupper($consonants);
 
 3722            $numbers = 
"1234567890";
 
 3723            $special = 
"_.+?#-*@!$%~";
 
 3726            if ($security->getPasswordNumberOfUppercaseChars() > 0) {
 
 3727                for ($j = 0; $j < $security->getPasswordNumberOfUppercaseChars(); $j++) {
 
 3730                            $pw.= $consonants_uc[$random->int(0, strlen($consonants_uc) - 1)];
 
 3735                            $pw.= $vowels_uc[$random->int(0, strlen($vowels_uc) - 1)];
 
 3742            if ($security->isPasswordCharsAndNumbersEnabled()) {
 
 3743                $pw.= $numbers[$random->int(0, strlen($numbers) - 1)];
 
 3746            if ($security->isPasswordSpecialCharsEnabled()) {
 
 3747                $pw.= $special[$random->int(0, strlen($special) - 1)];
 
 3750            $num_lcase_chars = max($security->getPasswordNumberOfLowercaseChars(), $length - strlen($pw));
 
 3751            for ($j = 0; $j < $num_lcase_chars; $j++) {
 
 3754                        $pw.= $consonants[$random->int(0, strlen($consonants) - 1)];
 
 3759                        $pw.= $vowels[$random->int(0, strlen($vowels) - 1)];
 
 3765            $pw = str_shuffle($pw);
 
 3774        $path = preg_replace(
"/[\/\\\]+$/", 
"", 
$path);
 
 3794        foreach (
$data as $k=>$datum) {
 
 3795            if (is_null($datum)) {
 
 3798            if (is_string($datum)) {
 
 3799                $data[$k] = 
"'" . $datum . 
"'";
 
 3801            if (is_array($datum)) {
 
 3806        return "[" . implode(
', ', 
$data) . 
"]";
 
 3815    public static function virusHandling($a_file, $a_orig_name = 
"", $a_clean = 
true)
 
 3821        if (IL_VIRUS_SCANNER != 
"None") {
 
 3822            require_once(
"./Services/VirusScanner/classes/class.ilVirusScannerFactory.php");
 
 3824            if (($vs_txt = $vs->scanFile($a_file, $a_orig_name)) != 
"") {
 
 3825                if ($a_clean && (IL_VIRUS_CLEAN_COMMAND != 
"")) {
 
 3826                    $clean_txt = $vs->cleanFile($a_file, $a_orig_name);
 
 3827                    if ($vs->fileCleaned()) {
 
 3828                        $vs_txt.= 
"<br />" . 
$lng->txt(
"cleaned_file") .
 
 3829                            "<br />" . $clean_txt;
 
 3830                        $vs_txt.= 
"<br />" . 
$lng->txt(
"repeat_scan");
 
 3831                        if (($vs2_txt = $vs->scanFile($a_file, $a_orig_name)) != 
"") {
 
 3832                            return array(
false, nl2br($vs_txt) . 
"<br />" . 
$lng->txt(
"repeat_scan_failed") .
 
 3833                                "<br />" . nl2br($vs2_txt));
 
 3835                            return array(
true, nl2br($vs_txt) . 
"<br />" . 
$lng->txt(
"repeat_scan_succeded"));
 
 3838                        return array(
false, nl2br($vs_txt) . 
"<br />" . 
$lng->txt(
"cleaning_failed"));
 
 3841                    return array(
false, nl2br($vs_txt));
 
 3846        return array(
true,
"");
 
 3869    public static function moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors = 
true, $a_mode = 
"move_uploaded")
 
 3872        $targetFilename = basename($a_target);
 
 3874        include_once(
"./Services/Utilities/classes/class.ilFileUtils.php");
 
 3880        $upload = 
$DIC->upload();
 
 3883        if (!$upload->hasBeenProcessed()) {
 
 3888            if (!$upload->hasUploads()) {
 
 3889                throw new ilException(
$DIC->language()->txt(
"upload_error_file_not_found"));
 
 3894            $UploadResult = $upload->getResults()[$a_file];
 
 3895            $ProcessingStatus = $UploadResult->getStatus();
 
 3896            if ($ProcessingStatus->getCode() === ProcessingStatus::REJECTED) {
 
 3897                throw new ilException($ProcessingStatus->getMessage());
 
 3900            if ($a_raise_errors) {
 
 3909        $upload->moveOneFileTo($UploadResult, $targetDir, $targetFilesystem, $targetFilename, 
true);
 
 3923        list($datum, $uhrzeit) = explode(
" ", $mysql_date_time);
 
 3924        list($jahr, $monat, 
$tag) = explode(
"-", $datum);
 
 3925        list($std, $min, $sec) = explode(
":", $uhrzeit);
 
 3926        return mktime((
int) $std, (
int) $min, (
int) $sec, (
int) $monat, (
int) 
$tag, (
int) $jahr);
 
 3937        return date(
"Y-m-d H:i:s");
 
 3955    public static function &
processCSVRow(&
$row, $quoteAll = 
false, $separator = 
";", $outUTF8 = 
false, $compatibleWithMSExcel = 
true)
 
 3957        $resultarray = array();
 
 3958        foreach (
$row as $rowindex => $entry) {
 
 3963            if (strpos($entry, 
"\"") !== 
false) {
 
 3964                $entry = str_replace(
"\"", 
"\"\"", $entry);
 
 3967            if (strpos($entry, $separator) !== 
false) {
 
 3970            if ($compatibleWithMSExcel) {
 
 3972                $entry = str_replace(chr(13) . chr(10), chr(10), $entry);
 
 3976                    $resultarray[$rowindex] = 
"\"" . $entry . 
"\"";
 
 3978                    $resultarray[$rowindex] = utf8_decode(
"\"" . $entry . 
"\"");
 
 3982                    $resultarray[$rowindex] = $entry;
 
 3984                    $resultarray[$rowindex] = utf8_decode($entry);
 
 3988        return $resultarray;
 
 3992    public static function isDN($a_str)
 
 3994        return(preg_match(
"/^[a-z]+([a-z0-9-]*[a-z0-9]+)?(\.([a-z]+([a-z0-9-]*[a-z0-9]+)?)+)*$/", $a_str));
 
 4000        return(preg_match(
"/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\." .
 
 4001                          "(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/", $a_str));
 
 4038        $rbacreview = 
$DIC->rbac()->review();
 
 4039        $ilAccess = 
$DIC->access();
 
 4042        $tree = 
$DIC->repositoryTree();
 
 4044        if (!is_array($a_obj_type)) {
 
 4045            $where = 
"WHERE type = " . 
$ilDB->quote($a_obj_type, 
"text") . 
" ";
 
 4047            $where = 
"WHERE " . 
$ilDB->in(
"type", $a_obj_type, 
false, 
"text") . 
" ";
 
 4052            $limit = 
$ilSetting->get(
'search_max_hits', 100);
 
 4059        $a_usr_id = $a_usr_id ? $a_usr_id : 
$ilUser->getId();
 
 4060        $a_roles = $rbacreview->assignedRoles($a_usr_id);
 
 4064        if ($rbacreview->isAssigned($a_usr_id, SYSTEM_ROLE_ID)) {
 
 4065            $query = 
"SELECT ref_id FROM object_reference obr LEFT JOIN object_data obd ON obr.obj_id = obd.obj_id " .
 
 4066                "LEFT JOIN tree ON obr.ref_id = tree.child " .
 
 4074                if ($tree->isGrandChild(RECOVERY_FOLDER_ID, 
$row->ref_id)) {
 
 4082                $ref_ids[] = 
$row->ref_id;
 
 4084            return $ref_ids ? $ref_ids : array();
 
 4088        if ($a_operation == 
'edit_permissions' or strpos($a_operation, 
'create') !== 
false) {
 
 4089            $check_owner = 
") ";
 
 4091            $check_owner = 
"OR owner = " . 
$ilDB->quote($a_usr_id, 
"integer") . 
") ";
 
 4095        $ops_id = $ops_ids[0];
 
 4097        $and = 
"AND ((" . 
$ilDB->in(
"rol_id", $a_roles, 
false, 
"integer") . 
" ";
 
 4099        $query = 
"SELECT DISTINCT(obr.ref_id),obr.obj_id,type FROM object_reference obr " .
 
 4100            "JOIN object_data obd ON obd.obj_id = obr.obj_id " .
 
 4101            "LEFT JOIN rbac_pa  ON obr.ref_id = rbac_pa.ref_id " .
 
 4104            "AND (" . 
$ilDB->like(
"ops_id", 
"text", 
"%i:" . $ops_id . 
"%") . 
" " .
 
 4105            "OR " . 
$ilDB->like(
"ops_id", 
"text", 
"%:\"" . $ops_id . 
"\";%") . 
")) " .
 
 4116            if ($tree->isGrandChild(RECOVERY_FOLDER_ID, 
$row->ref_id)) {
 
 4121            if ($ilAccess->checkAccessOfUser($a_usr_id, $a_operation, 
'', 
$row->ref_id, 
$row->type, 
$row->obj_id)) {
 
 4123                $ref_ids[] = 
$row->ref_id;
 
 4126        return $ref_ids ? $ref_ids : array();
 
 4138            case strpos($a_target, ILIAS_WEB_DIR . 
'/' . CLIENT_ID) === 0:
 
 4139            case strpos($a_target, 
'./' . ILIAS_WEB_DIR . 
'/' . CLIENT_ID) === 0:
 
 4140            case strpos($a_target, CLIENT_WEB_DIR) === 0:
 
 4143            case strpos($a_target, CLIENT_DATA_DIR . 
"/temp") === 0:
 
 4146            case strpos($a_target, CLIENT_DATA_DIR) === 0:
 
 4149            case strpos($a_target, ILIAS_ABSOLUTE_PATH . 
'/Customizing') === 0:
 
 4153                throw new InvalidArgumentException(
"Can not move files to \"$a_target\" because path can not be mapped to web, storage or customizing location.");
 
 4156        $absTargetDir = dirname($a_target);
 
 4157        $targetDir = LegacyPathHelper::createRelativePath($absTargetDir);
 
 4159        return array( $targetFilesystem, $targetDir );
 
 4169        include_once 
'./Services/MathJax/classes/class.ilMathJax.php';
 
 4179        include_once 
'./Services/MathJax/classes/class.ilMathJax.php';
 
 4189        include_once 
'./Services/MathJax/classes/class.ilMathJax.php';
 
 4190        return ilMathJax::getInstance()->insertLatexImages($a_text, 
'[tex]', 
'[/tex]', $a_dir . 
'/teximg', 
'./teximg');
 
 4201    public static function prepareTextareaOutput($txt_output, $prepare_for_latex_output = 
false, $omitNl2BrWhenTextArea = 
false)
 
 4206        if ($prepare_for_latex_output) {
 
 4207            include_once 
'./Services/MathJax/classes/class.ilMathJax.php';
 
 4214            if (!$omitNl2BrWhenTextArea) {
 
 4220            if (preg_match_all(
"/(<pre>.*?<\/pre>)/ims", 
$result, $matches)) {
 
 4221                foreach ($matches[0] as $found) {
 
 4223                    if (strpos(
"\n", $found) === 
false) {
 
 4224                        $replacement = 
"\n";
 
 4226                    $removed = preg_replace(
"/<br\s*?\/>/ims", $replacement, $found);
 
 4231        if ($prepare_for_latex_output) {
 
 4252        if (strlen(strip_tags($a_text)) < strlen($a_text)) {
 
 4280        $diff = $to->diff(
$from);
 
 4283        $periods[
"years"] = $diff->format(
"%y");
 
 4284        $periods[
"months"] = $diff->format(
"%m");
 
 4285        $periods[
"days"] = $diff->format(
"%d");
 
 4286        $periods[
"hours"] = $diff->format(
"%h");
 
 4287        $periods[
"minutes"] = $diff->format(
"%i");
 
 4288        $periods[
"seconds"] = $diff->format(
"%s");
 
 4296                $segment_name = ($value > 1)
 
 4298                    : substr(
$key, 0, -1);
 
 4299                $array[] = $value . 
' ' . 
$lng->txt($segment_name);
 
 4303        $len = 
sizeof($array);
 
 4305            $array = array_slice($array, 0, (3-$len));
 
 4308        return implode(
', ', $array);
 
 4314            self::getUploadSizeLimitBytes()
 
 4330        return $lng->txt(
"file_notice") . 
" $max_filesize.";
 
 4335        $unit = array(
'', 
'K', 
'M', 
'G', 
'T', 
'P');
 
 4337        for (
$i = 0, $maxUnits = count($unit); 
$size >= 1024 && 
$i <= $maxUnits; 
$i++) {
 
 4341        return round(
$size, $decimals) . $unit[
$i];
 
 4346        $uploadSizeLimitBytes = min(
 
 4347            self::convertPhpIniSizeValueToBytes(ini_get(
'post_max_size')),
 
 4348            self::convertPhpIniSizeValueToBytes(ini_get(
'upload_max_filesize'))
 
 4351        return $uploadSizeLimitBytes;
 
 4356        if (is_numeric($phpIniSizeValue)) {
 
 4357            return $phpIniSizeValue;
 
 4360        $suffix = substr($phpIniSizeValue, -1);
 
 4361        $value = substr($phpIniSizeValue, 0, -1);
 
 4363        switch (strtoupper($suffix)) {
 
 4394        $test_str = explode(
'_', $role_title);
 
 4396        if ($test_str[0] == 
'il') {
 
 4397            $test2 = (int) $test_str[3];
 
 4398            return is_numeric($test2) ? (int) $test2 : 
false;
 
 4415        $test_str = explode(
'_', $ilias_id);
 
 4417        if ($test_str[0] == 
'il' && $test_str[1] == $inst_id && count($test_str) == 4) {
 
 4418            $test2 = (int) $test_str[3];
 
 4419            return is_numeric($test2) ? (int) $test2 : 
false;
 
 4438    public static function _sortIds($a_ids, $a_table, $a_field, $a_id_name)
 
 4449        $where = 
"WHERE " . $a_id_name . 
" IN (";
 
 4453        $query = 
"SELECT " . $a_id_name . 
" FROM " . $a_table . 
" " .
 
 4455            "ORDER BY " . $a_field;
 
 4459            $ids[] = 
$row->$a_id_name;
 
 4461        return $ids ? $ids : array();
 
 4495        if (!is_array($a_array) or !count($a_array)) {
 
 4499        foreach ($a_array as $k => $item) {
 
 4500            $a_array[$k] = 
$ilDB->quote($item);
 
 4514    public static function sendInfo($a_info = 
"", $a_keep = 
false)
 
 4519        $tpl->setMessage(
"info", $a_info, $a_keep);
 
 4534        if (isset(
$DIC[
"tpl"])) {
 
 4536            $tpl->setMessage(
"failure", $a_info, $a_keep);
 
 4551        $tpl->setMessage(
"question", $a_info, $a_keep);
 
 4567        $tpl->setMessage(
"success", $a_info, $a_keep);
 
 4582                "tpl.infopanel.html",
 
 4583                "Services/Utilities" 
 4585            $tpl->setCurrentBlock(
"infopanel");
 
 4587            if (!empty(
$_SESSION[
"infopanel"][
"text"])) {
 
 4588                $link = 
"<a href=\"" . 
$_SESSION[
"infopanel"][
"link"] . 
"\" target=\"" .
 
 4596            if (!empty(
$_SESSION[
"infopanel"][
"img"])) {
 
 4597                $link .= 
"<td><a href=\"" . 
$_SESSION[
"infopanel"][
"link"] . 
"\" target=\"" .
 
 4600                $link .= 
"<img src=\"" . 
"./templates/" . 
$ilUser->prefs[
"skin"] . 
"/images/" .
 
 4601                    $_SESSION[
"infopanel"][
"img"] . 
"\" border=\"0\" vspace=\"0\"/>";
 
 4602                $link .= 
"</a></td>";
 
 4605            $tpl->setVariable(
"INFO_ICONS", $link);
 
 4606            $tpl->parseCurrentBlock();
 
 4627        if (!is_dir($directory)) {
 
 4630            $size = @filesize($directory);
 
 4634        if ($DIR = opendir($directory)) {
 
 4635            while (($dirfile = readdir($DIR)) !== 
false) {
 
 4636                if (is_link($directory . DIRECTORY_SEPARATOR . $dirfile) || $dirfile == 
'.' || $dirfile == 
'..') {
 
 4639                if (is_file($directory . DIRECTORY_SEPARATOR . $dirfile)) {
 
 4640                    $size += filesize($directory . DIRECTORY_SEPARATOR . $dirfile);
 
 4641                } elseif (is_dir($directory . DIRECTORY_SEPARATOR . $dirfile)) {
 
 4643                    $dirSize = 
ilUtil::dirsize($directory . DIRECTORY_SEPARATOR . $dirfile);
 
 4645                    if ($dirSize >= 0) {
 
 4659        $random = new \ilRandom();
 
 4660        return md5($random->int(1, 9999999) + str_replace(
" ", 
"", (
string) microtime()));
 
 4663    public static function setCookie($a_cookie_name, $a_cookie_value = 
'', $a_also_set_super_global = 
true, $a_set_cookie_invalid = 
false)
 
 4670        if (!(
bool) $a_set_cookie_invalid) {
 
 4673            $expire = time() - (365*24*60*60);
 
 4682        if (
defined(
'IL_COOKIE_SECURE')) {
 
 4683            $secure = IL_COOKIE_SECURE;
 
 4696        if ((
bool) $a_also_set_super_global) {
 
 4697            $_COOKIE[$a_cookie_name] = $a_cookie_value;
 
 4703        return strip_tags(self::stripSlashes($a_filename));
 
 4712        if (
$_SERVER[
'SHELL'] || php_sapi_name() == 
'cli' ||
 
 4717            return ILIAS_HTTP_PATH;
 
 4728        $bt = debug_backtrace();
 
 4730        foreach ($bt as 
$t) {
 
 4731            if ($cnt != 0 && ($a_limit == 0 || $cnt <= $a_limit)) {
 
 4732                echo 
"<br>" . 
$t[
"file"] . 
", " . 
$t[
"function"] . 
" [" . 
$t[
"line"] . 
"]";
 
 4755        $exploded = explode(
'_', $a_import_id);
 
 4757        $parsed[
'orig'] = $a_import_id;
 
 4758        if ($exploded[0] == 
'il') {
 
 4759            $parsed[
'prefix'] = $exploded[0];
 
 4761        if (is_numeric($exploded[1])) {
 
 4762            $parsed[
'inst_id'] = (int) $exploded[1];
 
 4764        $parsed[
'type'] = $exploded[2];
 
 4766        if (is_numeric($exploded[3])) {
 
 4767            $parsed[
'id'] = (int) $exploded[3];
 
 4781            '/([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff^|]*)\|/',
 
 4789        for (
$i = 0; $vars[
$i]; 
$i++) {
 
 4811        $fp = @fopen(
$file, 
'rb');
 
 4829        header(
"Accept-Ranges: 0-$length");
 
 4833        if (isset(
$_SERVER[
'HTTP_RANGE'])) {
 
 4837            list(, $range) = explode(
'=', 
$_SERVER[
'HTTP_RANGE'], 2);
 
 4839            if (strpos($range, 
',') !== 
false) {
 
 4844                header(
'HTTP/1.1 416 Requested Range Not Satisfiable');
 
 4845                header(
"Content-Range: bytes $start-$end/$size");
 
 4852            if ($range == 
'-') {
 
 4855                $c_start = 
$size - substr($range, 1);
 
 4857                $range  = explode(
'-', $range);
 
 4858                $c_start = $range[0];
 
 4859                $c_end   = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : 
$size;
 
 4865            $c_end = ($c_end > 
$end) ? 
$end : $c_end;
 
 4867            if ($c_start > $c_end || $c_start > 
$size - 1 || $c_end >= 
$size) {
 
 4868                header(
'HTTP/1.1 416 Requested Range Not Satisfiable');
 
 4869                header(
"Content-Range: bytes $start-$end/$size");
 
 4875            $length = 
$end - $start + 1; 
 
 4877            header(
'HTTP/1.1 206 Partial Content');
 
 4880        header(
"Content-Range: bytes $start-$end/$size");
 
 4881        header(
"Content-Length: $length");
 
 4885        while (!feof($fp) && ($p = ftell($fp)) <= 
$end) {
 
 4886            if ($p + $buffer > 
$end) {
 
 4890                $buffer = 
$end - $p + 1;
 
 4893            echo fread($fp, $buffer);
 
 4935    protected static function fmtFloat($a_float, $a_decimals=0, $a_dec_point = 
null, $a_thousands_sep = 
null, $a_suppress_dot_zero=
false)
 
 4941        if ($a_dec_point == 
null) {
 
 4946        if ($a_dec_point == 
'-lang_sep_decimal-') {
 
 4950        if ($a_thousands_sep == 
null) {
 
 4951            $a_thousands_sep = 
$lng->txt(
'lang_sep_thousand');
 
 4953        if ($a_thousands_sep == 
'-lang_sep_thousand-') {
 
 4954            $a_thousands_sep = 
",";
 
 4957        $txt = number_format($a_float, $a_decimals, $a_dec_point, $a_thousands_sep);
 
 4960        if (($a_suppress_dot_zero == 0 || $a_decimals == 0)
 
 4961            && substr(
$txt, -2) == $a_dec_point . 
'0' 
 4965        if ($a_float == 0 and 
$txt == 
"") {
 
 4993        if ($a_lng == 
null) {
 
 4999        if (
$size >= $mag * $mag * $mag) {
 
 5000            $scaled_size = 
$size / $mag / $mag / $mag;
 
 5001            $scaled_unit = 
'lang_size_gb';
 
 5003            if (
$size >= $mag * $mag) {
 
 5004                $scaled_size = 
$size / $mag / $mag;
 
 5005                $scaled_unit = 
'lang_size_mb';
 
 5007                if (
$size >= $mag) {
 
 5008                    $scaled_size = 
$size / $mag;
 
 5009                    $scaled_unit = 
'lang_size_kb';
 
 5011                    $scaled_size = 
$size;
 
 5012                    $scaled_unit = 
'lang_size_bytes';
 
 5018                                                == 
'lang_size_bytes') ? 0 : 1, $a_lng->txt(
'lang_sep_decimal'), $a_lng->txt(
'lang_sep_thousand'), 
true)
 
 5019                  . 
' ' . $a_lng->txt($scaled_unit);
 
 5020        if ($a_mode == 
'long' && 
$size > $mag) {
 
 5022                       . $a_lng->txt(
'lang_size_bytes') . 
')';
 
 5035        return  ((
int) $a_value) * pow(self::_getSizeMagnitude(), 2);
 
 5040        return  ((
int) $a_value) / (pow(self::_getSizeMagnitude(), 2));
 
 5054        if (!isset(self::$db_supports_distinct_umlauts)) {
 
 5056            $set = 
$ilDB->query(
"SELECT (" . 
$ilDB->quote(
"A", 
"text") . 
" = " . 
$ilDB->quote(
"Ä", 
"text") . 
") t FROM DUAL ");
 
 5057            $rec = 
$ilDB->fetchAssoc($set);
 
 5058            self::$db_supports_distinct_umlauts = !(bool) $rec[
"t"];
 
sprintf('%.4f', $callTime)
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
An exception for terminatinating execution or to throw for unit testing.
readVariable($a_group, $a_var_name)
reads a single variable from a group @access public
static usesHTTP()
Uses HTTP aka browser.
This class provides processing control methods.
@classDescription Date and time handling
get($a_format, $a_format_str='', $a_tz='')
get formatted date
Base class for ILIAS Exception handling.
static getValidFilename($a_filename)
Get valid filename.
static recursive_dirscan($dir, &$arr)
Recursively scans a given directory and writes path and filename into referenced array.
static getInstance()
Get https instance.
Class ilMailRfc822AddressParserFactory.
static getInstance()
Singleton: get instance.
static _getAssociatedUsersOnline($a_user_id, $a_no_anonymous=false)
reads all active sessions from db and returns users that are online and who have a local role in a gr...
static _removeItemFromDesktops($a_id)
removes object from all user's desktops @access public
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _getIcon( $a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
static _getOperationIdsByName($operations)
get ops_id's by name.
static _getInstance()
Get instance of ilSecuritySettings.
static clear($a_var)
Unset a value.
static strPos($a_haystack, $a_needle, $a_offset=null)
static subStr($a_str, $a_start, $a_length=null)
static strCmp($a, $b)
Compare two strings.
static strToUpper($a_string)
Util class various functions, usage as namespace.
static getPasswordValidChars($a_as_regex=true, $a_only_special_chars=false)
All valid chars for password.
static CreateIsoFromFolder($a_dir, $a_file)
static getDataDir()
get data directory (outside webspace)
static _getSizeMagnitude()
Returns the magnitude used for size units.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static getJSLocation($a_js_name, $a_js_location="", $add_version=false)
get full javascript file name (path inclusive) of current user
static getMySQLTimestamp($a_ts)
Get MySQL timestamp in 4.1.x or higher format (yyyy-mm-dd hh:mm:ss) This function converts a timestam...
static convertImage( $a_from, $a_to, $a_target_format="", $a_geometry="", $a_background_color="")
convert image
static assembleParameterString($a_par_arr)
static dumpString($a_str)
dumps ord values of every character of string $a_str
static appendUrlParameterString($a_url, $a_par, $xml_style=false)
append URL parameter string ("par1=value1&par2=value2...") to given URL string
static prepareDBString($a_str)
prepare a string for db writing (insert/update)
static getMemString()
get current memory usage as string
static _sanitizeFilemame($a_filename)
static formRadioButton($checked, $varname, $value, $onclick=null, $disabled=false)
??? @access public
static checkInput($vars)
???
static secureString($a_str, $a_strip_html=true, $a_allow="")
Remove unsecure tags.
static unmaskSecureTags($a_str, $allow_array)
static insertLatexImages($a_text, $a_start='[tex]', $a_end='[/tex]')
replace [tex]...[/tex] tags with formula image code
static formCheckbox($checked, $varname, $value, $disabled=false)
??? @access public
static isConvertVersionAtLeast($a_version)
Compare convert version numbers.
static formDisabledRadioButton($checked, $varname, $value, $disabled)
??? @accesspublic @paramstring @paramstring @paramstring
static excelTime($year="", $month="", $day="", $hour="", $minute="", $second="")
Calculates a Microsoft Excel date/time value.
static formatBytes($size, $decimals=0)
static getUploadSizeLimitBytes()
static _sortIds($a_ids, $a_table, $a_field, $a_id_name)
Function that sorts ids by a given table field using WHERE IN E.g: __sort(array(6,...
static checkFormEmpty($emptyFields)
??? @access public
static convertPhpIniSizeValueToBytes($phpIniSizeValue)
static isHTML($a_text)
Checks if a given string contains HTML or not.
static getGDSupportedImageType($a_desired_type)
returns the best supported image type by this PHP build
static setCookie($a_cookie_name, $a_cookie_value='', $a_also_set_super_global=true, $a_set_cookie_invalid=false)
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static stripOnlySlashes($a_str)
strip slashes if magic qoutes is enabled
static sendQuestion($a_info="", $a_keep=false)
Send Question to Screen.
static execQuoted($cmd, $args=null)
exec command and fix spaces on windows
static replaceUrlParameterString($url, $parametersArray)
static insertInstIntoID($a_value)
inserts installation id into ILIAS id
static __extractRefId($role_title)
extract ref id from role title, e.g.
static KT_replaceParam($qstring, $paramName, $paramValue)
static tf2yn($a_tf)
convert true/false to "y"/"n"
static replaceLinkProperties($matches)
replaces target _blank with _self and the link text with the according object title.
static Linkbar($AScript, $AHits, $ALimit, $AOffset, $AParams=array(), $ALayout=array(), $prefix='')
Linkbar Diese Funktion erzeugt einen typischen Navigationsbalken mit "Previous"- und "Next"-Links und...
static parseImportId($a_import_id)
Parse an ilias import id Typically of type il_[IL_INST_ID]_[OBJ_TYPE]_[OBJ_ID] returns array( 'orig' ...
static getJavaPath()
get full java path (dir + java command)
static escapeShellArg($a_arg)
static setPathStr($a_path)
??? @access public
static getImageTagByType($a_type, $a_path, $a_big=false)
Builds an html image tag TODO: function still in use, but in future use getImagePath and move HTML-Co...
static readFile($a_file)
there are some known problems with the original readfile method, which sometimes truncates delivered ...
static getWebspaceDir($mode="filesystem")
get webspace directory
static unmaskAttributeTag($a_str, $tag, $tag_att)
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
rangeDownload($file)
Send a file via range request, see http://mobiforge.com/design-development/content-delivery-mobile-de...
static execConvert($args)
execute convert command
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
static prepareTextareaOutput($txt_output, $prepare_for_latex_output=false, $omitNl2BrWhenTextArea=false)
Prepares a string for a text area output where latex code may be in it If the text is HTML-free,...
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static sanitateTargetPath($a_target)
static redirect($a_script)
static resizeImage($a_from, $a_to, $a_width, $a_height, $a_constrain_prop=false)
resize image
static isPassword($a_passwd, &$customError=null)
validates a password @access public
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashesRecursive($a_data, $a_strip_html=true, $a_allow="")
Strip slashes from array and sub-arrays.
static makeClickable($a_text, $detectGotoLinks=false)
makeClickable In Texten enthaltene URLs und Mail-Adressen klickbar machen
static groupNameExists($a_group_name, $a_id=0)
checks if group name already exists.
static virusHandling($a_file, $a_orig_name="", $a_clean=true)
scan file for viruses and clean files if possible
static buildLatexImages($a_text, $a_dir)
replace [tex]...[/tex] tags with formula image code for offline use
static printBacktrace($a_limit=0)
printBacktrace
static getAssociatedUsersOnline($a_user_id)
reads all active sessions from db and returns users that are online and who have a local role in a gr...
static deliverData($a_data, $a_filename, $mime="application/octet-stream", $charset="")
deliver data for download via browser.
static maskSecureTags($a_str, $allow_array)
static unmaskTag($a_str, $t, $fix_param="")
static zip($a_dir, $a_file, $compress_content=false)
zips given directory/file into given zip.file
static isWindows()
check wether the current client system is a windows system
static dumpVar($mixed=null)
Dump var.
static getSafeFilename($a_initial_filename)
static fmtFloat($a_float, $a_decimals=0, $a_dec_point=null, $a_thousands_sep=null, $a_suppress_dot_zero=false)
format a float
static switchColor($a_num, $a_css1, $a_css2)
switches style sheets for each even $a_num (used for changing colors of different result rows)
static rRenameSuffix($a_dir, $a_old_suffix, $a_new_suffix)
Renames all files with certain suffix and gives them a new suffix.
static formatSize($size, $a_mode='short', $a_lng=null)
Returns the specified file size value in a human friendly form.
static extractParameterString($a_parstr)
extracts parameter value pairs from a string into an array
static period2String(ilDateTime $a_from, $a_to=null)
Return a string of time period.
static getDir($a_dir, $a_rec=false, $a_sub_dir="")
get directory
static _getObjectsByOperations($a_obj_type, $a_operation, $a_usr_id=0, $limit=0)
Get all objects of a specific type and check access This function is not recursive,...
static img($a_src, $a_alt="", $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
static now()
Return current timestamp in Y-m-d H:i:s format.
static getConvertCmd()
get convert command
static getP3PLocation()
Get p3p file path.
static escapeShellCmd($a_arg)
escape shell cmd
static maskAttributeTag($a_str, $tag, $tag_att)
static is_email($a_email, ilMailRfc822AddressParserFactory $mailAddressParserFactory=null)
This preg-based function checks whether an e-mail address is formally valid.
static shortenWords($a_str, $a_len=30, $a_dots=true)
Ensure that the maximum word lenght within a text is not longer than $a_len.
static processConvertVersion($a_version)
Parse convert version string, e.g.
static getNewContentStyleSheetLocation($mode="output")
get full style sheet file name (path inclusive) of current user
static securePlainString($a_str)
Remove unsecure characters from a plain text string.
static dbSupportsDisctinctUmlauts()
Only temp fix for #8603, should go to db classes.
static ilTempnam($a_temp_path=null)
Create a temporary file in an ILIAS writable directory.
static deliverFile( $a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
static htmlentitiesOutsideHTMLTags($htmlText)
Encodes HTML entities outside of HTML tags.
static getHtmlPath($relative_path)
get url of path
static $db_supports_distinct_umlauts
static getPasswordRequirementsInfo()
infotext for ilPasswordInputGUI setInfo()
static stripScriptHTML($a_str, $a_allow="", $a_rm_js=true)
strip only html tags (4.0) from text $allowed contains tags to be allowed, in format  tags a and b ar...
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
static htmlencodePlainString($a_str, $a_make_links_clickable, $a_detect_goto_links=false)
Encodes a plain text string into HTML for display in a browser.
static array_php2js($data)
convert php arrays to javascript arrays
includeMathjax($a_tpl=null)
Include Mathjax.
static unique_multi_array($array, $sub_key)
Make a multi-dimensional array to have only DISTINCT values for a certain "column".
static makeDateSelect($prefix, $year="", $month="", $day="", $startyear="", $a_long_month=true, $a_further_options=array(), $emptyoption=false)
Creates a combination of HTML selects for date inputs.
static generatePasswords($a_number)
Generate a number of passwords.
static getSelectName($selected, $values)
???
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static date_mysql2time($mysql_date_time)
make time object from mysql_date_time
static MB2Bytes($a_value)
static yn2tf($a_yn)
convert "y"/"n" to true/false
static quoteArray($a_array)
Quotes all members of an array for usage in DB query statement.
static secureLink($a_str)
static makeDirParents($a_dir)
Create a new directory and all parent directories.
static isPasswordValidForUserContext($clear_text_password, $user, &$error_language_variable=null)
static sort_func_numeric($a, $b)
sub-function to sort an array
static formSelect( $selected, $varname, $options, $multiple=false, $direct_text=false, $size="0", $style_class="", $attribs="", $disabled=false)
Builds a select form field with options and shows the selected option first.
static stableSortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false)
Sort an aray using a stable sort algorithm, which preveserves the sequence of array elements which ha...
static removeItemFromDesktops($a_id)
removes object from all user's desktops @access public
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static shortenText( $a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
static __extractId($ilias_id, $inst_id)
extract ref id from role title, e.g.
static getTypeIconPath($a_type, $a_obj_id, $a_size='small')
Get type icon path path Return image path for icon_xxx.pngs Or (if enabled) path to custom icon Depre...
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static deducibleSize($a_mime)
checks if mime type is provided by getimagesize()
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ... into an array
static maskTag($a_str, $t, $fix_param="")
static removeTrailingPathSeparators($path)
static infoPanel($a_keep=true)
static & processCSVRow(&$row, $quoteAll=false, $separator=";", $outUTF8=false, $compatibleWithMSExcel=true)
Convertes an array for CSV usage.
static secureUrl($url)
Prepare secure href attribute.
static unserializeSession($data)
Returns the unserialized ILIAS session data.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
static createDirectory($a_dir, $a_mod=0755)
create directory
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static formInput($varname, $value, $disabled=false)
create html input area
static getUsersOnline($a_user_id=0)
reads all active sessions from db and returns users that are online OR returns only one active user i...
static Bytes2MB($a_value)
static renameExecutables($a_dir)
Rename uploaded executables for security reasons.
static dirsize($directory)
get size of a directory or a file.
static stripSlashesArray($a_arr, $a_strip_html=true, $a_allow="")
Strip slashes from array.
static makeTimeSelect($prefix, $short=true, $hour="", $minute="", $second="", $a_use_default=true, $a_further_options=array())
Creates a combination of HTML selects for time inputs.
static getClientIdByString($clientId)
static sort_func($a, $b)
sub-function to sort an array
static mergesort(&$array, $cmp_function='strcmp')
const TEMPORARY
The ILIAS temporary directory.
const CUSTOMIZING
The filesystem within the web root where all the skins and plugins are saved.
const WEB
The filesystem within the ilias web root.
const STORAGE
The filesystem outside of the ilias web root.
if(function_exists( 'posix_getuid') &&posix_getuid()===0) if(!array_key_exists('t', $options)) $tag
catch(Exception $e) $message
Class FlySystemFileAccessTest.
$stream
PHP stream implementation.
defined( 'APPLICATION_ENV')||define( 'APPLICATION_ENV'
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file
foreach($_POST as $key=> $value) $res
echo;exit;}function LogoutNotification($SessionID){ global $ilDB;$q="SELECT session_id, data FROM usr_session WHERE expires > (\w+)\|/" PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']