Current Path : /var/www/html/clients/old.e-nkama.ru/e-nkama_bitrix/bitrix/modules/main/ |
Current File : /var/www/html/clients/old.e-nkama.ru/e-nkama_bitrix/bitrix/modules/main/tools.php |
<? /* ############################################## # Bitrix Site Manager # # Copyright (c) 2002-2007 Bitrix # # http://www.bitrixsoft.com # # mailto:admin@bitrixsoft.com # ############################################## */ global $BX_DOC_ROOT; $BX_DOC_ROOT = rtrim(preg_replace("'[\\\\/]+'", "/", $_SERVER["DOCUMENT_ROOT"]), "/ "); /********************************************************************* HTML ýëåìåíòû *********************************************************************/ /************************************************************** Âîçâðàùàåò HTML êîä ýëåìåíòà "input" ***************************************************************/ function InputType($strType, $strName, $strValue, $strCmp, $strPrintValue=false, $strPrint="", $field1="") { $bCheck = false; if($strValue <> '') { if(is_array($strCmp)) $bCheck = in_array($strValue, $strCmp); elseif($strCmp <> '') $bCheck = in_array($strValue, explode(",", $strCmp)); } return '<input type="'.$strType.'" '.$field1.' name="'.$strName.'" id="'.$strName.'" value="'.$strValue.'"'. ($bCheck? ' checked':'').'>'.($strPrintValue? $strValue:$strPrint); } /************************************************************** Âîçâðàùàåò HTML êîä ýëåìåíòà "select" èç âûáîðêè ***************************************************************/ function SelectBox( $strBoxName, // èìÿ ýëåìåíòà $a, // âûáîðêà ñ ïîëÿìè REFERENCE, REFERENCE_ID $strDetText = "", // ïóñòîé ýëåìåíò ñïèñêà ñ value = NOT_REF $strSelectedVal = "", // âûáðàííûé ýëåìåíò $field1="class=\"typeselect\"" // äîïîëíèòåëüíîå ïîëå ) { if(!isset($strSelectedVal)) $strSelectedVal=""; $strReturnBox = "<select $field1 name=\"$strBoxName\" id=\"$strBoxName\" size=\"1\">"; if (strlen($strDetText) > 0) $strReturnBox = $strReturnBox."<option value=\"NOT_REF\">$strDetText</option>"; while ($ar = $a->Fetch()) { $reference_id = $ar["REFERENCE_ID"]; $reference = $ar["REFERENCE"]; if (strlen($reference_id)<=0) $reference_id = $ar["reference_id"]; if (strlen($reference)<=0) $reference = $ar["reference"]; $strReturnBox = $strReturnBox."<option "; if (strcasecmp($reference_id,$strSelectedVal)== 0) $strReturnBox = $strReturnBox." selected "; $strReturnBox = $strReturnBox."value=\"".htmlspecialchars($reference_id). "\">". htmlspecialchars($reference)."</option>"; } return $strReturnBox."</select>"; } /************************************************************** Âîçâðàùàåò HTML êîä ýëåìåíòà "select multiple" èç âûáîðêè ***************************************************************/ function SelectBoxM( $strBoxName, // èìÿ ýëåìåíòà $a, // âûáîðêà äëÿ îòîáðàæåíèÿ ñ ïîëÿìè REFERENCE, REFERENCE_ID $arr, // ìàññèâ çíà÷åíèé êîòîðûå íåîáõîäèìî âûáðàòü $strDetText = "", // ïóñòîé ýëåìåíò ñïèñêà ñ value = NOT_REF $strDetText_selected = false, // âûáðàòü ëè ïóñòîé ýëåìåíò $size = 5, // ïîëå size ýëåìåíòà $field1="class=\"typeselect\"" // ñòèëü ýëåìåíòà ) { $strReturnBox = "<select $field1 multiple name=\"$strBoxName\" id=\"$strBoxName\" size=\"$size\">"; if (strlen($strDetText)>0) { $strReturnBox = $strReturnBox."<option "; if ($strDetText_selected) $strReturnBox = $strReturnBox." selected "; $strReturnBox = $strReturnBox." value='NOT_REF'>".$strDetText."</option>"; } while ($ar=$a->Fetch()) { $reference_id = $ar["REFERENCE_ID"]; $reference = $ar["REFERENCE"]; if (strlen($reference_id)<=0) $reference_id = $ar["reference_id"]; if (strlen($reference)<=0) $reference = $ar["reference"]; $sel = (is_array($arr) && in_array($reference_id, $arr))? "selected": ""; $strReturnBox = $strReturnBox."<option ".$sel; $strReturnBox = $strReturnBox." value=\"".htmlspecialchars($reference_id)."\">". htmlspecialchars($reference)."</option>"; } return $strReturnBox."</select>"; } /************************************************************** Âîçâðàùàåò HTML êîä ýëåìåíòà "select multiple" èç ìàññèâà ***************************************************************/ function SelectBoxMFromArray( $strBoxName, // èìÿ ýëåìåíòà $a, // àññîöèèðîâàííûé ìàññèâ ñ ïîëÿìè REFERENCE, REFERENCE_ID $arr, // ìàññèâ çíà÷åíèé êîòîðûå íåîáõîäèìî âûáðàòü $strDetText = "", // ïóñòîé ýëåìåíò ñïèñêà ñ value = NOT_REF $strDetText_selected = false, // âûáðàòü ëè ïóñòîé ýëåìåíò $size = 5, // ïîëå "size" ýëåìåíòà $field1="class='typeselect'" // ñòèëü ýëåìåíòà ) { $strReturnBox = "<select $field1 multiple name=\"$strBoxName\" id=\"$strBoxName\" size=\"$size\">"; if(array_key_exists("REFERENCE_ID", $a)) $reference_id = $a["REFERENCE_ID"]; elseif(array_key_exists("reference_id", $a)) $reference_id = $a["reference_id"]; else $reference_id = array(); if(array_key_exists("REFERENCE", $a)) $reference = $a["REFERENCE"]; elseif(array_key_exists("reference", $a)) $reference = $a["reference"]; else $reference = array(); if(strlen($strDetText) > 0) { $strReturnBox .= "<option "; if($strDetText_selected) $strReturnBox .= " selected "; $strReturnBox .= " value='NOT_REF'>".$strDetText."</option>"; } foreach($reference_id as $key => $value) { $sel = (is_array($arr) && in_array($value, $arr)) ? "selected" : ""; $strReturnBox .= "<option value=\"".htmlspecialchars($value)."\" ".$sel.">". htmlspecialchars($reference[$key])."</option>"; } $strReturnBox .= "</select>"; return $strReturnBox; } /*********************************************************** Âîçâðàùàåò HTML êîä ýëåìåíòà "select" èç ìàññèâà ************************************************************/ function SelectBoxFromArray( $strBoxName, $db_array, $strSelectedVal = "", $strDetText = "", $field1="class='typeselect'", $go=false, // ïåðåéòè ñðàçó ïîñëå âûáîðà $form="form1" ) { if ($go) { $strReturnBox = "<script type=\"text/javascript\">\n". "function ".$strBoxName."LinkUp()\n". "{var number = document.".$form.".".$strBoxName.".selectedIndex;\n". "if(document.".$form.".".$strBoxName.".options[number].value!=\"0\"){ \n". "document.".$form.".".$strBoxName."_SELECTED.value=\"yes\";\n". "document.".$form.".submit();\n". "}}\n". "</script>\n"; $strReturnBox .= "<input type=\"hidden\" name=\"".$strBoxName."_SELECTED\" id=\"".$strBoxName."_SELECTED\" value=\"\">"; $strReturnBox .= "<select $field1 name='$strBoxName' id='$strBoxName' size='1' OnChange='".$strBoxName."LinkUp()' class='typeselect'>"; } else { $strReturnBox = "<select $field1 name='$strBoxName' id='$strBoxName' size='1'>"; } $ref=$db_array["reference"]; $ref_id=$db_array["reference_id"]; if (!is_array($ref)) $ref=$db_array["REFERENCE"]; if (!is_array($ref_id)) $ref_id=$db_array["REFERENCE_ID"]; If (strlen($strDetText) > 0) $strReturnBox = $strReturnBox."<option value=\"\">$strDetText</option>"; for ($i=0;$i<count($ref);$i++) { $strReturnBox = $strReturnBox."<option "; if (strcasecmp($ref_id[$i], $strSelectedVal) == 0 ) $strReturnBox = $strReturnBox." selected "; $strReturnBox = $strReturnBox."value=\"".$ref_id[$i]. "\">".htmlspecialchars($ref[$i])."</option>"; } return $strReturnBox = $strReturnBox. "</select>"; } /********************************************************************* Äàòû *********************************************************************/ function Calendar($sFieldName, $sFormName="skform", $sFromName="", $sToName="") { if(class_exists("CAdminCalendar")) return CAdminCalendar::Calendar($sFieldName, $sFromName, $sToName); global $bCalendarCode; $func = ""; if($bCalendarCode <> "Y") { $bCalendarCode = "Y"; $func = "<script type=\"text/javascript\">\n". "<!--\n". "window.Calendar = function(params, dateVal)\n". "{\n". " var left, top;\n". " var width = 180, height = 160;\n". " if('['+typeof(window.event)+']' == '[object]')\n". " {\n". " top = (window.event.screenY+20+height>screen.height-40? window.event.screenY-45-height:window.event.screenY+20);\n". " left = (window.event.screenX-width/2);\n". " }\n". " else\n". " {\n". " top = Math.floor((screen.height - height)/2-14);\n". " left = Math.floor((screen.width - width)/2-5);\n". " }\n". " window.open('/bitrix/tools/calendar.php?lang=".LANGUAGE_ID.(defined("ADMIN_SECTION") && ADMIN_SECTION===true?"&admin_section=Y":"&admin_section=N")."&'+params+'&date='+escape(dateVal)+'&initdate='+escape(dateVal),'','scrollbars=no,resizable=yes,width='+width+',height='+height+',left='+left+',top='+top);\n". "}\n". "//-->\n". "</script>\n"; } return $func."<a href=\"javascript:void(0);\" onclick=\"window.Calendar('name=".urlencode($sFieldName)."&from=".urlencode($sFromName)."&to=".urlencode($sToName)."&form=".urlencode($sFormName)."', document['".$sFormName."']['".$sFieldName."'].value);\" title=\"".GetMessage("TOOLS_CALENDAR")."\"><img src=\"".BX_ROOT."/images/icons/calendar.gif\" alt=\"".GetMessage("TOOLS_CALENDAR")."\" width=\"15\" height=\"15\" border=\"0\" /></a>"; } function CalendarDate($sFromName, $sFromVal, $sFormName="skform", $size="10", $param="class=\"typeinput\"") { if(class_exists("CAdminCalendar")) return CAdminCalendar::CalendarDate($sFromName, $sFromVal, $size, ($size > 10)); return '<input type="text" name="'.$sFromName.'" id="'.$sFromName.'" size="'.$size.'" value="'.htmlspecialchars($sFromVal).'" '.$param.' /> '."\n".Calendar($sFromName, $sFormName)."\n"; } function CalendarPeriod($sFromName, $sFromVal, $sToName, $sToVal, $sFormName="skform", $show_select="N", $field_select="class=\"typeselect\"", $field_input="class=\"typeinput\"", $size="10") { if(class_exists("CAdminCalendar")) return CAdminCalendar::CalendarPeriod($sFromName, $sToName, $sFromVal, $sToVal, ($show_select=="Y"), $size, ($size > 10)); $arr = array(); $str = ""; if ($show_select=="Y") { $sname = $sFromName."_DAYS_TO_BACK"; $str = " <script type=\"text/javascript\"> function ".$sFromName."_SetDate() { var number = document.".$sFormName.".".$sname.".selectedIndex-1; document.".$sFormName.".".$sFromName.".disabled = false; if (number>=0) { document.".$sFormName.".".$sFromName.".value = dates[number]; document.".$sFormName.".".$sFromName.".disabled = true; } } </script> "; global $$sname; $value = $$sname; if (strlen($value)>0 && $value!="NOT_REF") $ds="disabled"; ?><script type="text/javascript"> var dates = new Array(); <? for ($i=0; $i<=90; $i++) { $prev_date = GetTime(time()-86400*$i); ?>dates[<?=$i?>]="<?=$prev_date?>";<? if (!is_array($arr["reference"])) $arr["reference"] = array(); if (!is_array($arr["reference_id"])) $arr["reference_id"] = array(); $arr["reference"][] = $i." ".GetMessage("TOOLS_DN"); $arr["reference_id"][] = $i; } ?></script><? $str .= SelectBoxFromArray($sname, $arr, $value , " ", "onchange=\"".$sFromName."_SetDate()\" ".$field_select); $str .= " "; } $str .= '<input '.$ds.' '.$field_input.' type="text" name="'.$sFromName.'" id="'.$sFromName.'" size="'.$size.'" value="'.htmlspecialchars($sFromVal).'" /> '."\n". Calendar($sFromName, $sFormName, $sFromName, $sToName).' ... '."\n". '<input '.$field_input.' type="text" name="'.$sToName.'" id="'.$sToName.'" size="'.$size.'" value="'.htmlspecialchars($sToVal).'" /> '."\n". Calendar($sToName, $sFormName, $sFromName, $sToName)."\n"; return '<span style="white-space: nowrap;">'.$str.'</span>'; } // ïðîâåðÿåò êîððåêòíîñòü ââîäà äàòû ïî çàäàííîìó ôîðìàòó function CheckDateTime($datetime, $format=false) { if ($format===false && defined("FORMAT_DATETIME")) $format = FORMAT_DATETIME; $ar = ParseDateTime($datetime, $format); $day = intval($ar["DD"]); $month = intval($ar["MM"]); $year = intval($ar["YYYY"]); $hour = intval($ar["HH"]); $min = intval($ar["MI"]); $sec = intval($ar["SS"]); if (!checkdate($month, $day, $year)) return false; if ($hour>24 || $hour<0 || $min<0 || $min>59 || $sec<0 || $sec>59) return false; $s1 = preg_replace("/[0-9]+[\n\r\t ]*/", "P", $datetime); $s2 = preg_replace("/(DD|MM|YYYY|HH|MI|SS)[\n\r\t ]*/i".BX_UTF_PCRE_MODIFIER, "P", $format); if(strlen($s1) <= strlen($s2)) return $s1 == substr($s2, 0, strlen($s1)); else return $s2 == substr($s1, 0, strlen($s2)); } // âîçâðàùàåò Unix-timestamp èç ñòðîêè äàòû function MakeTimeStamp($datetime, $format=false) { if($format===false && defined("FORMAT_DATETIME")) $format = FORMAT_DATETIME; $ar = ParseDateTime($datetime, $format); $day = intval($ar["DD"]); $month = intval($ar["MM"]); $year = intval($ar["YYYY"]); $hour = intval($ar["HH"]); $min = intval($ar["MI"]); $sec = intval($ar["SS"]); if(!checkdate($month, $day, $year)) return false; if($hour>24 || $hour<0 || $min<0 || $min>59 || $sec<0 || $sec>59) return false; $ts = mktime($hour, $min, $sec, $month, $day, $year); if($ts === false || ($ts == -1 && version_compare(phpversion(), '5.1.0') < 0)) return false; return $ts; } // ðàçáèðàåò âðåìÿ â ìàññèâ function ParseDateTime($datetime, $format=false) { if ($format===false && defined("FORMAT_DATETIME")) $format = FORMAT_DATETIME; $fm_args = array(); if(preg_match_all("/(DD|MM|YYYY|HH|MI|SS)/i", $format , $fm_args)) { $dt_args = array(); if(preg_match_all("/[0-9]+/", $datetime, $dt_args)) { foreach($fm_args[0] as $i => $v) { $arrResult[$v] = sprintf("%0".strlen($v)."d", intval($dt_args[0][$i])); } return $arrResult; } } return false; } // ïðèáàâëÿåò ê Unix-timestamp çàäàííûé ïåðèîä âðåìåíè function AddToTimeStamp($arrAdd, $stmp=false) { if ($stmp===false) $stmp = time(); if (is_array($arrAdd) && count($arrAdd)>0) { while(list($key, $value) = each($arrAdd)) { $value = intval($value); if (is_int($value)) { switch ($key) { case "DD": $stmp = AddTime($stmp, $value, "D"); break; case "MM": $stmp = AddTime($stmp, $value, "MN"); break; case "YYYY": $stmp = AddTime($stmp, $value, "Y"); break; case "HH": $stmp = AddTime($stmp, $value, "H"); break; case "MI": $stmp = AddTime($stmp, $value, "M"); break; case "SS": $stmp = AddTime($stmp, $value, "S"); break; } } } } return $stmp; } function ConvertDateTime($datetime, $to_format=false, $from_site=false, $bSearchInSitesOnly = false) { if ($to_format===false && defined("FORMAT_DATETIME")) $to_format = FORMAT_DATETIME; return FmtDate($datetime, $to_format, $from_site, false, $bSearchInSitesOnly); } function ConvertTimeStamp($timestamp=false, $type="SHORT", $site=false, $bSearchInSitesOnly = false) { if($timestamp === false) $timestamp = time(); return GetTime($timestamp, $type, $site, $bSearchInSitesOnly); } // êîíâåðòèðóåò äàòó èç ôîðìàòà îäíîãî èç ñàéòîâ â çàäàííûé ôîðìàò function FmtDate($str_date, $format=false, $site=false, $bSearchInSitesOnly = false) { global $DB; if ($site===false && defined("SITE_ID")) $site = SITE_ID; if ($format===false && defined("FORMAT_DATETIME")) $format = FORMAT_DATETIME; return $DB->FormatDate($str_date, CSite::GetDateFormat("FULL", $site, $bSearchInSitesOnly), $format); } function FormatDate($format="", $timestamp="") { if(LANG=="en") { return date($format, $timestamp); } elseif(preg_match_all("/[FfMlD]/", $format, $matches)) { $ar = preg_split("/[FfMlD]/", $format); $result = ""; foreach($matches[0] as $i=>$match) { switch($match) { case "F":$match=GetMessage("MONTH_".date("n", $timestamp)."_S");break; case "f":$match=GetMessage("MONTH_".date("n", $timestamp));break; case "M":$match=GetMessage("MON_".date("n", $timestamp));break; case "l":$match=GetMessage("DAY_OF_WEEK_".date("w", $timestamp));break; case "D":$match=GetMessage("DOW_".date("w", $timestamp));break; } $result .= date($ar[$i], $timestamp).$match; } $result .= date($ar[count($ar)-1], $timestamp); return $result; } else return date($format, $timestamp); } function FormatDateEx($strDate, $format=false, $new_format=false) { $strDate = trim($strDate); if (false === $format) $format = CSite::GetDateFormat('FULL'); if (false === $new_format) $new_format = CSite::GetDateFormat('FULL'); $new_format = str_replace("MI","I", $new_format); $new_format = preg_replace("/([DMYIHS])\\1+/is".BX_UTF_PCRE_MODIFIER, "\\1", $new_format); $arFormat = preg_split('/[^0-9A-Za-z]/', strtoupper($format)); $arDate = preg_split('/[^0-9]/', $strDate); $arParsedDate=Array(); $bound = min(count($arFormat), count($arDate)); for($i=0; $i<$bound; $i++) { if(preg_match("/[^0-9]/", $arDate[$i])) $r = CDatabase::ForSql($arDate[$i], 4); else $r = IntVal($arDate[$i]); $arParsedDate[substr($arFormat[$i], 0, 2)] = $r; } if (intval($arParsedDate["DD"])<=0 || intval($arParsedDate["MM"])<=0 || intval($arParsedDate["YY"])<=0) return false; $strResult = ""; if(intval($arParsedDate["YY"])>1970 && intval($arParsedDate["YY"])<2038) { $ux_time = mktime( intval($arParsedDate["HH"]), intval($arParsedDate["MI"]), intval($arParsedDate["SS"]), intval($arParsedDate["MM"]), intval($arParsedDate["DD"]), intval($arParsedDate["YY"]) ); for ($i=0; $i<strlen($new_format); $i++) { $simbol = substr($new_format, $i ,1); switch ($simbol) { case "F":$match=GetMessage("MONTH_".date("n", $ux_time)."_S");break; case "f":$match=GetMessage("MONTH_".date("n", $ux_time));break; case "M":$match=GetMessage("MON_".date("n", $ux_time));break; case "l":$match=GetMessage("DAY_OF_WEEK_".date("w", $ux_time));break; case "D":$match=GetMessage("DOW_".date("w", $ux_time));break; default: $match = date(substr($new_format, $i ,1), $ux_time); break; } $strResult .= $match; } } else { if($arParsedDate["MM"]<1 || $arParsedDate["MM"]>12) $arParsedDate["MM"] = 1; for ($i=0; $i<strLen($new_format); $i++) { $simbol = substr($new_format, $i ,1); switch ($simbol) { case "F": case "f": $match = str_pad($arParsedDate["MM"], 2, "0", STR_PAD_LEFT); if (intVal($arParsedDate["MM"]) > 0) $match=GetMessage("MONTH_".intVal($arParsedDate["MM"]).($simbol == 'F' ? '_S' : '')); break; case "M": $match = str_pad($arParsedDate["MM"], 2, "0", STR_PAD_LEFT); if (intVal($arParsedDate["MM"]) > 0) $match=GetMessage("MON_".intVal($arParsedDate["MM"])); break; case "l": $match = str_pad($arParsedDate["DD"], 2, "0", STR_PAD_LEFT); if (intVal($arParsedDate["DD"]) > 0) $match = GetMessage("DAY_OF_WEEK_".intVal($arParsedDate["DD"])); break; case "D": $match = str_pad($arParsedDate["DD"], 2, "0", STR_PAD_LEFT); if (intVal($arParsedDate["DD"]) > 0) $match = GetMessage("DOW_".intVal($arParsedDate["DD"])); break; case "d": $match = str_pad($arParsedDate["DD"], 2, "0", STR_PAD_LEFT); break; case "m": $match = str_pad($arParsedDate["MM"], 2, "0", STR_PAD_LEFT); break; case "j": $match = intVal($arParsedDate["DD"]); break; case "Y": $match = str_pad($arParsedDate["YY"], 4, "0", STR_PAD_LEFT); break; case "y": $match = substr($arParsedDate["YY"], 2);break; case "H": $match = str_pad($arParsedDate["HH"], 2, "0", STR_PAD_LEFT); break; case "i": $match = str_pad($arParsedDate["MI"], 2, "0", STR_PAD_LEFT); break; case "s": $match = str_pad($arParsedDate["SS"], 2, "0", STR_PAD_LEFT); break; case "g": $match = intVal($arParsedDate["HH"]); if ($match > 12) $match = $match-12; case "a": case "A": $match = intVal($arParsedDate["HH"]); if ($match > 12) $match = ($match-12)." PM"; else $match .= " AM"; if (substr($new_format, $i ,1) == "a") $match = strToLower($match); default: $match = substr($new_format, $i ,1); break; } $strResult .= $match; } } return $strResult; } // âîçâðàùàåò âðåìÿ â ôîðìàòå òåêóùåãî ÿçûêà ïî çàäàííîìó Unix Timestamp function GetTime($timestamp, $type="SHORT", $site=false, $bSearchInSitesOnly = false) { global $DB; if($site===false && defined("SITE_ID")) $site = SITE_ID; return date($DB->DateFormatToPHP(CSite::GetDateFormat($type, $site, $bSearchInSitesOnly)), $timestamp); } // óñòàðåâøàÿ ôóíêöèÿ function AddTime($stmp, $add, $type="D") { switch ($type) { case "H": $ret = mktime( date("H",$stmp)+$add,date("i",$stmp),date("s",$stmp), date("m",$stmp),date("d",$stmp),date("Y",$stmp)); break; case "M": $ret = mktime( date("H",$stmp),date("i",$stmp)+$add,date("s",$stmp), date("m",$stmp),date("d",$stmp),date("Y",$stmp)); break; case "S": $ret = mktime( date("H",$stmp),date("i",$stmp),date("s",$stmp)+$add, date("m",$stmp),date("d",$stmp),date("Y",$stmp)); break; case "D": $ret = mktime( date("H",$stmp),date("i",$stmp),date("s",$stmp), date("m",$stmp),date("d",$stmp)+$add,date("Y",$stmp)); break; case "MN": $ret = mktime( date("H",$stmp),date("i",$stmp),date("s",$stmp), date("m",$stmp)+$add,date("d",$stmp),date("Y",$stmp)); break; case "Y": $ret = mktime( date("H",$stmp),date("i",$stmp),date("s",$stmp), date("m",$stmp),date("d",$stmp),date("Y",$stmp)+$add); break; } return $ret; } // óñòàðåâøàÿ ôóíêöèÿ function ParseDate($strDate, $format="dmy") { $day = $month = $year = 0; $args = preg_split('#[/.-]#', $strDate); $bound = min(strlen($format), count($args)); for($i=0; $i<$bound; $i++) { if($format[$i] == 'm') $month = intval($args[$i]); elseif($format[$i] == 'd') $day = intval($args[$i]); elseif($format[$i] == 'y') $year = intval($args[$i]); } return (checkdate($month, $day, $year) ? array($day, $month, $year) : 0); } // óñòàðåâøàÿ ôóíêöèÿ function MkDateTime($strDT, $format="d.m.Y H:i:s") { $arr = array("d.m.Y","d.m.Y H:i","d.m.Y H:i:s"); if (!(in_array($format,$arr))) return false; $strDT = preg_replace("/[\n\r\t ]+/", " ", $strDT); list($date,$time) = explode(" ",$strDT); $date = trim($date); $time = trim($time); list($day,$month,$year) = explode(".",$date); list($hour,$min,$sec) = explode(":",$time); $day = intval($day); $month = intval($month); $year = intval($year); $hour = intval($hour); $min = intval($min); $sec = intval($sec); if (!checkdate($month,$day,$year)) return false; if ($hour>24 || $hour<0 || $min<0 || $min>59 || $sec<0 || $sec>59) return false; $ts = mktime($hour,$min,$sec,$month,$day,$year); if($ts <= 0) return false; return $ts; } // óñòàðåâøàÿ ôóíêöèÿ function PHPFormatDateTime($strDateTime, $format="d.m.Y H:i:s") { return date($format, MkDateTime(FmtDate($strDateTime,"D.M.Y H:I:S"), "d.m.Y H:i:s")); } /********************************************************************* Ìàññèâû *********************************************************************/ /* óäàëÿåò äóáëè â ìàññèâå ñîðòèðîâêè ìàññèâ Array ( [0] => T.NAME DESC [1] => T.NAME ASC [2] => T.ID ASC [3] => T.ID DESC [4] => T.DESC ) ïðåîáðàçóåò â Array ( [0] => T.NAME DESC [1] => T.ID ASC [2] => T.DESC ASC ) */ function DelDuplicateSort(&$arSort) { if (is_array($arSort) && count($arSort)>0) { $arSort2 = array(); foreach($arSort as $val) { $arSort1 = explode(" ", trim($val)); $order = array_pop($arSort1); $order_ = strtoupper(trim($order)); if (!($order_=="DESC" || $order_=="ASC")) { $arSort1[] = $order; $order_ = ""; } $by = implode(" ", $arSort1); if(strlen($by)>0 && !array_key_exists($by, $arSort2)) $arSort2[$by] = $order_; } $arSort = array(); foreach($arSort2 as $by=>$order) $arSort[] = $by." ".$order; } } function array2param($cur, $ar) { $str = ""; foreach($ar as $key => $value) { if(is_array($value)) { $str.= (empty($str) ? "" : "&"). array2param( sprintf("%s[%s]", urlencode($cur), urlencode($key)), $value ); } else { $str.= (empty($str) ? "" : "&").sprintf("%s[%s]=%s", urlencode($cur), urlencode($key), urlencode($value)); } } return $str; } function array_convert_name_2_value($arr) { $arr_res = array(); if (is_array($arr) && count($arr)>0) { while (list($key, $value)=each($arr)) { global $$value; $arr_res[$key] = $$value; } } return $arr_res; } function InitBVarFromArr($arr) { if (is_array($arr) && count($arr)>0) { foreach($arr as $value) { global $$value; $$value = ($$value=="Y") ? "Y" : "N"; } } } function TrimArr(&$arr, $trim_value=false) { if(!is_array($arr)) return false; $found = false; while (list($key,$value)=each($arr)) { if ($trim_value) { $arr[$key] = trim($value); } if (strlen(trim($value))<=0) { unset($arr[$key]); $found = true; } } reset($arr); return ($found) ? true : false; } function is_set(&$a, $k=false) { if ($k===false) return isset($a); if(is_array($a)) return array_key_exists($k, $a); return false; } /********************************************************************* Ñòðîêè *********************************************************************/ mt_srand(((double)microtime()*1000000) ^ crc32(uniqid('', true))); function randString($pass_len=10, $pass_chars=false) { static $allchars = "abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ0123456789"; $string = ""; if(is_array($pass_chars)) { while(strlen($string) < $pass_len) { if(function_exists('shuffle')) shuffle($pass_chars); foreach($pass_chars as $chars) { $n = strlen($chars) - 1; $string .= $chars[mt_rand(0, $n)]; } } if(strlen($string) > count($pass_chars)) $string = substr($string, 0, $pass_len); } else { if($pass_chars !== false) { $chars = $pass_chars; $n = strlen($pass_chars) - 1; } else { $chars = $allchars; $n = 61; //strlen($allchars)-1; } for ($i = 0; $i < $pass_len; $i++) $string .= $chars[mt_rand(0, $n)]; } return $string; } //alias for randString() function GetRandomCode($len=8) { return randString($len); } function TruncateText($strText, $intLen ) { If(strlen($strText) >= $intLen ) return substr($strText, 0, $intLen)." ..."; else return $strText; } function InsertSpaces($sText, $iMaxChar=80, $symbol=" ") { $NewString=$sText; if ($iMaxChar>0 && strlen($sText)>$iMaxChar) { $NewString = preg_replace("/([^() \\n\\r\\t%!?{}\\][-]{".$iMaxChar."})/","\\1".$symbol, $NewString); } return $NewString; } function TrimExAll($str,$symbol) { while (substr($str,0,1)==$symbol or substr($str,strlen($str)-1,1)==$symbol) { $str = TrimEx($str,$symbol); } return $str; } function TrimEx($str,$symbol,$side="both") { $str = trim($str); if ($side=="both") { if (substr($str,0,1) == $symbol) $str = substr($str,1,strlen($str)); if (substr($str,strlen($str)-1,1) == $symbol) $str = substr($str,0,strlen($str)-1); } elseif ($side=="left") { if (substr($str,0,1) == $symbol) $str = substr($str,1,strlen($str)); } elseif ($side=="right") { if (substr($str,strlen($str)-1,1) == $symbol) $str = substr($str,0,strlen($str)-1); } return $str; } function utf8win1251($s) { return $GLOBALS["APPLICATION"]->ConvertCharset($s, "UTF-8", "Windows-1251"); } function ToUpper($str) { if(!defined("BX_CUSTOM_TO_UPPER_FUNC")) { if(defined("BX_UTF")) { return strtoupper($str); } else { return strtoupper(strtr($str, "éöóêåíãøùçõúýæäëîðïàâûôÿ÷ñìèòüáþ¸", "ÉÖÓÊÅÍÃØÙÇÕÚÝÆÄËÎÐÏÀÂÛÔß×ÑÌÈÒÜÁÞ¨")); } } else { $func = BX_CUSTOM_TO_UPPER_FUNC; return $func($str); } } function ToLower($str) { if(!defined("BX_CUSTOM_TO_LOWER_FUNC")) { if(defined("BX_UTF")) { return strtolower($str); } else { return strtolower(strtr($str, "ÉÖÓÊÅÍÃØÙÇÕÚÝÆÄËÎÐÏÀÂÛÔß×ÑÌÈÒÜÁÞ¨", "éöóêåíãøùçõúýæäëîðïàâûôÿ÷ñìèòüáþ¸")); } } else { $func = BX_CUSTOM_TO_LOWER_FUNC; return $func($str); } } /********************************** Êîíâåðòàöèÿ òåêñòà äëÿ EMail **********************************/ function convert_code_tag_for_email($text="", $arMsg=array()) { if (strlen($text)<=0) return; $text = stripslashes($text); $text = preg_replace("#<#", "<", $text); $text = preg_replace("#>#", ">", $text); $text = preg_replace("#^(.*?)$#", " \\1", $text); $s1 = "--------------- ".$arMsg["MAIN_CODE_S"]." -------------------"; $s2 = str_repeat("-", strlen($s1)); $text = "\n\n>".$s1."\n".$text."\n>".$s2."\n\n"; return $text; } function PrepareTxtForEmail($text, $lang=false, $convert_url_tag=true, $convert_image_tag=true) { $text = Trim($text); if(strlen($text)<=0) return ""; if($lang===false) $lang = LANGUAGE_ID; $arMsg = IncludeModuleLangFile(__FILE__, $lang, true); $text = preg_replace("#<code(\s+[^>]*>|>)(.+?)</code(\s+[^>]*>|>)#is", "[code]\\2[/code]", $text); $text = preg_replace("#\[code(\s+[^\]]*\]|\])(.+?)\[/code(\s+[^\]]*\]|\])#ies", "convert_code_tag_for_email('\\2', \$arMsg)", $text); $text = preg_replace("/^(\r|\n)+?(.*)$/", "\\2", $text); $text = preg_replace("#<b>(.+?)</b>#is", "\\1", $text); $text = preg_replace("#<i>(.+?)</i>#is", "\\1", $text); $text = preg_replace("#<u>(.+?)</u>#is", "_\\1_", $text); $text = preg_replace("#\[b\](.+?)\[/b\]#is", "\\1", $text); $text = preg_replace("#\[i\](.+?)\[/i\]#is", "\\1", $text); $text = preg_replace("#\[u\](.+?)\[/u\]#is", "_\\1_", $text); $text = preg_replace("#<(/?)quote(.*?)>#is", "[\\1quote]", $text); $s = "-------------- ".$arMsg["MAIN_QUOTE_S"]." -----------------"; $text = preg_replace("#\[quote(.*?)\]#is", "\n>".$s."\n", $text); $text = preg_replace("#\[/quote(.*?)\]#is", "\n>".str_repeat("-", strlen($s))."\n", $text); if($convert_url_tag) { $text = preg_replace("#<a[^>]*href=[\"']?([^>\"' ]+)[\"']?[^>]*>(.+?)</a>#is", "\\2 (URL: \\1)", $text); $text = preg_replace("#\[url\](\S+?)\[/url\]#is", "(URL: \\1)", $text); $text = preg_replace("#\[url\s*=\s*(\S+?)\s*\](.*?)\[\/url\]#is", "\\2 (URL: \\1)", $text); } if($convert_image_tag) { $text = preg_replace("#<img[^>]*src=[\"']?([^>\"' ]+)[\"']?[^>]*>#is", " (IMAGE: \\1) ", $text); $text = preg_replace("#\[img\](.+?)\[/img\]#is", " (IMAGE: \\1) ", $text); } $text = preg_replace("#<ul(\s+[^>]*>|>)#is", "\n", $text); $text = preg_replace("#<ol(\s+[^>]*>|>)#is", "\n", $text); $text = preg_replace("#<li(\s+[^>]*>|>)#is", " [*] ", $text); $text = preg_replace("#</li>#is", "", $text); $text = preg_replace("#</ul>#is", "\n\n", $text); $text = preg_replace("#</ol>#is", "\n\n", $text); $text = preg_replace("#\[list\]#is", "\n", $text); $text = preg_replace("#\[/list\]#is", "\n", $text); $text = preg_replace("#<br>#is", "\n", $text); $text = preg_replace("#<wbr>#is", "", $text); //$text = preg_replace("#<.+?".">#", "", $text); $text = str_replace(""", "\"", $text); $text = str_replace("\", "\\", $text); $text = str_replace("$", "\$", $text); $text = str_replace("!", "!", $text); $text = str_replace("'", "'", $text); $text = str_replace("<", "<", $text); $text = str_replace(">", ">", $text); $text = str_replace(" ", " ", $text); $text = str_replace("|", '|', $text); $text = str_replace("&", "&", $text); return $text; } /********************************** Êîíâåðòàöèÿ òåêñòà â HTML **********************************/ // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function delete_special_symbols($text, $replace="") { static $arr = array( "\x1", // ñïåöñèìâîë äëÿ ïðåîáðàçîâàíèÿ URL'îâ ïðîòîêîëà http, https, ftp "\x2", // ñïåöñèìâîë äëÿ ïðîáåëà ($iMaxStringLen) "\x3", // ñïåöñèìâîë äëÿ ïðåîáðàçîâàíèÿ URL'îâ ïðîòîêîëà mailto "\x4", // ñïåöñèìâîë çàìåíÿþùèé \n (èñïîëüçóåòñÿ äëÿ ïðåîáðàçîâàíèÿ <code>) "\x5", // ñïåöñèìâîë çàìåíÿþùèé \r (èñïîëüçóåòñÿ äëÿ ïðåîáðàçîâàíèÿ <code>) "\x6", // ñïåöñèìâîë çàìåíÿþùèé ïðîáåë (èñïîëüçóåòñÿ äëÿ ïðåîáðàçîâàíèÿ <code>) "\x7", // ñïåöñèìâîë çàìåíÿþùèé òàáóëÿöèþ (èñïîëüçóåòñÿ äëÿ ïðåîáðàçîâàíèÿ <code>) "\x8", // ñïåöñèìâîë çàìåíÿþùèé ñëýø "\" ); return str_replace($arr, $replace, $text); } // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function convert_code_tag_for_html_before($text = "") { if (strlen($text)<=0) return; $text = stripslashes($text); $text = str_replace(chr(2), "", $text); $text = str_replace("\n", chr(4), $text); $text = str_replace("\r", chr(5), $text); $text = str_replace(" ", chr(6), $text); $text = str_replace("\t", chr(7), $text); $text = str_replace("http", "!http!", $text); $text = str_replace("https", "!https!", $text); $text = str_replace("ftp", "!ftp!", $text); $text = str_replace("@", "!@!", $text); $text = str_replace(Array("[","]"), Array(chr(16), chr(17)), $text); $return = "[code]".$text."[/code]"; return $return; } // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function convert_code_tag_for_html_after($text = "", $code_table_class, $code_head_class, $code_body_class, $code_textarea_class) { if (strlen($text)<=0) return; $text = stripslashes($text); $code_mess = GetMessage("MAIN_CODE"); $text = str_replace("!http!", "http", $text); $text = str_replace("!https!", "https", $text); $text = str_replace("!ftp!", "ftp", $text); $text = str_replace("!@!", "@", $text); //$text = str_replace(Array(chr(9), chr(10)), Array("[","]") , $text); $return = "<table class='$code_table_class'><tr><td class='$code_head_class'>$code_mess</td></tr><tr><td class='$code_body_class'><textarea class='$code_textarea_class' contentEditable=false cols=60 rows=15 wrap=virtual>$text</textarea></td></tr></table>"; return $return; } // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function convert_open_quote_tag($quote_table_class, $quote_head_class, $quote_body_class) { global $QUOTE_ERROR, $QUOTE_OPENED, $QUOTE_CLOSED, $MESS; $QUOTE_OPENED++; return "<table class='$quote_table_class' width='95%' border='0' cellpadding='3' cellspacing='1'><tr><td class='".$quote_head_class."'>".GetMessage("MAIN_QUOTE")."</td></tr><tr><td class='".$quote_body_class."'>"; } // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function convert_close_quote_tag() { global $QUOTE_ERROR, $QUOTE_OPENED, $QUOTE_CLOSED; if ($QUOTE_OPENED == 0) { $QUOTE_ERROR++; return; } $QUOTE_CLOSED++; return "</td></tr></table>"; } // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function convert_quote_tag($text="", $quote_table_class, $quote_head_class, $quote_body_class) { global $QUOTE_ERROR, $QUOTE_OPENED, $QUOTE_CLOSED; if (strlen($text)<=0) return; $text = stripslashes($text); $txt = $text; $txt = preg_replace("#\[quote\]#ie", "convert_open_quote_tag('$quote_table_class', '$quote_head_class', '$quote_body_class')", $txt); $txt = preg_replace("#\[/quote\]#ie", "convert_close_quote_tag()", $txt); if (($QUOTE_OPENED==$QUOTE_CLOSED) && ($QUOTE_ERROR==0)) { return $txt; } else { return $text; } } // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function extract_url($s) { $x = 0; while(strpos(",}])>.", substr($s, -1, 1))!==false) { $s2 = substr($s, -1, 1); $s = substr($s, 0, strlen($s)-1); } $res = chr(1).$s."/".chr(1).$s2; return $res; } // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function convert_to_href($url, $link_class="", $event1="", $event2="", $event3="", $script="") { $url = stripslashes($url); $goto = $url; if (strlen($event1)>0 || strlen($event2)>0) { $script = strlen($script)>0 ? $script : "/bitrix/redirect.php"; $goto = $script. "?event1=".urlencode($event1). "&event2=".urlencode($event2). "&event3=".urlencode($event3). "&goto=".urlencode($goto); } $s = "<a class=\"".$link_class."\" href=\"".delete_special_symbols($goto)."\">".$url."</a>"; return $s; } // èñïîëüçóåòñÿ êàê âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ TxtToHTML function convert_to_mailto($s, $link_class="") { $s = stripslashes($s); $s = "<a class=\"".$link_class."\" href=\"mailto:".delete_special_symbols($s)."\" title=\"".GetMessage("MAIN_MAILTO")."\">".$s."</a>"; return $s; } function TxtToHTML( $str, // òåêñò äëÿ ïðåîáðàçîâàíèÿ $bMakeUrls = true, // true - ïðåîáðàçîâàâûòü URL â <a href="URL">URL</a> $iMaxStringLen = 0, // ìàêñèìàëüíàÿ äëèíà ôðàçû áåç ïðîáåëîâ èëè ñèìâîëîâ ïåðåâîäà êàðåòêè $QUOTE_ENABLED = "N", // Y - ïðåîáðàçîâàòü <QUOTE>...</QUOTE> â ðàìêó öèòàòû $NOT_CONVERT_AMPERSAND = "Y", // Y - íå ïðåîáðàçîâûâàòü ñèìâîë "&" â "&" $CODE_ENABLED = "N", // Y - ïðåîáðàçîâàòü <CODE>...</CODE> â readonly textarea $BIU_ENABLED = "N", // Y - ïðåîáðàçîâàòü <B>...</B> è ò.ä. â ñîîòâåòñòâóþùèå HTML òýãè $quote_table_class = "quotetable", // css êëàññ íà òàáëèöó öèòàòû $quote_head_class = "tdquotehead", // css êëàññ íà ïåðâóþ TD òàáëèöû öèòàòû $quote_body_class = "tdquote", // css êëàññ íà âòîðóþ TD òàáëèöû öèòàòû $code_table_class = "codetable", // css êëàññ íà òàáëèöó êîäà $code_head_class = "tdcodehead", // css êëàññ íà ïåðâóþ TD òàáëèöû êîäà $code_body_class = "tdcodebody", // css êëàññ íà âòîðóþ TD òàáëèöû êîäà $code_textarea_class = "codetextarea", // css êëàññ íà textarea â òàáëèöå êîäà $link_class = "txttohtmllink", // css êëàññ íà ññûëêàõ $arUrlEvent = array() // ìàññèâ â íåì åñëè çàäàíû êëþ÷è EVENT1, EVENT2, EVENT3 òî ññûëêè áóäóò ÷åðåç // $arUrlEvent["SCRIPT"] (ïî óìîë÷àíèþ ðàâåí "/bitrix/redirect.php") ) { global $QUOTE_ERROR, $QUOTE_OPENED, $QUOTE_CLOSED; $QUOTE_ERROR = $QUOTE_OPENED = $QUOTE_CLOSED = 0; $str = delete_special_symbols($str); //echo "\n<br>=====================\n<br><pre>".htmlspecialchars($str)."</pre>\n<br>=======================\n<br>"; // âñòàâèì ñïåöñèìâîë chr(2) òàì ãäå â äàëüíåéøåì íåîáõîäèìî âñòàâèòü ïðîáåë if($iMaxStringLen>0) { $str = InsertSpaces($str, $iMaxStringLen, chr(2)); } // \ => chr(8) $str = str_replace("\\", chr(8), $str); // ñïåöñèìâîë çàìåíÿþùèé ñëýø "\" // <quote>...</quote> => [quote]...[/quote] if ($QUOTE_ENABLED=="Y") { $str = preg_replace("#(?:<|\[)(/?)quote(.*?)(?:>|\])#is", " [\\1quote]", $str); } // <code>...</code> => [code]...[/code] // \n => chr(4) // \r => chr(5) if ($CODE_ENABLED=="Y") { $str = preg_replace("#<code(\s+[^>]*>|>)(.+?)</code(\s+[^>]*>|>)#is", "[code]\\2[/code]", $str); $str = preg_replace("#\[code(\s+[^\]]*\]|\])(.+?)\[/code(\s+[^\]]*\]|\])#ies", "convert_code_tag_for_html_before('\\2')", $str); } // <b>...</b> => [b]...[/b] // <i>...</i> => [i]...[/i] // <u>...</u> => [u]...[/u] if ($BIU_ENABLED=="Y") { $str = preg_replace("#<b(\s+[^>]*>|>)(.+?)</b(\s+[^>]*>|>)#is", "[b]\\2[/b]", $str); $str = preg_replace("#<i(\s+[^>]*>|>)(.+?)</i(\s+[^>]*>|>)#is", "[i]\\2[/i]", $str); $str = preg_replace("#<u(\s+[^>]*>|>)(.+?)</u(\s+[^>]*>|>)#is", "[u]\\2[/u]", $str); } // URL => chr(1).URL."/".chr(1) // EMail => chr(3).E-Mail.chr(3) if($bMakeUrls) { $str = preg_replace("#((http|https|ftp):\/\/[a-z:,.'/\#\%=~\\&?*+\[\]_0-9\x01-\x08-]+)#ies", "extract_url('\\1')", $str); //$str = preg_replace("#([=_\.'0-9a-z+~\x01-\x08-]+@([\._0-9a-z\x01-\x08-]+)+\.[a-z]{2,10})#is", chr(3)."\\1".chr(3), $str); $str = preg_replace("#([=_\.'0-9a-z+~\x01-\x08-]+@([_0-9a-z\x01-\x08-]+\.)+[a-z]{2,10})#is", chr(3)."\\1".chr(3), $str); } // êîíâåðòàöèÿ êðèòè÷íûõ ñèìâîëîâ if ($NOT_CONVERT_AMPERSAND!="Y") $str = str_replace("&", "&", $str); static $search=array("<",">","\"","'","%",")","(","+"); static $replace=array("<",">",""","'","%",")","(","+"); $str = str_replace($search, $replace, $str); // chr(1).URL."/".chr(1) => <a href="URL">URL</a> // chr(3).E-Mail.chr(3) => <a href="mailto:E-Mail">E-Mail</a> if($bMakeUrls) { $event1 = $arUrlEvent["EVENT1"]; $event2 = $arUrlEvent["EVENT2"]; $event3 = $arUrlEvent["EVENT3"]; $script = $arUrlEvent["SCRIPT"]; $str = preg_replace("#\x01([^\n\x01]+?)/\x01#ies", "convert_to_href('\\1', '$link_class', '$event1', '$event2', '$event3', '$script')", $str); $str = preg_replace("#\x03([^\n\x03]+?)\x03#ies", "convert_to_mailto('\\1', '$link_class')", $str); } $str = str_replace("\r\n", "\n", $str); $str = str_replace("\n", "<br />\n", $str); $str = preg_replace("# {2}#", " ", $str); $str = preg_replace("#\t#", " ", $str); // chr(2) => " " if($iMaxStringLen>0) { $str = str_replace(chr(2), "<wbr>", $str); } // [quote]...[/quote] => <table>...</table> if ($QUOTE_ENABLED=="Y") { $str = preg_replace("#(\[quote(.*?)\](.*)\[/quote(.*?)\])#ies", "convert_quote_tag('\\1', '$quote_table_class', '$quote_head_class', '$quote_body_class')", $str); } // [code]...[/code] => <textarea>...</textarea> // chr(4) => \n // chr(5) => \r if ($CODE_ENABLED=="Y") { $str = preg_replace("#\[code\](.*?)\[/code\]#ies", "convert_code_tag_for_html_after('\\1', '$code_table_class', '$code_head_class', '$code_body_class', '$code_textarea_class')", $str); $str = str_replace(chr(4), "\n", $str); $str = str_replace(chr(5), "\r", $str); $str = str_replace(chr(6), " ", $str); $str = str_replace(chr(7), "\t", $str); $str = str_replace(chr(16), "[", $str); $str = str_replace(chr(17), "]", $str); } // [b]...[/b] => <b>...</b> // [i]...[/i] => <i>...</i> // [u]...[/u] => <u>...</u> if ($BIU_ENABLED=="Y") { $str = preg_replace("#\[b\](.*?)\[/b\]#is", "<b>\\1</b>", $str); $str = preg_replace("#\[i\](.*?)\[/i\]#is", "<i>\\1</i>", $str); $str = preg_replace("#\[u\](.*?)\[/u\]#is", "<u>\\1</u>", $str); } // chr(8) => \ $str = str_replace(chr(8), "\\", $str); $str = delete_special_symbols($str); return $str; } /********************************* Êîíâåðòàöèÿ HTML â òåêñò *********************************/ function HTMLToTxt($str, $strSiteUrl="", $aDelete=array(), $maxlen=70) { //get rid of whitespace $str = preg_replace("/[\\t\\n\\r]/", " ", $str); //replace tags with placeholders static $search = array( "'<script[^>]*?>.*?</script>'si", "'<style[^>]*?>.*?</style>'si", "'<select[^>]*?>.*?</select>'si", "'&(quot|#34);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", ); static $replace = array( "", "", "", "\"", "\xa1", "\xa2", "\xa3", "\xa9", ); $str = preg_replace($search, $replace, $str); $str = preg_replace("#<[/]{0,1}(b|i|u|em|small|strong)>#i", "", $str); $str = preg_replace("#<[/]{0,1}(font|div|span)[^>]*>#i", "", $str); //èùåì ñïèñêè $str = preg_replace("#<ul[^>]*>#i", "\r\n", $str); $str = preg_replace("#<li[^>]*>#i", "\r\n - ", $str); //óäàëèì òî ÷òî çàäàííî foreach($aDelete as $del_reg) $str = preg_replace($del_reg, "", $str); //èùåì êàðòèíêè $str = preg_replace("/(<img\s.*?src\s*=\s*)([\"']?)(\\/.*?)(\\2)(\s.+?>|\s*>)/is", "[".chr(1).$strSiteUrl."\\3".chr(1)."] ", $str); $str = preg_replace("/(<img\s.*?src\s*=\s*)([\"']?)(.*?)(\\2)(\s.+?>|\s*>)/is", "[".chr(1)."\\3".chr(1)."] ", $str); //èùåì ññûëêè $str = preg_replace("/(<a\s.*?href\s*=\s*)([\"']?)(\\/.*?)(\\2)(\s.+?>|\s*>)(.*?)<\\/a>/is", "\\6 [".chr(1).$strSiteUrl."\\3".chr(1)."] ", $str); $str = preg_replace("/(<a\s.*?href\s*=\s*)([\"']?)(.*?)(\\2)(\s.+?>|\s*>)(.*?)<\\/a>/is", "\\6 [".chr(1)."\\3".chr(1)."] ", $str); //èùåì <br> $str = preg_replace("#<br[^>]*>#i", "\r\n", $str); //èùåì <p> $str = preg_replace("#<p[^>]*>#i", "\r\n\r\n", $str); //èùåì <hr> $str = preg_replace("#<hr[^>]*>#i", "\r\n----------------------\r\n", $str); //èùåì òàáëèöû $str = preg_replace("#<[/]{0,1}(thead|tbody)[^>]*>#i", "", $str); $str = preg_replace("#<([/]{0,1})th[^>]*>#i", "<\\1td>", $str); $str = preg_replace("#</td>#i", "\t", $str); $str = preg_replace("#</tr>#i", "\r\n", $str); $str = preg_replace("#<table[^>]*>#i", "\r\n", $str); $str = preg_replace("#\r\n[ ]+#", "\r\n", $str); //ìî÷èì âîîáùå âñå îñòàâøèåñÿ òýãè $str = preg_replace("#<[/]{0,1}[^>]+>#i", "", $str); $str = preg_replace("#[ ]+ #", " ", $str); $str = str_replace("\t", " ", $str); //ïåðåíîñèì äëèííûå ñòðîêè if($maxlen > 0) $str = preg_replace("#([^\\n\\r]{".intval($maxlen)."}[^ \\r\\n]*[\\] ])([^\\r])#", "\\1\r\n\\2", $str); $str = str_replace(chr(1), " ",$str); return trim($str); } function FormatText($strText, $strTextType="text") { if(strtolower($strTextType)=="html") return $strText; return TxtToHtml($strText); } function htmlspecialcharsEx($str) { static $search = array("&", "<", ">", """, "<", ">", "\""); static $replace = array("&amp;", "&lt;", "&gt;", "&quot;", "<", ">", """); return str_replace($search, $replace, $str); } function htmlspecialcharsback($str) { static $search = array("<", ">", """, "'", "&"); static $replace = array("<", ">", "\"", "'", "&"); return str_replace($search, $replace, $str); } /********************************************************************* Ôàéëû è êàòàëîãè *********************************************************************/ function CheckDirPath($path, $bPermission=true) { $badDirs=Array(); $path = str_replace(array("\\", "//"), "/", $path); if($path[strlen($path)-1]!="/") //îòðåæåì èìÿ ôàéëà { $p=bxstrrpos($path, "/"); $path = substr($path, 0, $p); } while(strlen($path)>1 && $path[strlen($path)-1]=="/") //îòðåæåì / â êîíöå, åñëè åñòü $path=substr($path, 0, strlen($path)-1); $p=bxstrrpos($path, "/"); while($p>0) { if(file_exists($path) && is_dir($path)) { if($bPermission) { if(!is_writable($path)) @chmod($path, BX_DIR_PERMISSIONS); } break; } $badDirs[]=substr($path, $p+1); $path = substr($path, 0, $p); $p=bxstrrpos($path, "/"); } for($i=count($badDirs)-1; $i>=0; $i--) { $path = $path."/".$badDirs[$i]; if(!is_dir($path)) mkdir($path, BX_DIR_PERMISSIONS); } } function CopyDirFiles($path_from, $path_to, $ReWrite = True, $Recursive = False, $bDeleteAfterCopy = False, $strExclude = "") { if (strpos($path_to."/", $path_from."/")===0) return False; if (is_dir($path_from)) { CheckDirPath($path_to."/"); } elseif(is_file($path_from)) { $p = bxstrrpos($path_to, "/"); $path_to_dir = substr($path_to, 0, $p); CheckDirPath($path_to_dir."/"); if (file_exists($path_to) && !$ReWrite) return False; @copy($path_from, $path_to); if(is_file($path_to)) @chmod($path_to, BX_FILE_PERMISSIONS); if ($bDeleteAfterCopy) @unlink($path_from); return True; } else { return True; } if ($handle = @opendir($path_from)) { while (($file = readdir($handle)) !== false) { if ($file == "." || $file == "..") continue; if (strlen($strExclude)>0 && substr($file, 0, strlen($strExclude))==$strExclude) continue; if (is_dir($path_from."/".$file) && $Recursive) { CopyDirFiles($path_from."/".$file, $path_to."/".$file, $ReWrite, $Recursive, $bDeleteAfterCopy, $strExclude); if ($bDeleteAfterCopy) @rmdir($path_from."/".$file); } elseif (is_file($path_from."/".$file)) { if (file_exists($path_to."/".$file) && !$ReWrite) continue; @copy($path_from."/".$file, $path_to."/".$file); @chmod($path_to."/".$file, BX_FILE_PERMISSIONS); if($bDeleteAfterCopy) @unlink($path_from."/".$file); } } @closedir($handle); if ($bDeleteAfterCopy) @rmdir($path_from); return true; } return false; } function DeleteDirFilesEx($path) { if(strlen($path) <= 0) return false; $src = $_SERVER["DOCUMENT_ROOT"].$path; $src = str_replace("//","/",$src); if($src == $_SERVER["DOCUMENT_ROOT"]) return false; $f = true; if(is_file($_SERVER["DOCUMENT_ROOT"].$path)) { if(@unlink($_SERVER["DOCUMENT_ROOT"].$path)) return True; return false; } if($handle = @opendir($_SERVER["DOCUMENT_ROOT"].$path)) { while(($file = readdir($handle)) !== false) { if($file == "." || $file == "..") continue; if(is_dir($_SERVER["DOCUMENT_ROOT"].$path."/".$file)) { if(!DeleteDirFilesEx($path."/".$file)) $f = false; } else { if(!@unlink($_SERVER["DOCUMENT_ROOT"].$path."/".$file)) $f = false; } } closedir($handle); } if(!@rmdir($_SERVER["DOCUMENT_ROOT"].$path)) return false; else return $f; } function DeleteDirFiles($frDir, $toDir, $arExept = array()) { if(is_dir($frDir)) { $d = dir($frDir); while ($entry = $d->read()) { if ($entry=="." || $entry=="..") continue; if (in_array($entry, $arExept)) continue; @unlink($toDir."/".$entry); } $d->close(); } } function RewriteFile($abs_path, $strContent) { CheckDirPath($abs_path); if(file_exists($abs_path) && !is_writable($abs_path)) @chmod($abs_path, BX_FILE_PERMISSIONS); $fd = fopen($abs_path, "wb"); if(!fwrite($fd, $strContent)) return false; @chmod($abs_path, BX_FILE_PERMISSIONS); fclose($fd); return true; } function GetScriptFileExt() { static $FILEMAN_SCRIPT_EXT = false; if($FILEMAN_SCRIPT_EXT !== false) return $FILEMAN_SCRIPT_EXT; $script_files = COption::GetOptionString("fileman", "~script_files", "php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml"); $arScriptFiles = array(); foreach(explode(",", $script_files) as $ext) if(($e = trim($ext)) != "") $arScriptFiles[] = $e; $FILEMAN_SCRIPT_EXT = $arScriptFiles; return $arScriptFiles; } function RemoveScriptExtension($check_name) { foreach(GetScriptFileExt() as $ext) { $ext = strtolower($ext); while(($p = strpos(strtolower($check_name), ".".$ext.".")) !== false) $check_name = substr($check_name, 0, $p).substr($check_name, $p+strlen($ext)+1); if(($p = strrpos($check_name, '.')) !== false && strtolower(substr($check_name, $p+1)) == $ext) $check_name = substr($check_name, 0, $p); } return $check_name; } function HasScriptExtension($name) { $name = strtolower($name); foreach(GetScriptFileExt() as $ext) { $ext = ".".strtolower($ext); while(strpos($name, $ext.".") !== false) return true; if(substr($name, -strlen($ext)) == $ext) return true; } return false; } function GetFileExtension($path) { $path = rtrim($path, "\0.\\/+ "); $pos = strrpos($path, "."); $extension = substr($path, $pos+1); return $extension; } function IsFileUnsafe($name) { $fileList = COption::GetOptionString("main", "~unsafe_files", ".htaccess,.htpasswd,web.config,global.asax"); $arFiles = explode(",", strtolower($fileList)); return in_array(strtolower($name), $arFiles); } function GetFileType($path) { $extension = GetFileExtension(strtolower($path)); switch ($extension) { case "jpg": case "jpeg": case "gif": case "bmp": case "png": $type = "IMAGE"; break; case "swf": $type = "FLASH"; break; case "html": case "htm": case "asp": case "aspx": case "phtml": case "php": case "php3": case "php4": case "php5": case "php6": case "shtml": case "sql": case "txt": case "inc": case "js": case "vbs": case "tpl": case "css": case "shtm": $type = "SOURCE"; break; default: $type = "UNKNOWN"; } return $type; } function GetDirectoryIndex($path, $strDirIndex=false) { return GetDirIndex($path, $strDirIndex); } function GetDirIndex($path, $strDirIndex=false) { global $DOCUMENT_ROOT; if (strlen($_SERVER["DOCUMENT_ROOT"])<=0) $doc_root = $GLOBALS["DOCUMENT_ROOT"]; else $doc_root = $_SERVER["DOCUMENT_ROOT"]; $dir = GetDirPath($path); $arrDirIndex = GetDirIndexArray($strDirIndex); if (is_array($arrDirIndex) && count($arrDirIndex)>0) { foreach($arrDirIndex as $page_index) { if (file_exists($doc_root.$dir.$page_index)) return $page_index; } } return "index.php"; } function GetDirIndexArray($strDirIndex=false) { $default = "index.php index.html index.htm index.phtml default.html index.php3"; if($strDirIndex === false && defined("DIRECTORY_INDEX")) $strDirIndex = DIRECTORY_INDEX; if(trim($strDirIndex) == '') $strDirIndex = $default; $arrRes = array(); $arr = explode(" ", $strDirIndex); foreach($arr as $page_index) { $page_index = trim($page_index); if($page_index <> '') $arrRes[] = $page_index; } return $arrRes; } function GetPagePath($page=false, $get_index_page=null, $obj=false) { if (null === $get_index_page) { if (defined('BX_DISABLE_INDEX_PAGE')) $get_index_page = !BX_DISABLE_INDEX_PAGE; else $get_index_page = true; } if($page===false && $_SERVER["REQUEST_URI"]<>"") $page = $_SERVER["REQUEST_URI"]; if($page===false) $page = $_SERVER["SCRIPT_NAME"]; $found = strpos($page, "?"); $sPath = ($found? substr($page, 0, $found) : $page); //Decoding UTF uri $bUTF = CUtil::DetectUTF8($sPath); $sPath = urldecode($sPath); if($bUTF && !defined("BX_UTF")) { if($obj) $sPath = $obj->ConvertCharset($sPath, "UTF-8", "windows-1251"); elseif(is_set($GLOBALS["APPLICATION"]) && is_object($GLOBALS["APPLICATION"])) $sPath = $GLOBALS["APPLICATION"]->ConvertCharset($sPath, "UTF-8", "windows-1251"); } if(substr($sPath, -1, 1) == "/" && $get_index_page) $sPath .= GetDirectoryIndex($sPath); $sPath = str_replace(array("<",">","\""),array("<",">","""), $sPath); return Rel2Abs("/", $sPath); } function GetDirPath($sPath) { if(strlen($sPath)) { $p = strrpos($sPath, "/"); if($p === false) return '/'; else return substr($sPath, 0, $p+1); } else { return '/'; } } /* This function emulates php internal function basename but does not behave badly on broken locale settings */ function bx_basename($path, $ext) { $path = rtrim($path, "\\/"); if(preg_match("#[^\\\\/]+$#", $path, $match)) $path = $match[0]; if($ext) { $ext_len = strlen($ext); if(strlen($path) > $ext_len && substr($path, -$ext_len) == $ext) $path = substr($path, 0, -$ext_len); } return $path; } function bxstrrpos($haystack, $needle) { if(defined("BX_UTF")) { $ln = strlen($needle); for($i=strlen($haystack)-$ln; $i>=0; $i--) if(substr($haystack, $i, $ln)==$needle) return $i; return false; } $index = strpos(strrev($haystack), strrev($needle)); if($index === false) return false; $index = strlen($haystack) - strlen($needle) - $index; return $index; } function Rel2Abs($curdir, $relpath) { if(strlen($relpath)<=0) return false; /* if(strpos($relpath, "://")>0) return $relpath; */ $relpath = preg_replace("'[\\\/]+'", "/", $relpath); if($relpath[0]=="/" || preg_match("#^[a-z]:/#i", $relpath)) $res = $relpath; else { $curdir = preg_replace("'[\\\/]+'", "/", $curdir); if($curdir[0] != "/" && !preg_match("#^[a-z]:/#i", $curdir)) $curdir = "/".$curdir; if(substr($curdir, -1) != "/") $curdir .= "/"; $res = $curdir.$relpath; } if(($p = strpos($res, "\0"))!==false) $res = substr($res, 0, $p); while(strpos($res, "/./")!==false) $res = str_replace("/./", "/", $res); //$res = preg_replace("'\\.\\.+'", "..", $res); // ....... while(($pos=strpos($res, "../"))!==false) { $lp = substr($res, 0, $pos-1); $posl = bxstrrpos($lp, "/"); if($posl===false) return; $lp = substr($lp, 0, $posl+1); $rp = substr($res, $pos+3); $res = $lp.$rp; } $res = preg_replace("'[\\\/]+'", "/", $res); $res = rtrim($res, "\0"); return $res; } /********************************************************************* ßçûêîâûå ôàéëû *********************************************************************/ function GetMessage($name, $aReplace=false) { global $MESS; $s = $MESS[$name]; if($aReplace!==false && is_array($aReplace)) foreach($aReplace as $search=>$replace) $s = str_replace($search, $replace, $s); return $s; } global $ALL_LANG_FILES; $ALL_LANG_FILES = Array(); function GetLangFileName($before, $after, $lang=false) { if ($lang===false) $lang = LANGUAGE_ID; global $ALL_LANG_FILES; $ALL_LANG_FILES[] = $before.$lang.$after; if(file_exists($before.$lang.$after)) return $before.$lang.$after; if(file_exists($before."en".$after)) return $before."en".$after; if(strpos($before, "/bitrix/modules/")===false) return $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/lang/en/tools.php"; $old_path = Rtrim($before, "/"); $old_path = substr($old_path, strlen($_SERVER["DOCUMENT_ROOT"])); $path = substr($old_path, 16); $module = substr($path, 0, strpos($path, "/")); $path = substr($path, strpos($path, "/")); if(substr($path, -5)=="/lang") $path = substr($path, 0, -5); IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/".$module.$path.$after, $lang); return $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/".$module."/lang/".$lang.$path.$after; } function __IncludeLang($path, $bReturnArray=false) { global $ALL_LANG_FILES; $ALL_LANG_FILES[] = $path; if($bReturnArray) $MESS = array(); else global $MESS; if(file_exists($path)) include($path); //read messages from user lang file static $bFirstCall = true; if($bFirstCall) { $bFirstCall = false; $fname = $_SERVER["DOCUMENT_ROOT"].BX_ROOT."/php_interface/user_lang/".LANGUAGE_ID."/lang.php"; if(file_exists($fname)) { $arMess = __IncludeLang($fname, true); foreach($arMess as $key=>$val) $GLOBALS["MESS"][str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"].$key))] = $val; } } //redefine messages from user lang file $path = str_replace("\\", "/", realpath($path)); if(isset($GLOBALS["MESS"][$path]) && is_array($GLOBALS["MESS"][$path])) foreach($GLOBALS["MESS"][$path] as $key=>$val) $MESS[$key] = $val; if($bReturnArray) return $MESS; else return true; } function IncludeTemplateLangFile($filepath, $lang=false) { global $BX_DOC_ROOT; $filepath = rtrim(preg_replace("'[\\\\/]+'", "/", $filepath), "/ "); $module_path = "/bitrix/modules/"; $templ_path = BX_PERSONAL_ROOT."/templates/"; $module_name = ""; if(strpos($filepath, $templ_path)!==false) { $templ_pos = strlen($filepath) - strpos(strrev($filepath), strrev($templ_path)); $rel_path = substr($filepath, $templ_pos); $p = strpos($rel_path, "/"); if(!$p) return; $template_name = substr($rel_path, 0, $p); $file_name = substr($rel_path, $p+1); $p = strpos($file_name, "/"); if($p>0) $module_name = substr($file_name, 0, $p); } elseif(strpos($filepath, $module_path) !== false) { $templ_pos = strlen($filepath) - strpos(strrev($filepath), strrev($module_path)); $rel_path = substr($filepath, $templ_pos); $p = strpos($rel_path, "/"); if(!$p) return; $module_name = substr($rel_path, 0, $p); if(defined("SITE_TEMPLATE_ID")) $template_name = SITE_TEMPLATE_ID; else $template_name = ".default"; $file_name = substr($rel_path, $p + strlen("/install/templates/")); } else return false; $templ_path = $BX_DOC_ROOT.$templ_path; $module_path = $BX_DOC_ROOT.$module_path; if((substr($file_name, -16) == ".description.php") && $module_name!="") { if((($lang!==false && $lang!="en" && $lang!="ru") || ($lang===false && LANGUAGE_ID!="en" && LANGUAGE_ID!="ru") && file_exists($module_path.$module_name."/install/templates/lang/en/".$file_name))) __IncludeLang($module_path.$module_name."/install/templates/lang/en/".$file_name); if(file_exists($module_path.$module_name."/install/templates/lang/".($lang===false?LANGUAGE_ID:$lang)."/".$file_name)) __IncludeLang($module_path.$module_name."/install/templates/lang/".($lang===false?LANGUAGE_ID:$lang)."/".$file_name); } if(file_exists($templ_path.$template_name."/lang/".($lang===false?LANGUAGE_ID:$lang)."/".$file_name)) { if(($lang!==false && $lang!="en" && $lang!="ru") || ($lang===false && LANGUAGE_ID!="en" && LANGUAGE_ID!="ru")) __IncludeLang($templ_path.$template_name."/lang/en/".$file_name); __IncludeLang($templ_path.$template_name."/lang/".($lang===false?LANGUAGE_ID:$lang)."/".$file_name); if(substr($file_name, -16) != ".description.php") return ; } elseif($template_name!=".default" && file_exists($templ_path.".default/lang/".($lang===false?LANGUAGE_ID:$lang)."/".$file_name)) { if(($lang!==false && $lang!="en" && $lang!="ru") || ($lang===false && LANGUAGE_ID!="en" && LANGUAGE_ID!="ru")) __IncludeLang($templ_path.".default/lang/en/".$file_name); __IncludeLang($templ_path.".default/lang/".($lang===false?LANGUAGE_ID:$lang)."/".$file_name); } elseif($module_name!="" && file_exists($module_path.$module_name."/install/templates/lang/".($lang===false?LANGUAGE_ID:$lang)."/".$file_name)) { if(($lang!==false && $lang!="en" && $lang!="ru") || ($lang===false && LANGUAGE_ID!="en" && LANGUAGE_ID!="ru")) __IncludeLang($module_path.$module_name."/install/templates/lang/en/".$file_name); __IncludeLang($module_path.$module_name."/install/templates/lang/".($lang===false?LANGUAGE_ID:$lang)."/".$file_name); } } function IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false) { global $BX_DOC_ROOT; $filepath = rtrim(preg_replace("'[\\\\/]+'", "/", $filepath), "/ "); $module_path = "/modules/"; if(strpos($filepath, $module_path) !== false) { $pos = strlen($filepath) - strpos(strrev($filepath), strrev($module_path)); $rel_path = substr($filepath, $pos); $p = strpos($rel_path, "/"); if(!$p) return false; $module_name = substr($rel_path, 0, $p); $rel_path = substr($rel_path, $p+1); $module_path = $BX_DOC_ROOT.BX_ROOT.$module_path.$module_name; } elseif(strpos($filepath, "/.last_version/") !== false) { $pos = strlen($filepath) - strpos(strrev($filepath), strrev("/.last_version/")); $rel_path = substr($filepath, $pos); $module_path = substr($filepath, 0, $pos-1); } else { return false; } if($lang === false) $lang = LANGUAGE_ID; $arMess = array(); if(file_exists($module_path."/lang/".$lang."/".$rel_path)) { if($lang <> "en" && $lang <> "ru") { $arMess = __IncludeLang($module_path."/lang/en/".$rel_path, $bReturnArray); } $msg = __IncludeLang($module_path."/lang/".$lang."/".$rel_path, $bReturnArray); if(is_array($msg)) $arMess = array_merge($arMess, $msg); } elseif(file_exists($module_path."/lang/en/".$rel_path)) { $arMess = __IncludeLang($module_path."/lang/en/".$rel_path, $bReturnArray); } if($bReturnArray) return $arMess; return true; } /********************************************************************* Îòëàäêà *********************************************************************/ function mydump($thing, $maxdepth=-1, $depth=0) { $res=""; $fmt = sprintf ("%%%ds", 4*$depth); $pfx = sprintf ($fmt, ""); $type = gettype($thing); if($type == 'array') { $n = sizeof($thing); $res.="$pfx array($n) => \n"; foreach(array_keys($thing) as $key) { $res.=" $pfx"."[".$key."] =>\n"; $res.=mydump($thing[$key], $maxdepth, $depth+1); } } elseif($type == 'string') { $n = strlen($thing); $res.="$pfx string($n) =>\n"; $res.="$pfx\"".$thing."\"\n"; } elseif($type == 'object') { $name = get_class($thing); $res.="$pfx object($name) =>\n"; $methodArray = get_class_methods($name); foreach (array_keys($methodArray) as $m) $res.=" $pfx method($m) => $methodArray"."[".$m."]\n"; $classVars = get_class_vars($name); foreach(array_keys($classVars) as $v) { $res.=" $pfx default => $v =>\n"; $res.=mydump($classVars[$v], $maxdepth, $depth+2); } $objectVars = get_object_vars($thing); foreach (array_keys($objectVars) as $v) { $res.=" $pfx $v =>\n"; $res.=mydump($objectVars[$v], $maxdepth, $depth+2); } } elseif ($type == 'boolean') { if($thing) $res.="$pfx boolean(true)\n"; else $res.="$pfx boolean(false)\n"; } else $res.="$pfx $type(".$thing.")\n"; return $res; } function SendError($error) { if(defined('ERROR_EMAIL') && ERROR_EMAIL <> '') { $from = (defined('ERROR_EMAIL_FROM') && ERROR_EMAIL_FROM <> ''? ERROR_EMAIL_FROM : 'error@bitrix.ru'); $reply_to = (defined('ERROR_EMAIL_REPLY_TO') && ERROR_EMAIL_REPLY_TO <> ''? ERROR_EMAIL_REPLY_TO : 'admin@bitrix.ru'); bxmail(ERROR_EMAIL, $_SERVER['HTTP_HOST'].": Error!", $error. "HTTP_GET_VARS:\n".mydump($_GET)."\n\n". "HTTP_POST_VARS:\n".mydump($_POST)."\n\n". "HTTP_COOKIE_VARS:\n".mydump($_COOKIE)."\n\n". "HTTP_SERVER_VARS:\n".mydump($_SERVER)."\n\n", "From: ".$from."\r\n". "Reply-To: ".$reply_to."\r\n". "X-Mailer: PHP/" . phpversion() ); } } function AddMessage2Log($sText, $sModule = "") { if (defined("LOG_FILENAME") && strlen(LOG_FILENAME)>0) { if (strlen($sText)>0) { ignore_user_abort(true); if ($fp = @fopen(LOG_FILENAME, "ab+")) { if (flock($fp, LOCK_EX)) { @fwrite($fp, date("Y-m-d H:i:s")." - ".$sModule." - ".$sText."\n"); if (function_exists("debug_backtrace")) { $arBacktrace = debug_backtrace(); $strFunctionStack = ""; $iterationsCount = min(count($arBacktrace), 4); for ($i = 1; $i < $iterationsCount; $i++) { if (strlen($strFunctionStack)>0) { $strFunctionStack .= " < "; } if (strlen($arBacktrace[$i]["class"])>0) { $strFunctionStack .= $arBacktrace[$i]["class"]."::"; } $strFunctionStack .= $arBacktrace[$i]["function"]; } if (strlen($strFunctionStack)>0) { @fwrite($fp, " ".$strFunctionStack."\n"); } } @fwrite($fp, "----------\n"); @fflush($fp); @flock($fp, LOCK_UN); @fclose($fp); } } ignore_user_abort(false); } } } /********************************************************************* Êâîòèðîâàíèå *********************************************************************/ function UnQuote($str, $type) { $str = str_replace("\0", "", $str); if($type == "syb") $str = str_replace("''", "'", $str); elseif($type == "gpc") { $str = str_replace("\\'","'", $str); $str = str_replace('\\"','"', $str); $str = str_replace("\\\\","\\", $str); } return $str; } function __unquoteitem(&$item, $key, $param = Array()) { $first_use = $param["first_use"]; $type = $param["type"]; $register_globals = $first_use && ((bool)ini_get("register_globals")); if(is_array($item)) { //array_walk($item, '__unquoteitem', Array("type"=>$type, "first_use"=>false)); foreach($item as $k=>$v) __unquoteitem($item[$k], $k, Array("type"=>$type, "first_use"=>false)); if($register_globals) { global $$key; if(isset($$key) && is_array($$key)/* && count($$key)==count($item)*/) //array_walk(&$$key, '__unquoteitem', Array("type"=>$type, "first_use"=>false)); foreach($$key as $k=>$v) __unquoteitem($GLOBALS[$key][$k], $k, Array("type"=>$type, "first_use"=>false)); } } else { if($register_globals) { global $$key; if(isset($$key) && $$key==$item) $$key = UnQuote($$key, $type); } $item = UnQuote($item, $type); } } function UnQuoteArr(&$arr, $syb = false) { if (is_array($arr)) { if(ini_get("magic_quotes_sybase")==1) array_walk($arr, '__unquoteitem', Array("type"=>"syb", "first_use"=>true)); elseif(ini_get("magic_quotes_gpc")==1) array_walk($arr, '__unquoteitem', Array("type"=>"gpc", "first_use"=>true)); else array_walk($arr, '__unquoteitem', Array("type"=>"nulls", "first_use"=>true)); } } function UnQuoteAll() { global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS; $superglobals = array('_GET', '_SESSION', '_POST', '_COOKIE', '_REQUEST', '_FILES', '_SERVER', 'GLOBALS', '_ENV'); foreach($superglobals as $key) { unset($_REQUEST[$key]); unset($_GET[$key]); unset($_POST[$key]); unset($_COOKIE[$key]); unset($HTTP_GET_VARS[$key]); unset($HTTP_POST_VARS[$key]); unset($HTTP_COOKIE_VARS[$key]); } UnQuoteArr($_GET); if(!defined("BX_SKIP_POST_UNQUOTE") || BX_SKIP_POST_UNQUOTE !== true) { UnQuoteArr($_POST); UnQuoteArr($_REQUEST); UnQuoteArr($HTTP_POST_VARS); } else { $_REQUEST = array_merge($_COOKIE, $_GET); UnQuoteArr($_REQUEST); } UnQuoteArr($_COOKIE); UnQuoteArr($HTTP_GET_VARS); UnQuoteArr($HTTP_COOKIE_VARS); if(version_compare(phpversion(), "5.3.0", "<") && ini_get("magic_quotes_runtime")==1) set_magic_quotes_runtime(0); } /********************************************************************* Ïðî÷èå ôóíêöèè *********************************************************************/ function LocalRedirect($url, $skip_security_check=false, $status="302 Found") { global $HTTP_HOST, $APPLICATION, $SERVER_PORT; global $oldSiteExpireDate, $SiteExpireDate; if(defined("DEMO") && DEMO=="Y" && (!defined("SITEEXPIREDATE") || strlen(SITEEXPIREDATE) <= 0 || SITEEXPIREDATE!=OLDSITEEXPIREDATE)) die(GetMessage("TOOLS_TRIAL_EXP")); $url = str_replace("&","&",$url); $sessid = Get_PHPSESSID(); $sessname = Get_PHPSESSID_NAME(); if (strlen($sessid)>0 && false) { if(strpos($url,$sessname."=")===false) { $arr_url = explode("#",$url); $url_1 = $arr_url[0]; $url_2 = $arr_url[1]; if(!(strpos($url, "?") === false)) $url_1 .= "&".$sessname."=".$sessid; else $url_1 .= "?".$sessname."=".$sessid; $url = $url_1.((strlen($url_2)>0) ? "#".$url_2 : ""); } } $arr = explode("?",$url); if (strpos($arr[0],"/")===false) $url = $APPLICATION->GetCurDir().$url; if(function_exists("getmoduleevents")) { $db_events = GetModuleEvents("main", "OnBeforeLocalRedirect"); while($arEvent = $db_events->Fetch()) ExecuteModuleEventEx($arEvent, array(&$url, $skip_security_check)); } // http response splitting defence $url = str_replace ("\r", "", $url); $url = str_replace ("\n", "", $url); CHTTP::SetStatus($status); if( strtolower(substr($url,0,7))=="http://" || strtolower(substr($url,0,8))=="https://" || strtolower(substr($url,0,6))=="ftp://") { header("Request-URI: $url"); header("Content-Location: $url"); header("Location: $url"); } else { if($SERVER_PORT <> 80 && $SERVER_PORT <> 443 && $SERVER_PORT > 0 && strpos($HTTP_HOST, ":") === false) $HTTP_HOST .= ":".$SERVER_PORT; $protocol = (CMain::IsHTTPS() ? "https" : "http"); header("Request-URI: $protocol://$HTTP_HOST$url"); header("Content-Location: $protocol://$HTTP_HOST$url"); header("Location: $protocol://$HTTP_HOST$url"); } if(function_exists("getmoduleevents")) { $db_events = GetModuleEvents("main", "OnLocalRedirect"); while($arEvent = $db_events->Fetch()) ExecuteModuleEventEx($arEvent); } exit; } function WriteFinalMessage($message = "") { echo $message; exit; } function FindUserID($tag_name, $tag_value, $user_name="", $form_name = "form1", $tag_size = "3", $tag_maxlength="", $button_value = "...", $tag_class="typeinput", $button_class="tablebodybutton", $search_page="/bitrix/admin/user_search.php") { global $APPLICATION; $tag_name_x = preg_replace("/([^a-z0-9]|\[|\])/is", "x", $tag_name); if($APPLICATION->GetGroupRight("main") >= "R") { $strReturn = " <input type=\"text\" name=\"".$tag_name."\" id=\"".$tag_name."\" value=\"".$tag_value."\" size=\"".$tag_size."\" maxlength=\"".$tag_maxlength."\" class=\"".$tag_class."\"> <iframe style=\"width:0px; height:0px; border:0px\" src=\"javascript:''\" name=\"hiddenframe".$tag_name."\" id=\"hiddenframe".$tag_name."\"></iframe> <input class=\"".$button_class."\" type=\"button\" name=\"FindUser\" id=\"FindUser\" OnClick=\"window.open('".$search_page."?lang=".LANGUAGE_ID."&FN=".$form_name."&FC=".$tag_name."', '', 'scrollbars=yes,resizable=yes,width=760,height=500,top='+Math.floor((screen.height - 560)/2-14)+',left='+Math.floor((screen.width - 760)/2-5));\" value=\"".$button_value."\"> <span id=\"div_".$tag_name."\">".$user_name."</span> <script type=\"text/javascript\"> "; if($user_name=="") $strReturn.= "var tv".$tag_name_x."='';\n"; else $strReturn.= "var tv".$tag_name_x."='".CUtil::JSEscape($tag_value)."';\n"; $strReturn.= " function Ch".$tag_name_x."() { var DV_".$tag_name_x."; DV_".$tag_name_x." = document.getElementById(\"div_".$tag_name."\"); if (tv".$tag_name_x."!=document.".$form_name."['".$tag_name."'].value) { tv".$tag_name_x."=document.".$form_name."['".$tag_name."'].value; if (tv".$tag_name_x."!='') { DV_".$tag_name_x.".innerHTML = '<i>".GetMessage("MAIN_WAIT")."</i>'; document.getElementById(\"hiddenframe".$tag_name."\").src='/bitrix/admin/get_user.php?ID=' + tv".$tag_name_x."+'&strName=".$tag_name."&lang=".LANG.(defined("ADMIN_SECTION") && ADMIN_SECTION===true?"&admin_section=Y":"")."'; } else DV_".$tag_name_x.".innerHTML = ''; } setTimeout(function(){Ch".$tag_name_x."()},1000); } Ch".$tag_name_x."(); //--> </script> "; } else { $strReturn = " <input type=\"text\" name=\"$tag_name\" id=\"$tag_name\" value=\"$tag_value\" size=\"$tag_size\" maxlength=\"strMaxLenght\"> <input type=\"button\" name=\"FindUser\" id=\"FindUser\" OnClick=\"window.open('".$search_page."?lang=".LANGUAGE_ID."&FN=$form_name&FC=$tag_name', '', 'scrollbars=yes,resizable=yes,width=760,height=560,top='+Math.floor((screen.height - 560)/2-14)+',left='+Math.floor((screen.width - 760)/2-5));\" value=\"$button_value\"> $user_name "; } return $strReturn; } function GetWhoisLink($ip, $class='') { $URL = COption::GetOptionString('main', 'whois_service_url', 'http://whois.domaintools.com/#IP#'); $URL = str_replace("#IP#", urlencode($ip), $URL); return '<a href="'.$URL.'"'.($class <> ''? ' class="'.$class.'"':'').' target="_blank" title="'.GetMessage("WHOIS_SERVICE").'">'.htmlspecialchars($ip).'</a>'; } function IsIE() { global $HTTP_USER_AGENT; if( strpos($HTTP_USER_AGENT, "Opera") == false && preg_match('#(MSIE|Internet Explorer) ([0-9]).([0-9])+#', $HTTP_USER_AGENT, $version) ) { if(intval($version[2]) > 0) return DoubleVal($version[2].".".$version[3]); else return false; } else { return false; } } function GetCountryByID($id, $lang=LANGUAGE_ID) { $msg = IncludeModuleLangFile(__FILE__, $lang, true); return $msg["COUNTRY_".$id]; } function GetCountryArray($lang=LANGUAGE_ID) { $arMsg = IncludeModuleLangFile(__FILE__, $lang, true); $arr = array(); foreach($arMsg as $id=>$country) if(strpos($id, "COUNTRY_") === 0) $arr[intval(substr($id, 8))] = $country; asort($arr); $arCountry = array("reference_id"=>array_keys($arr), "reference"=>array_values($arr)); return $arCountry; } function minimumPHPVersion($vercheck) { $minver = explode(".", $vercheck); $curver = explode(".", phpversion()); if ((IntVal($curver[0]) < IntVal($minver[0])) || ((IntVal($curver[0]) == IntVal($minver[0])) && (IntVal($curver[1]) < IntVal($minver[1]))) || ((IntVal($curver[0]) == IntVal($minver[0])) && (IntVal($curver[1]) == IntVal($minver[1])) && (IntVal($curver[2]) < IntVal($minver[2])))) return false; else return true; } function FormDecode() { global $HTTP_ENV_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_POST_FILES, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS; $superglobals = Array('_GET'=>1, '_SESSION'=>1, '_POST'=>1, '_COOKIE'=>1, '_REQUEST'=>1, '_FILES'=>1, '_SERVER'=>1, 'GLOBALS'=>1, '_ENV'=>1); foreach($superglobals as $gl=>$t) { unset($_REQUEST[$gl]); unset($_GET[$gl]); unset($_POST[$gl]); unset($_COOKIE[$gl]); } $register_globals = (bool) ini_get("register_globals"); if (!$register_globals) { $HTTP_ENV_VARS = $_ENV; foreach($_ENV as $key => $val) if(!isset($superglobals[$key])) $GLOBALS[$key] = $val; $HTTP_GET_VARS = $_GET; foreach($_GET as $key => $val) if(!isset($superglobals[$key])) $GLOBALS[$key] = $val; $HTTP_POST_VARS = $_POST; foreach($_POST as $key => $val) if(!isset($superglobals[$key])) $GLOBALS[$key] = $val; $HTTP_POST_FILES = $_FILES; foreach($_FILES as $key => $val) if(!isset($superglobals[$key])) $GLOBALS[$key] = $val; $HTTP_COOKIE_VARS = $_COOKIE; foreach($_COOKIE as $key => $val) if(!isset($superglobals[$key])) $GLOBALS[$key] = $val; $HTTP_SERVER_VARS = $_SERVER; foreach($_SERVER as $key => $val) if(!isset($superglobals[$key])) $GLOBALS[$key] = $val; } } function QueryGetData($SITE, $PORT, $PATH, $QUERY_STR, &$errno, &$errstr, $sMethod="GET", $sProto="", $sContentType = 'N') { $ob = new CHTTP(); $ob->Query( $sMethod, $SITE, $PORT, $PATH . ($sMethod == 'GET' ? ((strpos($PATH, '?') === false ? '?' : '&') . $QUERY_STR) : ''), $sMethod == 'POST' ? $QUERY_STR : false, $sProto, $sContentType ); $errno = $ob->errno; $errstr = $ob->errstr; return $ob->result; } function xmlize_xmldata($data) { $data = trim($data); $vals = $index = $array = array(); $parser = xml_parser_create("ISO-8859-1"); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, $data, $vals, $index); xml_parser_free($parser); $i = 0; $tagname = $vals[$i]['tag']; if (isset($vals[$i]['attributes'])) { $array[$tagname]['@'] = $vals[$i]['attributes']; } else { $array[$tagname]['@'] = array(); } $array[$tagname]["#"] = xml_depth_xmldata($vals, $i); return $array; } function xml_depth_xmldata($vals, &$i) { $children = array(); if (isset($vals[$i]['value'])) { array_push($children, $vals[$i]['value']); } while (++$i < count($vals)) { switch ($vals[$i]['type']) { case 'open': if (isset($vals[$i]['tag'])) { $tagname = $vals[$i]['tag']; } else { $tagname = ''; } if (isset($children[$tagname])) { $size = sizeof($children[$tagname]); } else { $size = 0; } if (isset($vals[$i]['attributes'])) { $children[$tagname][$size]['@'] = $vals[$i]["attributes"]; } $children[$tagname][$size]['#'] = xml_depth_xmldata($vals, $i); break; case 'cdata': array_push($children, $vals[$i]['value']); break; case 'complete': $tagname = $vals[$i]['tag']; if(isset($children[$tagname])) { $size = sizeof($children[$tagname]); } else { $size = 0; } if(isset($vals[$i]['value'])) { $children[$tagname][$size]["#"] = $vals[$i]['value']; } else { $children[$tagname][$size]["#"] = ''; } if (isset($vals[$i]['attributes'])) { $children[$tagname][$size]['@'] = $vals[$i]['attributes']; } break; case 'close': return $children; break; } } return $children; } function Help($module="", $anchor="", $help_file="") { global $APPLICATION, $IS_HELP; if (strlen($help_file)<=0) $help_file = basename($APPLICATION->GetCurPage()); if (strlen($anchor)>0) $anchor = "#".$anchor; if($IS_HELP!==true) { $height = "500"; //$width = "545"; $width = "780"; echo "<script type=\"text/javascript\"> <!-- function Help(file, module, anchor) { window.open('".BX_ROOT."/tools/help_view.php?local=Y&file='+file+'&module='+module+'&lang=".LANGUAGE_ID."'+anchor, '','scrollbars=yes,resizable=yes,width=".$width.",height=".$height.",top='+Math.floor((screen.height - ".$height.")/2-14)+',left='+Math.floor((screen.width - ".$width.")/2-5)); } //--> </script>"; $IS_HELP=true; } echo "<a href=\"javascript:Help('".urlencode($help_file)."','".$module."','".$anchor."')\" title='".GetMessage("TOOLS_HELP")."'><img src='".BX_ROOT."/images/main/show_help.gif' width='16' height='16' border='0' alt='".GetMessage("TOOLS_HELP")."' align='absbottom' vspace='2' hspace='1'></a>"; } function InitBVar(&$var) { $var = ($var=="Y") ? "Y" : "N"; } function init_get_params($url) { return InitURLParam($url); } function InitURLParam($url=false) { if ($url===false) $url = $_SERVER["REQUEST_URI"]; $start = strpos($url, "?"); if ($start!==false) { $end = strpos($url, "#"); $length = ($end>0) ? $end-$start-1 : strlen($url); $params = substr($url, $start+1, $length); parse_str($params, $_GET); parse_str($params, $HTTP_GET_VARS); parse_str($params, $arr); $_REQUEST += $arr; $GLOBALS += $arr; } } function _ShowHtmlspec($str) { $str = str_replace("<br>", "\n", $str); $str = str_replace("<br />", "\n", $str); $str = htmlspecialchars($str); $str = nl2br($str); $str = str_replace("&", "&", $str); return $str; } function ShowNote($strNote, $cls="notetext") { if($strNote <> "") { $GLOBALS["APPLICATION"]->IncludeComponent( "bitrix:system.show_message", ".default", Array( "MESSAGE"=> $strNote, "STYLE" => $cls, ), null, array( "HIDE_ICONS" => "Y" ) ); } } function ShowError($strError, $cls="errortext") { if($strError <> "") { $GLOBALS["APPLICATION"]->IncludeComponent( "bitrix:system.show_message", ".default", Array( "MESSAGE"=> $strError, "STYLE" => $cls, ), null, array( "HIDE_ICONS" => "Y" ) ); } } function ShowMessage($arMess) { if(!is_array($arMess)) $arMess=Array("MESSAGE" => $arMess, "TYPE" => "ERROR"); if($arMess["MESSAGE"] <> "") { $GLOBALS["APPLICATION"]->IncludeComponent( "bitrix:system.show_message", ".default", Array( "MESSAGE"=> $arMess["MESSAGE"], "STYLE" => ($arMess["TYPE"]=="OK"?"notetext":"errortext"), ), null, array( "HIDE_ICONS" => "Y" ) ); } } function DeleteParam($ParamNames) { if(count($_GET) < 1) return ""; $string = ""; foreach($_GET as $key=>$val) { $bFound = false; foreach($ParamNames as $param) { if(strcasecmp($param, $key) == 0) { $bFound = true; break; } } if($bFound == false) { if(!is_array($val)) { if(strlen($string) > 0) $string .= '&'; $string .= urlencode($key).'='.urlencode($val); } else { $string.= (empty($string) ? "" : "&").array2param($key, $val); } } } return $string; } function check_email($email) { $email = trim($email); if(preg_match("#.*?[<\[\(](.*?)[>\]\)].*#i", $email, $arr) && strlen($arr[1])>0) $email = $arr[1]; if(preg_match("#^[=_.0-9a-z+~'-]+@(([-0-9a-z_]+\.)+)([a-z]{2,10})$#i", $email)) return true; else return false; } function initvar($varname, $value='') { global $$varname; if(!isset($$varname)) $$varname=$value; } function ClearVars($prefix="str_") { $n = strlen($prefix); foreach($GLOBALS as $key=>$val) if(strncmp($key, $prefix, $n) == 0) unset($GLOBALS[$key]); } function Get_PHPSESSID() { $s = ini_get("session.name"); global $$s; return $$s; } function Get_PHPSESSID_NAME() { $s = ini_get("session.name"); return $s; } function roundEx($value, $prec=0) { $eps = 1.00/pow(10, $prec+4); return round(doubleval($value)+$eps, $prec); } function roundDB($value, $len=18, $dec=4) { if($value>=0) $value = "0".$value; $value = roundEx(DoubleVal($value), $len); $value = sprintf("%01.".$dec."f", $value); if($len>0 && strlen($value)>$len-$dec) $value = trim(substr($value, 0, $len-$dec), "."); return $value; } function bitrix_sessid() { if(!is_array($_SESSION) || !array_key_exists("fixed_session_id", $_SESSION)) $_SESSION["fixed_session_id"] = session_id(); return md5($_SESSION["fixed_session_id"]); } function check_bitrix_sessid($varname='sessid') { global $USER; if(defined("BITRIX_STATIC_PAGES") && (!is_object($USER) || !$USER->IsAuthorized())) return true; else return $_REQUEST[$varname] == bitrix_sessid(); } function bitrix_sessid_get($varname='sessid') { return $varname."=".bitrix_sessid(); } function bitrix_sessid_post($varname='sessid') { return '<input type="hidden" name="'.$varname.'" id="'.$varname.'" value="'.bitrix_sessid().'" />'; } function print_url($strUrl, $strText, $sParams="") { return (strlen($strUrl) <= 0? $strText : "<a href=\"".$strUrl."\" ".$sParams.">".$strText."</a>"); } function IncludeAJAX() { global $APPLICATION; $APPLICATION->AddHeadString('<script type="text/javascript">var ajaxMessages = {wait:"'.CUtil::JSEscape(GetMessage('AJAX_WAIT')).'"}</script>', true); $APPLICATION->AddHeadString('<script src="/bitrix/js/main/cphttprequest.js"></script>', true); } class CUtil { function addslashes($s) { return str_replace( array("\\", "\"", "'"), array("\\\\", "\\"."\"", "\\'"), $s ); } function JSEscape($s) { $val = str_replace( array("\\", "'", "\"", "\r\n", "\r", "\n"), array("\\\\", "\\'", "\\"."\"", "\n", "\n", "\\n'+\n'"), $s ); return preg_replace("'</script'i", "</s'+'cript", $val); } function JSUrlEscape($s) { return str_replace(array("%27", "%5C", "%0A", "%0D", "%"), array("\\'", "\\\\", "\\n", "\\r", "%25"), $s); } function PhpToJSObject($arData, $bWS = true) { if(is_array($arData)) { if($arData == array_values($arData)) { foreach($arData as $key => $value) { $arData[$key] = CUtil::PhpToJSObject($value); } return "[".implode(",", $arData)."]"; } $res = ($bWS ? "\n" : '')."{"; $first = true; foreach($arData as $key => $value) { if($first) $first = false; else $res .= ",".($bWS ? "\n" : ''); $res .= "'".preg_replace("/[\r\n]+/", "", CUtil::addslashes($key))."':".CUtil::PhpToJSObject($value); } $res .= ($bWS ? "\n" : '')."}"; return $res; } elseif(is_bool($arData)) { if($arData === true) return 'true'; else return 'false'; } else return "'".CUtil::JSEscape($arData)."'"; } function JsObjectToPhp($data) { $arResult = array(); if (function_exists('json_decode')) // php > 5.2.0 + php_json { global $APPLICATION; $data = $APPLICATION->ConvertCharset($data, LANG_CHARSET, 'utf-8'); // json_decode recognize only UTF strings $arResult = json_decode($data, true); if (is_array($arResult)) { $arResult = $APPLICATION->ConvertCharsetArray($arResult, 'utf-8', LANG_CHARSET); } } else { $data = preg_replace('/[\s]*([{}\[\]\"])[\s]*/', '\1', $data); $data = trim($data); if (substr($data, 0, 1) == '{') // object { $arResult = array(); $depth = 0; $end_pos = 0; $arCommaPos = array(); $bStringStarted = false; $prev_symbol = ""; for ($i = 1, $len = strlen($data); $i < $len; $i++) { $cur_symbol = substr($data, $i, 1); if ($cur_symbol == '"') $bStringStarted = !$bStringStarted; elseif ($cur_symbol == '{' || $cur_symbol == '[') $depth++; elseif ($cur_symbol == ']') $depth--; elseif ($cur_symbol == '}') { if ($depth == 0) { $end_pos = $i; break; } else { $depth--; } } elseif ($cur_symbol == ',' && $depth == 0 && !$bStringStarted) { $arCommaPos[] = $i; } $prev_symbol = $cur_symbol; } if ($end_pos == 0) return false; $token = substr($data, 1, $end_pos-1); $arTokens = array(); if (count($arCommaPos) > 0) { $prev_index = 0; foreach ($arCommaPos as $pos) { $arTokens[] = substr($token, $prev_index, $pos - $prev_index - 1); $prev_index = $pos; } $arTokens[] = substr($token, $prev_index); } else { $arTokens[] = $token; } foreach ($arTokens as $token) { $arTokenData = explode(":", $token, 2); if (substr($arTokenData[0], 0, 1) == '"') $arTokenData[0] = substr($arTokenData[0], 1, -1); $arResult[$arTokenData[0]] = CUtil::JsObjectToPhp($arTokenData[1]); } } elseif (substr($data, 0, 1) == '[') // array { $arResult = array(); $depth = 0; $end_pos = 0; $arCommaPos = array(); $bStringStarted = false; $prev_symbol = ""; for ($i = 1, $len = strlen($data); $i < $len; $i++) { $cur_symbol = substr($data, $i, 1); if ($cur_symbol == '"') $bStringStarted = !$bStringStarted; elseif ($cur_symbol == '{' || $cur_symbol == '[') $depth++; elseif ($cur_symbol == '}') $depth--; elseif ($cur_symbol == ']') { if ($depth == 0) { $end_pos = $i; break; } else { $depth--; } } elseif ($cur_symbol == ',' && $depth == 0 && !$bStringStarted) { $arCommaPos[] = $i; } $prev_symbol = $cur_symbol; } if ($end_pos == 0) return false; $token = substr($data, 1, $end_pos-1); if (count($arCommaPos) > 0) { $prev_index = 0; foreach ($arCommaPos as $pos) { $arResult[] = CUtil::JsObjectToPhp(substr($token, $prev_index, $pos - $prev_index - 1)); $prev_index = $pos; } $arResult[] = CUtil::JsObjectToPhp(substr($token, $prev_index)); } else { $arResult[] = CUtil::JsObjectToPhp($token); } } else // scalar { if (substr($data, 0, 1) == '"') $data = substr($data, 1, -1); $arResult = $data; } } return $arResult; } function JSPostUnescape() { CUtil::decodeURIComponent($_POST); CUtil::decodeURIComponent($_REQUEST); } function decodeURIComponent(&$item) { if(is_array($item)) { array_walk($item, array('CUtil', 'decodeURIComponent')); } else { if(LANG_CHARSET != "UTF-8") $item = $GLOBALS["APPLICATION"]->ConvertCharset($item, "UTF-8", LANG_CHARSET); } } function DetectUTF8($url, $bBinary=false) { //http://mail.nl.linux.org/linux-utf8/1999-09/msg00110.html if($bBinary || preg_match_all("/(%[0-9A-F]{2})/i", $url, $match)) { $arBytes = array(); if($bBinary) { if(defined("BX_UTF")) return false; for($i=0, $n=strlen($url); $i<$n; $i++) $arBytes[] = ord($url[$i]); } else { foreach($match[1] as $hex) $arBytes[] = hexdec(substr($hex, 1)); } $is_utf = 0; foreach($arBytes as $i => $byte) { if( ($byte & 0xC0) == 0x80 ) { if( ($i > 0) && (($arBytes[$i-1] & 0xC0) == 0xC0) ) $is_utf++; elseif( ($i > 0) && (($arBytes[$i-1] & 0x80) == 0x00) ) $is_utf--; } elseif( ($i > 0) && (($arBytes[$i-1] & 0xC0) == 0xC0) ) { $is_utf--; } } return $is_utf > 0; } else { return false; } } function InitJSCore($arExt = array(), $bReturn = false) { global $APPLICATION; static $arCurrentlyLoadedExt = array(); $str = ''; if (!is_array($arExt) && strlen($arExt) > 0) $arExt = array($arExt); if (defined('BX_PUBLIC_MODE') && BX_PUBLIC_MODE == 1 && !$bReturn) { $bOldReturn = false; $bReturn = true; } if ($bReturn) { if (!$arCurrentlyLoadedExt['core']) $str .= '<script type="text/javascript" src="/bitrix/js/main/core/core.js"></script>'."\r\n"; } else { $APPLICATION->AddHeadString('<script type="text/javascript" src="/bitrix/js/main/core/core.js"></script>', true); } $mess_lang = __IncludeLang($_SERVER['DOCUMENT_ROOT'].BX_ROOT.'/modules/main/lang/'.LANGUAGE_ID.'/js_core.php', true); $mess = array( 'LANGUAGE_ID' => LANGUAGE_ID, 'FORMAT_DATE' => FORMAT_DATE, 'FORMAT_DATETIME' => FORMAT_DATETIME, 'COOKIE_PREFIX' => COption::GetOptionString("main", "cookie_name", "BITRIX_SM"), 'bitrix_sessid' => bitrix_sessid(), ); if ($bReturn) { if (!$arCurrentlyLoadedExt['core']) { $str .= '<script type="text/javascript">BX.message('.CUtil::PhpToJSObject(array_merge($mess, $mess_lang), false).')</script>'."\r\n"; $str .= '<link href="/bitrix/js/main/core/css/core.css" type="text/css" rel="stylesheet" />'."\r\n"; } } else { $APPLICATION->AddHeadString('<script type="text/javascript">BX.message('.CUtil::PhpToJSObject(array_merge($mess, $mess_lang), false).')</script>', true); $APPLICATION->SetAdditionalCSS('/bitrix/js/main/core/css/core.css'); } $arCurrentlyLoadedExt['core'] = true; for ($i = 0, $len = count($arExt); $i < $len; $i++) { $mess_lang_ext = array(); $ext = preg_replace('/[^a-z0-9_]/i', '', $arExt[$i]); $fname = $_SERVER['DOCUMENT_ROOT'].BX_ROOT.'/modules/main/lang/'.LANGUAGE_ID.'/js_core_'.$ext.'.php'; if (file_exists($fname)) { $mess_lang_ext = __IncludeLang($fname, true); } if ($bReturn) { if (!$arCurrentlyLoadedExt[$arExt[$i]]) { if (is_array($mess_lang_ext) && count($mess_lang_ext) > 0) $str .= '<script type="text/javascript">BX.message('.CUtil::PhpToJSObject($mess_lang_ext, false).')</script>'."\r\n"; $str .= '<script type="text/javascript" src="/bitrix/js/main/core/core_'.$arExt[$i].'.js"></script>'."\r\n"; if (file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/js/main/core/css/core_'.$arExt[$i].'.css')) $str .= '<link href="/bitrix/js/main/core/css/core_'.$arExt[$i].'.css" type="text/css" rel="stylesheet" />'."\r\n"; } } else { if (is_array($mess_lang_ext) && count($mess_lang_ext) > 0) $APPLICATION->AddHeadString('<script type="text/javascript">BX.message('.CUtil::PhpToJSObject($mess_lang_ext, false).')</script>', true); $APPLICATION->AddHeadString('<script type="text/javascript" src="/bitrix/js/main/core/core_'.$arExt[$i].'.js"></script>', true); if (file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/js/main/core/css/core_'.$arExt[$i].'.css')) $APPLICATION->SetAdditionalCSS('/bitrix/js/main/core/css/core_'.$arExt[$i].'.css'); } $arCurrentlyLoadedExt[$arExt[$i]] = true; } if (defined('BX_PUBLIC_MODE') && BX_PUBLIC_MODE == 1 && !$bOldReturn) echo $str; return $bReturn ? $str : true; } function GetPopupSize($resize_id, $arDefaults = array()) { if ($resize_id) { return CUserOptions::GetOption( 'BX.WindowManager', 'size_'.$resize_id, array('width' => $arDefaults['width'], 'height' => $arDefaults['height']) ); } else return false; } } class CHTTP { var $url = ''; var $status = 0; var $result = ''; var $headers = array(); var $cookies = array(); var $http_timeout = 120; var $user_agent; var $follow_redirect = false; var $errno; var $errstr; function CHTTP() { $this->user_agent = 'BitrixSM ' . __CLASS__ . ' class'; } function Get($url) { if ($this->HTTPQuery('GET', $url)) { return $this->result; } return false; } function Post($url, $arPostData) { $postdata = ''; if (is_array($arPostData)) { foreach ($arPostData as $k => $v) { if (strlen($postdata) > 0) { $postdata .= '&'; } $postdata .= urlencode($k) . '=' . urlencode($v); } } if($this->HTTPQuery('POST', $url, $postdata)) { return $this->result; } return false; } function HTTPQuery($method, $url, $postdata = '') { $arUrl = false; do { $this->url = $url; $arUrl = $this->ParseURL($url, $arUrl); if (!$this->Query($method, $arUrl['host'], $arUrl['port'], $arUrl['path_query'], $postdata, $arUrl['proto'])) { return false; } } while ($this->follow_redirect && array_key_exists('Location', $this->headers) && strlen($url = $this->headers['Location']) > 0); return true; } function Query($method, $host, $port, $path, $postdata = false, $proto = '', $post_content_type = 'N') { $this->status = 0; $this->result = ''; $this->headers = array(); $this->cookies = array(); $fp = fsockopen($proto.$host, $port, $this->errno, $this->errstr, $this->http_timeout); if ($fp) { $strRequest = "$method $path HTTP/1.0\r\n"; $strRequest .= "User-Agent: {$this->user_agent}\r\n"; $strRequest .= "Accept: */*\r\n"; $strRequest .= "Host: $host\r\n"; $strRequest .= "Accept-Language: en\r\n"; if ($method == 'POST') { if ('N' !== $post_content_type) $strRequest .= $post_content_type == '' ? '' : "Content-type: ".$post_content_type."\r\n"; else $strRequest.= "Content-type: application/x-www-form-urlencoded\r\n"; $strRequest.= "Content-length: " . (function_exists('mb_strlen')? mb_strlen($postdata, 'latin1'): strlen($postdata)) . "\r\n"; } $strRequest .= "\r\n"; if ($method == 'POST') { $strRequest.= $postdata; $strRequest.= "\r\n"; } fputs($fp, $strRequest); $result = ''; while ($line = @fread($fp, 4096)) { $result .= $line; } list($headers, $body) = explode("\r\n\r\n", $result, 2); $this->result = $body; $this->ParseHeaders($headers); fclose($fp); return true; } $GLOBALS['APPLICATION']->ThrowException( GetMessage('HTTP_CLIENT_ERROR_CONNECT', array( '%ERRSTR%' => $this->errstr, '%ERRNO%' => $this->errno, '%HOST%' => $host, '%PORT%' => $port, ) ) ); return false; } function ParseURL($url, $arUrlOld = false) { $arUrl = parse_url($url); if (is_array($arUrlOld)) { if (!array_key_exists('scheme', $arUrl)) { $arUrl['scheme'] = $arUrlOld['scheme']; } if (!array_key_exists('host', $arUrl)) { $arUrl['host'] = $arUrlOld['host']; } if (!array_key_exists('port', $arUrl)) { $arUrl['port'] = $arUrlOld['port']; } } $arUrl['proto'] = ''; if (array_key_exists('scheme', $arUrl)) { $arUrl['scheme'] = strtolower($arUrl['scheme']); } else { $arUrl['scheme'] = 'http'; } if (!array_key_exists('port', $arUrl)) { if ($arUrl['scheme'] == 'https') { $arUrl['port'] = 443; } else { $arUrl['port'] = 80; } } if ($arUrl['scheme'] == 'https') { $arUrl['proto'] = 'ssl://'; } $arUrl['path_query'] = array_key_exists('path', $arUrl) ? $arUrl['path'] : '/'; if (array_key_exists('query', $arUrl) && strlen($arUrl['query']) > 0) { $arUrl['path_query'] .= '?' . $arUrl['query']; } return $arUrl; } function ParseHeaders($strHeaders) { $arHeaders = explode("\n", $strHeaders); foreach ($arHeaders as $k => $header) { if ($k == 0) { if (preg_match(',HTTP\S+ (\d+),', $header, $arFind)) { $this->status = intval($arFind[1]); } } else { $arHeader = explode(':', $header, 2); if ($arHeader[0] == 'Set-Cookie') { if (($pos = strpos($arHeader[1], ';')) !== false && $pos > 0) { $cookie = trim(substr($arHeader[1], 0, $pos)); } else { $cookie = trim($arHeader[1]); } $arCookie = explode('=', $cookie, 2); $this->cookies[$arCookie[0]] = rawurldecode($arCookie[1]); } else { $this->headers[$arHeader[0]] = trim($arHeader[1]); } } } } function setFollowRedirect($follow) { $this->follow_redirect = $follow; } /*public static*/ function sGet($url, $follow_redirect = false) //static get { $ob = new CHTTP(); $ob->setFollowRedirect($follow_redirect); return $ob->Get($url); } /*public static*/ function sPost($url, $arPostData, $follow_redirect = false) //static post { $ob = new CHTTP(); $ob->setFollowRedirect($follow_redirect); return $ob->Post($url, $arPostData); } /*public static*/ function SetStatus($status) { $bCgi = (stristr(php_sapi_name(), "cgi") !== false); $bFastCgi = ($bCgi && (array_key_exists('FCGI_ROLE', $_SERVER) || array_key_exists('FCGI_ROLE', $_ENV))); if($bCgi && !$bFastCgi) header("Status: ".$status); else header($_SERVER["SERVER_PROTOCOL"]." ".$status); } function urlAddParams($url, $add_params, $options = array()) { if(count($add_params)) { $params = array(); foreach($add_params as $name => $value) { if($options["skip_empty"] && !strlen($value)) continue; if($options["encode"]) $params[] = urlencode($name).'='.urlencode($value); else $params[] = $name.'='.$value; } if(count($params)) { $p1 = strpos($url, "?"); if($p1 === false) $ch = "?"; else $ch = "&"; $p2 = strpos($url, "#", $p1); if($p2===false) { $url = $url.$ch.implode("&", $params); } else { $url = substr($url, 0, $p2).$ch.implode("&", $params).substr($url, $p2); } } } return $url; } } function GetMenuTypes($site=false, $default_value=false) { if($default_value === false) $default_value = "left=".GetMessage("main_tools_menu_left").",top=".GetMessage("main_tools_menu_top"); $mt = COption::GetOptionString("fileman", "menutypes", $default_value, $site); if (!$mt) return Array(); $armt_ = unserialize(stripslashes($mt)); $armt = Array(); if (is_array($armt_)) { foreach($armt_ as $key => $title) { $key = trim($key); if (strlen($key) == 0) continue; $armt[$key] = trim($title); } return $armt; } $armt_ = explode(",", $mt); for ($i = 0, $c = count($armt_); $i < $c; $i++) { $pos = strpos($armt_[$i], '='); if ($pos === false) continue; $key = trim(substr($armt_[$i], 0, $pos)); if (strlen($key) == 0) continue; $armt[$key] = trim(substr($armt_[$i], $pos + 1)); } return $armt; } function SetMenuTypes($armt, $site = '', $description = false) { COption::SetOptionString('fileman', "menutypes", addslashes(serialize($armt)), $description, $site); } function ParseFileContent($filesrc) { ///////////////////////////////////// // Parse prolog, epilog, title ///////////////////////////////////// $filesrc = trim($filesrc); $php_doubleq = false; $php_singleq = false; $php_comment = false; $php_star_comment = false; $php_line_comment = false; $php_st = "<"."?"; $php_ed = "?".">"; if(substr($filesrc, 0, 2)==$php_st) { $fl = strlen($filesrc); $p = 2; while($p < $fl) { $ch2 = substr($filesrc, $p, 2); $ch1 = substr($ch2, 0, 1); if($ch2==$php_ed && !$php_doubleq && !$php_singleq && !$php_star_comment) { $p+=2; break; } elseif(!$php_comment && $ch2=="//" && !$php_doubleq && !$php_singleq) { $php_comment = $php_line_comment = true; $p++; } elseif($php_line_comment && ($ch1=="\n" || $ch1=="\r" || $ch2=="?>")) { $php_comment = $php_line_comment = false; } elseif(!$php_comment && $ch2=="/*" && !$php_doubleq && !$php_singleq) { $php_comment = $php_star_comment = true; $p++; } elseif($php_star_comment && $ch2=="*/") { $php_comment = $php_star_comment = false; $p++; } elseif(!$php_comment) { if(($php_doubleq || $php_singleq) && $ch2=="\\\\") { $p++; } elseif(!$php_doubleq && $ch1=='"') { $php_doubleq=true; } elseif($php_doubleq && $ch1=='"' && substr($filesrc, $p-1, 1)!='\\') { $php_doubleq=false; } elseif(!$php_doubleq) { if(!$php_singleq && $ch1=="'") { $php_singleq=true; } elseif($php_singleq && $ch1=="'" && substr($filesrc, $p-1, 1)!='\\') { $php_singleq=false; } } } $p++; } $prolog = substr($filesrc, 0, $p); $filesrc = substr($filesrc, $p); } elseif(preg_match("'(.*?<title>.*?</title>)(.*)$'is", $filesrc, $reg)) { $prolog = $reg[1]; $filesrc= $reg[2]; } $title = false; if(strlen($prolog)>0 && preg_match("'\\\$APPLICATION->SetTitle\(\"(.*?)(?<!\\\\)\"\);'i", $prolog, $regs)) $title = UnEscapePHPString($regs[1]); elseif(preg_match("'<title[^>]*>([^>]+)</title[^>]*>'i", $prolog, $regs)) $title = $regs[1]; elseif(preg_match("'<title[^>]*>([^>]+)</title[^>]*>'i", $filesrc, $regs)) $title = $regs[1]; $arPageProps = array(); if (strlen($prolog)>0) { preg_match_all("'\\\$APPLICATION->SetPageProperty\(\"(.*?)(?<!\\\\)\" *, *\"(.*?)(?<!\\\\)\"\);'i", $prolog, $out); if (count($out[0])>0) { for ($i1 = 0; $i1 < count($out[0]); $i1++) { $arPageProps[UnEscapePHPString($out[1][$i1])] = UnEscapePHPString($out[2][$i1]); } } } if(substr($filesrc, -2)=="?".">") { $p = strlen($filesrc) - 2; $php_start = "<"."?"; while(($p > 0) && (substr($filesrc, $p, 2) != $php_start)) $p--; $epilog = substr($filesrc, $p); $filesrc = substr($filesrc, 0, $p); } return Array( "PROLOG"=>$prolog, "TITLE"=>$title, "PROPERTIES"=>$arPageProps, "CONTENT"=>$filesrc, "EPILOG"=>$epilog ); } function EscapePHPString($str) { $str = str_replace("\\", "\\\\", $str); $str = str_replace("\$", "\\\$", $str); $str = str_replace("\"", "\\"."\"", $str); return $str; } function UnEscapePHPString($str) { $str = str_replace("\\\\", "\\", $str); $str = str_replace("\\\$", "\$", $str); $str = str_replace("\\\"", "\"", $str); return $str; } function CheckSerializedData($str, $max_depth = 20) { if (preg_match('/O\\:\\d/', $str)) return false; // serialized objects preg_match_all("/\\{[^}]*?\\{/", $str, $matches); // check data depth if (is_array($matches) && count($matches[0])*2 > $max_depth) return false; return true; } function bxmail($to, $subject, $message, $additional_headers="", $additional_parameters="") { if(function_exists("custom_mail")) return custom_mail($to, $subject, $message, $additional_headers, $additional_parameters); if($additional_parameters!="") return @mail($to, $subject, $message, $additional_headers, $additional_parameters); return @mail($to, $subject, $message, $additional_headers); } function bx_accelerator_reset() { if(function_exists("accelerator_reset")) accelerator_reset(); elseif(function_exists("wincache_refresh_if_changed")) wincache_refresh_if_changed(); } class UpdateTools { function CheckUpdates() { if(LICENSE_KEY == "DEMO") return; $days_check = intval(COption::GetOptionString('main', 'update_autocheck')); if($days_check > 0) { CUserOptions::SetOption('update', 'options', array('tooltip'=>'on')); $update_res = unserialize(COption::GetOptionString('main', '~update_autocheck_result')); if(!is_array($update_res)) $update_res = array("check_date"=>0, "result"=>false); if(time() > $update_res["check_date"]+$days_check*86400) { if($GLOBALS["USER"]->CanDoOperation('install_updates')) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/update_client.php"); $result = CUpdateClient::IsUpdateAvailable($arModules, $strError); $modules = array(); foreach($arModules as $module) $modules[] = $module["@"]["ID"]; if($strError <> '' && COption::GetOptionString('main', 'update_stop_autocheck', 'N') == 'Y') COption::SetOptionString('main', 'update_autocheck', ''); COption::SetOptionString('main', '~update_autocheck_result', serialize(array( "check_date"=>time(), "result"=>$result, "error"=>$strError, "modules"=>$modules, ))); } } } } function SetUpdateResult() { COption::SetOptionString('main', '~update_autocheck_result', serialize(array( "check_date"=>time(), "result"=>false, "error"=>"", "modules"=>array(), ))); } function SetUpdateError($strError) { $update_res = unserialize(COption::GetOptionString('main', '~update_autocheck_result')); if(!is_array($update_res)) $update_res = array("check_date"=>0, "result"=>false); if($strError <> '') $update_res["result"] = false; $update_res["error"] = $strError; COption::SetOptionString('main', '~update_autocheck_result', serialize($update_res)); } function GetUpdateResult() { $update_res = false; if(intval(COption::GetOptionString('main', 'update_autocheck')) > 0) $update_res = unserialize(COption::GetOptionString('main', '~update_autocheck_result')); if(!is_array($update_res)) $update_res = array("result"=>false, "error"=>"", "modules"=>array()); $update_res['tooltip'] = ''; if($update_res["result"] == true || $update_res["error"] <> '') { $updOptions = CUserOptions::GetOption('update', 'options', array()); if($updOptions['tooltip'] <> 'off') { if($update_res["result"] == true) $update_res['tooltip'] = GetMessage("top_panel_updates").(($n = count($update_res["modules"])) > 0? GetMessage("top_panel_updates_modules", array("#MODULE_COUNT#"=>$n)) : ''); elseif($update_res["error"] <> '') $update_res['tooltip'] = GetMessage("top_panel_updates_err").' '.$update_res["error"]; if($update_res['tooltip'] <> '') $update_res['tooltip'] .= '<br><a href="/bitrix/admin/settings.php?lang='.LANGUAGE_ID.'&mid=main&tabControl_active_tab=edit5">'.GetMessage("top_panel_updates_settings").'</a>'; } } return $update_res; } } ?>