id_session = session_id(); // Получаем уникальный id сессии $this->errors=LoadErrors("/inc/errors.xml"); // Загружаем ошибки $this->smarty = new Smarty(); // Создаем класс шаблонизатора /* Устанавливаем уровень вывода ошибок */ if(DEBUG_MODE){ error_reporting (E_ALL); $smarty->debugging = true; }else{ $smarty->debugging = false; } set_error_handler('ErrorMessage'); //$this->GetConfigINI("config.ini"); // Читаем глобальные настройки проектов /* Разбираем URL в массив */ if(isset($url) && !empty($url)){ $this->url=$this->splitURL($url); } /* Определяем id выводимого проекта */ if($ProjectDefault>0){ // Если id передано в конструкторе, то id выводимого проекта установлено $this->projectid=$ProjectDefault; }else{ // Если в конструктор передан 0 if(isset($this->url['project'])){ // Если id передается в строке запроса $this->projectid=(int)$this->url['project']; }else{ $this->projectid=$this->GetProjectDefault($_SERVER['DOCUMENT_ROOT']."/inc/projects.xml"); } } /* Если id-проекта определено, продолжаем */ if($this->projectid && $this->projectid>0){ // Читаем свойства проекта $this->Projects=$this->LoadProjectProperty($_SERVER['DOCUMENT_ROOT']."/inc/projects.xml", $this->projectid, ADMIN_MODE); /* echo "
";
				print_r($this->Templates);
				echo "
"; */ /* Настраиваем папки для шаблонизатора */ $this->smarty->template_dir = $_SERVER['DOCUMENT_ROOT']."/".$this->Projects['SmartyTemplates']; // 'templates' – каталог, в котором хранятся шаблоны $this->smarty->compile_dir = $_SERVER['DOCUMENT_ROOT']."/".$this->Projects['SmartyCompile']; // 'templates_c' - туда Smarty сохраняет скомпилированные шаблоны /* Загружаем модули */ $this->ReadModuleList($_SERVER['DOCUMENT_ROOT']."/inc/modules"); // Читаем глобальные модули $this->ReadModuleList($_SERVER['DOCUMENT_ROOT']."/".$this->Projects['ModulesPath']); // Читаем локальные модули foreach($this->Modules as $key => $value){ $this->LoadModule($key); } /* Передаем некоторые значения в шаблонизатор */ $this->smarty->assign("projectid", $this->projectid); // Передаем id проекта $this->smarty->assign("Project", $this->Projects); // Передаем массив с описанием проекта /* Передаем настройки папок */ if(!ADMIN_MODE){ $this->smarty->assign("Media",$this->Projects['Media']); // $this->smarty->assign('Modules', $this->Modules); $this->smarty->assign("TemplateMedia", $this->Projects['TemplateMedia']); // $this->smarty->assign("TemplateCSS",$this->Projects['TemplateCSS']); // $this->smarty->assign("TemplateScript",$this->Projects['TemplateScript']); // }else{ $this->smarty->assign("Media",$this->Projects['Media']); // $this->smarty->assign('Modules', $this->Modules); $this->smarty->assign('TemplateMedia', "/".$this->Projects['AdminFolder']."/media"); $this->smarty->assign('TemplateCSS', "/".$this->Projects['AdminFolder']."/css"); $this->smarty->assign('TemplateScript', "/".$this->Projects['AdminFolder']."/script"); } }else{ die("Проект не найден"); } if(!$this->DBConnect()){ $this->DB=false; } return(TRUE); } /* Функция завершения CMS */ function __destruct() { unset($this->DB); // удаляем класс управления базой unset($this->smarty); // удаляем класс управления базой } /* Функция возвращает массив с информацией о текущем пользователе */ function getCurrentUser(){ switch($this->Authentication['Storage']){ case "cookie": if(isset($_COOKIE["userLogin"]) && isset($_COOKIE["userPassword"])){ $userLogin=$_COOKIE["userLogin"]; $userPassword=$this->decode($_COOKIE["userPassword"], $this->Salt); } break; case "session": default: if(isset($_SESSION[$this->id_session]["userLogin"]) && isset($_SESSION[$this->id_session]["userPassword"])){ $userLogin=$_COOKIE["userLogin"]; $userPassword=$this->decode($_SESSION[$this->id_session]["userPassword"], $this->Salt); } } if(isset($userLogin) && !empty($userLogin) && isset($userPassword) && !empty($userPassword)){ $User=$this->user_check($userLogin, $userPassword); }else{ $User["id"]=0; $User["userLogin"]=""; $User["userPassword"]=""; } return($User); } /* Функция установки соединения с базой данных */ function DBConnect() { switch(DBProvider){ case "MYSQL" : include_once("mysql.class.php"); // подключение класс управления CMS $this->DB=new GreenCMS_MySQL(DBHostName, DBBaseName, DBUser, DBPass, DBTablePrefix, DBCodePage); break; case "MSSQL" : include_once("mssql.class.php"); // подключение класс управления CMS $this->DB=new GreenCMS_MSSQL(DBHostName, DBBaseName, DBUser, DBPass, DBTablePrefix, DBCodePage); break; default: include_once("mysql.class.php"); // подключение класс управления CMS $this->DB=new GreenCMS_MySQL(DBHostName, DBBaseName, DBUser, DBPass, DBTablePrefix, DBCodePage); } $err=$this->DB->getError(); if(!empty($err)){ $this->SetError($err, Array("DBHostName"=>DBHostName, "DBBaseName"=>DBBaseName, "DBUser"=>DBUser, "DBTablePrefix"=>DBTablePrefix, "DBCodePage"=>DBCodePage)); return(false); } return(true); } /* Функция объявления и передачи переменных объявленных в проекте в шаблонизатор */ function ProjectDeclareVar(){ foreach($this->Projects["VARS"] as $key => $value){ $val=$this->setVar($key); $this->smarty->assign($key, $val); } } /* Функция вывода проекта */ function PrintProject(){ switch($this->Projects['Status']){ case 1: $this->GetContent(); break; case 2: $this->smarty->display($this->Templates['PROJECTRECONSTRUCTION']); break; case 3: die("Закрыт"); break; } } function GetContent(){ if($this->DB===false){ $this->SetError("DBConnectError"); $this->PrintError(); } /* Определяем текущего пользователя */ $this->User=$this->getCurrentUser(); $this->ProjectDeclareVar(); // Передаем объявленные в настройках проекта переменные /* Проверяем доступ пользователя к административным функциям модуля */ foreach($this->Modules as $key => $value){ if(ADMIN_MODE){ $admin_access=$this->UserAccessOnModuleAdmin($key); if($admin_access>0){ $this->Modules["".$key.""]['ALLOWED']=true; }else{ $this->Modules["".$key.""]['ALLOWED']=false; } } } $this->smarty->assign('Modules', $this->Modules); if(!empty($this->current_error['ErrorName'])){ // Если ошибки нет $this->PrintError(); } /* Передаем параметры проекта в шаблонизатор */ if(isset($_SESSION['url_back'])){ if($_SESSION['url_step']>1){ $_SESSION['url_back']=$_SERVER['QUERY_STRING']; $_SESSION['url_step']=1; }else{ $_SESSION['url_step']++; } }else{ $_SESSION['url_back']=$_SERVER['QUERY_STRING']; $_SESSION['url_step']=1; } $this->smarty->assign("url",$this->url); //Передаем в шаблон текущие параметры запроса $ModuleCurrent=$this->getExecuteModule(); $this->ModuleCurrent=$ModuleCurrent; $this->smarty->assign('ModuleCurrent', $ModuleCurrent); // Выполняем функцию автозагрузки модуля foreach($this->Modules as $key => $value){ // Выполняем функции отмеченные к исполнению при загрузке модуля if(ADMIN_MODE){ $adminFunAutoStartName=$key."_admin_autorun"; if(function_exists($adminFunAutoStartName)){ $adminFunAutoStartName(); } }else{ $funAutoStartName=$key."_autorun"; if(function_exists($funAutoStartName)){ $funAutoStartName(); } } // Выполняем функцию определенную в модуле функцией автозапуска if(isset($value['AutoStart']) && !empty($value['AutoStart'])){ $funcName=$value['AutoStart']; if(function_exists($funcName)){ $funcName(); } } } $this->ProjectDeclareVar(); // Проверяем определен ли модуль в системе if(isset($this->Modules[$ModuleCurrent])){ // если в модуль не передается действие, то выполняем действие по умолчанию if(!isset($this->url['action'])){ $this->url['action']=$this->GetActionDefault($ModuleCurrent); //echo $ModuleCurrent."&".$this->url['action']; } $u=$this->splitURL($this->Projects['ModuleURL']); if($u){ foreach($u as $key=>$value){ if(!isset($this->url[$key])){ $this->url[$key]=$value; } } } // Если в модуле определено вызываемое действие if(isset($this->Modules[$ModuleCurrent]['ACTIONS'][$this->url['action']])){ $phpcode=$this->Modules[$ModuleCurrent]['ACTIONS'][$this->url['action']]['PHP']; }else{ $this->SetError("ACTION_NOT_EXIST", array("ModuleName"=>$ModuleCurrent)); } // Проверяем права пользователя для выполнения данного действия $count=$this->UserAccessOnModule($ModuleCurrent, $this->url['action']); if($count>0){ eval($phpcode); if(isset($this->Modules[$ModuleCurrent]['ACTIONS'][$this->url['action']]['TEMPLATE'])){ $tpl=$this->Modules[$ModuleCurrent]['ACTIONS'][$this->url['action']]['TEMPLATE']; $pathfiletpl=$_SERVER['DOCUMENT_ROOT']."/".$this->Projects['SmartyTemplates']."/".$tpl; if($tpl=='notemplate'){ if(empty($this->current_error['ErrorName'])){ // Если ошибки нет $this->smarty->assign("MainBody", ""); }else{ $this->PrintError(); } }else{ if(file_exists($pathfiletpl)){ if(empty($this->current_error['ErrorName'])){ // Если ошибки нет $this->smarty->assign("MainBody", $this->smarty->fetch($tpl)); }else{ $this->PrintError(); } }else{ $this->SetError("TEMPLATE_FILE_NOT_FOUND", array("TemplateFile"=> $pathfiletpl)); $this->PrintError(); } } } }else{ // Действие запрещено для данного пользователя if(!ADMIN_MODE){ $this->SetError("USERS_ACCESS_DENIED"); $this->PrintError(); }else{ if(!empty($this->Templates['AUTHENTICATION'])){ $this->smarty->assign("MainBody", $this->smarty->fetch($this->Templates['AUTHENTICATION'])); }else{ $this->SetError("USERS_ACCESS_DENIED"); $this->PrintError(); } } } }else{ $this->ProjectDeclareVar(); $this->SetError("MODULE_NOT_REGISTRED", array("ModuleName"=>$ModuleCurrent)); $this->PrintError(); } if(isset($this->Modules[$ModuleCurrent])){ $ModuleTemplate=$this->Modules[$ModuleCurrent]['Template']; }else{ $ModuleTemplate=$this->Templates['PROJECT']; } if(!empty($ModuleTemplate)){ $this->smarty->display($ModuleTemplate); }else{ $this->SetError("MODULE_TEMPLATE_NOT_DEFINED", array("ModuleName"=>$ModuleCurrent)); $this->PrintError(); } } // Функция присвоения значения переменной function setVar($varName){ if(isset($this->Projects['VARS'][$varName])){ if(!ADMIN_MODE){ switch($this->Projects['VARS'][$varName]['TYPE']){ case "numeric" : $varValue=(int)$this->Projects['VARS'][$varName]['VALUE']; break; case "string" : $varValue=(string)$this->Projects['VARS'][$varName]['VALUE']; break; case "logical" : $varValue=(string)$this->Projects['VARS'][$varName]['VALUE']; $varValue=($varValue=="true" ? true : false); break; case "array" : $varValue=BuildArrayFromFormatStr($this->Projects['VARS'][$varName]['VALUE']); break; case "template" : $varValue=$this->smarty->fetch('eval:'.$this->Projects['VARS'][$varName]['VALUE']); // compiles every time break; case "widget" : $fun=$this->Projects['VARS'][$varName]['VALUE']; if(function_exists($fun)){ $varValue=$fun(); }else{ $varValue=$fun." не найдена"; } break; case "function" : $fun=$this->Projects['VARS'][$varName]['VALUE']; if(function_exists($fun)){ $varValue=$fun(); }else{ $varValue=$fun." не найдена"; } break; default : $varValue=(string)$this->Projects['VARS'][$varName]['VALUE']; break; } }else{ $varValue=(string)$this->Projects['VARS'][$varName]['VALUE']; } return($varValue); }else{ return(false); } } // Функция чтения значения переменной function getVar($varName){ if(isset($this->Projects['VARS'][$varName])){ return($this->setVar($varName)); }else{ return(false); } } // Функция определения прав пользователя на выполнение действия в модуле function UserAccessOnModule($moduleName, $action){ $count=0; // количество пересечений, если не 0 то пользователь входит в разрешенную группу if(isset($this->Modules[$moduleName]['ACTIONS'][$action]['ACCESS'])){ if(isset($this->Modules[$moduleName]['ACTIONS'][$action]['ACCESS']['GROUP'])){ $userGroup=$this->User['GROUP']; // Читаем группы в которые входит пользователь $moduleGroup=$this->Modules[$moduleName]['ACTIONS'][$action]['ACCESS']['GROUP']; // Массив групп которым разрешено данное действие // Сравниваем находится ли группы к которым принадлежит пользователь в списке групп которым разрешено выполнять данное действие for($j=0;$jUser['id']==0) $count++; // Если к модулю разрешен доступ Гостю for($i=0;$iModules[$moduleName]['ACTIONS'][$action]['ACCESS']['USER'])){ $moduleUsers=$this->Modules[$moduleName]['ACTIONS'][$action]['ACCESS']['USER']; // Массив с id пользователей которым разрешено данное действие for($i=0;$iUser['id']>0 && $strName=='authorized'){ $count++; // Если пользователь авторизован и к модулю разрешен доступ авторизованым пользователям } if(isset($this->Authentication['GlobalAdmin'])){ if($strName=='admin' && $this->User['id']==$this->Authentication['GlobalAdmin']){ $count++; } } } if(is_numeric($strName)){ if($strName==$this->User['id']){ $count++; // Если пользователь найдена увеличиваем счетчик } } } } } return($count); } // Функция определения прав пользователя на администрирование модуля function UserAccessOnModuleAdmin($moduleName){ $count=0; // количество пересечений, если не 0 то пользователь входит в разрешенную группу if(isset($this->Modules[$moduleName]['ACCESS'])){ if(isset($this->Modules[$moduleName]['ACCESS']['GROUP'])){ $userGroup=$this->users_get_groups($this->User['id']); // Читаем группы в которые входит пользователь $moduleGroup=$this->Modules[$moduleName]['ACCESS']['GROUP']; // Массив групп которым разрешено данное действие // Сравниваем находится ли группы к которым принадлежит пользователь в списке групп которым разрешено выполнять данное действие for($j=0;$jUser['id']==0) $count++; // Если к модулю разрешен доступ Гостю for($i=0;$iModules[$moduleName]['ACCESS']['USER'])){ $moduleUsers=$this->Modules[$moduleName]['ACCESS']['USER']; // Массив с id пользователей которым разрешено данное действие for($i=0;$iUser['id']>0 && $strName=='authorized'){ $count++; // Если пользователь авторизован и к модулю разрешен доступ авторизованым пользователям } if(isset($this->Authentication['GlobalAdmin'])){ if($strName=='admin' && $this->User['id']==(int)$this->Authentication['GlobalAdmin']){ $count++; } } } if(is_numeric($strName)){ if((int)$strName==$this->User['id']){ $count++; // Если пользователь найдена увеличиваем счетчик } } } } } return($count); } // Функция определения для модуля действия по умолчанию function GetActionDefault($ModuleName){ if(ADMIN_MODE){ return($this->Modules["".$ModuleName.""]['DefaultActionAdminMode']); }else{ return($this->Modules["".$ModuleName.""]['DefaultAction']); } } // Функция разбиения url в массив function splitURL($url){ $aurl=array(); if(!empty($url)){ $Line=explode("&",$url); for($i=0;$iglob_files($path, "xml"); if($fileList){ foreach ($fileList as $key => $value) { $moduleName=$value['name']; $phpName=$value['path'].$value['name'].".php"; $this->Modules["".$moduleName.""]['path_xml']=$value['path'].$value['fullname']; if(file_exists($phpName)){ $this->Modules["".$moduleName.""]['path_php']=$value['path'].$moduleName.".php"; }else{ $this->Modules["".$moduleName.""]['path_php']=$_SERVER['DOCUMENT_ROOT']."/inc/modules/".$moduleName.".php"; } } } } /* Функция загрузки модуля */ function LoadModule($modulesName){ $moduleFilePath=$this->Modules["".$modulesName.""]['path_xml']; $xml= simplexml_load_file($moduleFilePath); // Если файл является файлом модуля if($xml->getName()=="MODULE"){ // Читаем название модуля $moduleName=(string)$xml->attributes()->Name; if(empty($moduleName)) $moduleName=substr($moduleFileXML,0,-4); // Читаем описание модуля $this->Modules["".$moduleName.""]['Name']=iconv("UTF-8", "windows-1251", (string)$xml->attributes()->Name); $this->Modules["".$moduleName.""]['Version']=iconv("UTF-8", "windows-1251", (string)$xml->attributes()->Version); $this->Modules["".$moduleName.""]['File']=iconv("UTF-8", "windows-1251", (string)$xml->attributes()->File); $this->Modules["".$moduleName.""]['Template']=iconv("UTF-8", "windows-1251",(string)$xml->attributes()->Template); $this->Modules["".$moduleName.""]['AutoStart']=iconv("UTF-8", "windows-1251",(string)$xml->attributes()->AutoStart); $this->Modules["".$moduleName.""]['DefaultAction']=iconv("UTF-8", "windows-1251",(string)$xml->attributes()->DefaultAction); if(isset($xml->attributes()->AutoLoad)){ $this->Modules["".$moduleName.""]['AutoLoad']=iconv("UTF-8", "windows-1251",(string)$xml->attributes()->AutoLoad); // Если модуль требуется автоматически загружать при загрузке проекта, то загружаем функции модуля if($this->Modules["".$moduleName.""]['AutoLoad']=="yes"){ if(!empty($this->Modules["".$moduleName.""]['path_php'])){ include_once($this->Modules["".$moduleName.""]['path_php']); } } } if(!isset($this->Modules["".$moduleName.""]['AutoLoad']) || $this->Modules["".$moduleName.""]['AutoLoad']=="no"){ $this->Modules["".$moduleName.""]['AutoLoad']="no"; if(isset($this->url['modules'])){ $ModuleCurrent=(string)$this->url['modules']; }else{ // Иначе используем модуль по умолчанию $ModuleCurrent=(string)$this->ModuleDefault; } if($moduleName==$ModuleCurrent){ include_once($this->Modules["".$moduleName.""]['path_php']); } } $this->Modules["".$moduleName.""]['TITLE']=iconv("UTF-8", "windows-1251",(string)$xml->TITLE); $this->Modules["".$moduleName.""]['COMMENT']=iconv("UTF-8", "windows-1251",(string)$xml->COMMENT); // Определяем таблицы с которыми работает модуль if(isset($xml->DB)){ // Читаем определенные таблицы модуля if(isset($xml->DB->TABLE)){ $db=$xml->DB->TABLE; for($i=0;$iattributes()->Name; if(!defined($cName)){ define($cName, iconv("UTF-8", "windows-1251", $db[$i])); } } } // Определяем зарезервированные имена полей if(isset($xml->DB->POLE)){ $db_pole=$xml->DB->POLE; for($i=0;$iattributes()->Name; if(!defined($cName)){ define($cName, iconv("UTF-8", "windows-1251", $db_pole[$i])); } } } } // Читаем определенные в модуле константы if(isset($xml->CONSTANTS)){ $const=$xml->CONSTANTS->CONSTANT; for($i=0;$iattributes()->Name; $constType=$const[$i]->attributes()->Type; switch($constType){ case "numeric" : $constValue=(int)iconv("UTF-8", "windows-1251",trim((string)$const[$i])); break; case "string" : $constValue=iconv("UTF-8", "windows-1251",trim((string)$const[$i])); break; case "logical" : $consValue=(string)iconv("UTF-8", "windows-1251",trim((string)$const[$i])); $consValue=(($consValue==true) ? true : false); break; default: $constValue=iconv("UTF-8", "windows-1251",trim((string)$const[$i])); } if(!defined($constName)){ define($constName, $constValue); } } } // Читаем переменные определенные в модуле if(isset($xml->VARS)){ $vars=$xml->VARS->VAR; for($i=0;$iattributes()->Name); $this->Projects['VARS'][$varName]['TYPE']=(string)$vars[$i]->attributes()->Type; $this->Projects['VARS'][$varName]['VALUE']=(string)iconv("UTF-8", "windows-1251",trim((string)$vars[$i])); } } // Читаем определенные в модуле сообщения ошибок if(isset($xml->ERRORS)){ $template=(string)$xml->ERRORS->attributes()->Template; // Шаблон для вывода ошибки $err=$xml->ERRORS->ERROR; for($i=0;$iattributes()->id; $errTime=(int)$err[$i]->attributes()->Time; $this->errors["".$errid.""]['Template']=$template; $this->errors["".$errid.""]['Time']=$errTime; if(!ADMIN_MODE){ $this->errors["".$errid.""]['TEXT']=iconv("UTF-8", "windows-1251",trim((string)$err[$i]->TEXT)); }else{ if(isset($err[$i]->TEXTADMIN)){ $this->errors["".$errid.""]['TEXT']=iconv("UTF-8", "windows-1251",trim((string)$err[$i]->TEXTADMIN)); }else{ $this->errors["".$errid.""]['TEXT']=iconv("UTF-8", "windows-1251",trim((string)$err[$i]->TEXT)); } } if(isset($err[$i]->URL)){ $url=iconv("UTF-8", "windows-1251",trim((string)$err[$i]->URL)); if($url=="return"){ if(isset($_SESSION['url_back'])){ $this->errors["".$errid.""]['URL']="?".$_SESSION['url_back']; } }else{ $this->errors["".$errid.""]['URL']=$url; } } } } // Читаем определенные в модуле функции if(isset($xml->FUNCTIONS)){ $fun=$xml->FUNCTIONS->FUNCTION; for($i=0;$iattributes()->Name; $this->Modules["".$moduleName.""]['FUNCTIONS']["".$fName.""]['TITLE']=iconv("UTF-8", "windows-1251",(string)$fun[$i]->TITLE); $this->Modules["".$moduleName.""]['FUNCTIONS']["".$fName.""]['COMMENT']=iconv("UTF-8", "windows-1251",(string)$fun[$i]->COMMENT); // Читаем передаваемые в функцию аргументы if(isset($fun[$i]->ARGUMENTS)){ $arg=$fun[$i]->ARGUMENTS->ARGUMENT; for($j=0;$jattributes()->Name; $this->Modules["".$moduleName.""]['FUNCTIONS']["".$fName.""]['ARGUMENTS']["".$aName.""]['TITLE']=iconv("UTF-8", "windows-1251",(string)$arg[$j]->TITLE); $this->Modules["".$moduleName.""]['FUNCTIONS']["".$fName.""]['ARGUMENTS']["".$aName.""]['COMMENT']=iconv("UTF-8", "windows-1251",(string)$arg[$j]->COMMENT); } } } } if(!ADMIN_MODE){ // Читаем определенные в модуле действия if(isset($xml->ACTIONS)){ $act=$xml->ACTIONS->ACTION; for($i=0;$iattributes()->Name; // Название действия $this->Modules["".$moduleName.""]['ACTIONS']["".$aName.""]['PHP']=iconv("UTF-8", "windows-1251",(string)$act[$i]->PHP); $this->Modules["".$moduleName.""]['ACTIONS']["".$aName.""]['TEMPLATE']=(string)$act[$i]->TEMPLATE; //$this->Modules["".$moduleName.""]['ACTIONS']["".$aName.""]['DEFAULT']=(string)$act[$i]->DEFAULT; // Читаем права доступа к действию для групп if(isset($act[$i]->ACCESS->GROUP)){ $access=$act[$i]->ACCESS->GROUP; for($j=0;$jModules["".$moduleName.""]['ACTIONS']["".$aName.""]['ACCESS']['GROUP'][]=(string)$access[$j]->attributes()->id; } } // Читаем права доступа к действию для пользователей if(isset($act[$i]->ACCESS->USER)){ $access=$act[$i]->ACCESS->USER; for($j=0;$jModules["".$moduleName.""]['ACTIONS']["".$aName.""]['ACCESS']['USER'][]=(string)$access[$j]->attributes()->id; } } } } }else{ // Читаем действия при работе в режиме администратора if(isset($xml->ADMINISTRATIONS)){ // Определяем пользователей имеющих доступ к администрированию в данном модуле if(isset($xml->ADMINISTRATIONS->ACCESS->GROUP)){ $access=$xml->ADMINISTRATIONS->ACCESS->GROUP; for($j=0;$jModules["".$moduleName.""]['ACCESS']['GROUP'][]=(string)$access[$j]->attributes()->id; } } // Читаем права доступа к действию для пользователей if(isset($xml->ADMINISTRATIONS->ACCESS->USER)){ $access=$xml->ADMINISTRATIONS->ACCESS->USER; for($j=0;$jModules["".$moduleName.""]['ACCESS']['USER'][]=(string)$access[$j]->attributes()->id; } } $act=$xml->ADMINISTRATIONS->ACTION; $this->Modules["".$moduleName.""]['DefaultActionAdminMode']=iconv("UTF-8", "windows-1251",(string)$xml->ADMINISTRATIONS->attributes()->DefaultAction); $this->Modules["".$moduleName.""]['AutoStart']=iconv("UTF-8", "windows-1251",(string)$xml->ADMINISTRATIONS->attributes()->AutoStart); $this->Modules["".$moduleName.""]['Icon']=iconv("UTF-8", "windows-1251",(string)$xml->ADMINISTRATIONS->attributes()->Icon); for($i=0;$iattributes()->Name; // Название действия $this->Modules["".$moduleName.""]['ACTIONS']["".$aName.""]['PHP']=iconv("UTF-8", "windows-1251",(string)$act[$i]->PHP); $this->Modules["".$moduleName.""]['ACTIONS']["".$aName.""]['TEMPLATE']=(string)$act[$i]->TEMPLATE; //$this->Modules["".$moduleName.""]['ACTIONS']["".$aName.""]['DEFAULT']=(string)$act[$i]->DEFAULT; // Читаем права доступа к действию для групп if(isset($act[$i]->ACCESS->GROUP)){ $access=$act[$i]->ACCESS->GROUP; for($j=0;$jModules["".$moduleName.""]['ACTIONS']["".$aName.""]['ACCESS']['GROUP'][]=(string)$access[$j]->attributes()->id; } } // Читаем права доступа к действию для пользователей if(isset($act[$i]->ACCESS->USER)){ $access=$act[$i]->ACCESS->USER; for($j=0;$jModules["".$moduleName.""]['ACTIONS']["".$aName.""]['ACCESS']['USER'][]=(string)$access[$j]->attributes()->id; } } } } } }else{ //trigger_error(sprintf(FilesIsNotModule, $moduleFileXML)); } } /* Функция чтения id-проекта из файла настроек проектов */ function GetProjectDefault($xml_file){ $DefaultProject=false; if(file_exists($xml_file)){ $xml=simplexml_load_file($xml_file); if($xml->getName()=="PROJECTS"){ if(isset($xml->attributes()->Default)){ $DefaultProject=(int)$xml->attributes()->Default; } } } return($DefaultProject); } // Строим массив со списком проектов и их ID function LoadProjectList($xml_file){ if(file_exists($xml_file)){ $xml=simplexml_load_file($xml_file); $project=$xml->PROJECT; for($i=0;$iattributes()->id; $Projects["".$id.""]=iconv("UTF-8", "windows-1251",trim((string)$project[$i]->TITLE)); } return($Projects); } } /* Функция загрузки описания проектa */ function LoadProjectProperty($xml_file, $projectid, $ADMIN_MODE){ $projectFound=false; if(file_exists($xml_file)){ $xml=simplexml_load_file($xml_file); if($xml->getName()=="PROJECTS"){ $DefaultProject=$xml->attributes()->Default; if(isset($xml->PROJECT)){ // Читаем описатие проекта $project=$xml->PROJECT; for($prj=0;$prjattributes()->id; if($id==$projectid){ $projectFound=true; $PFolder="/projects/".(string)$project[$prj]->attributes()->Folder; $PTemplate=(string)$project[$prj]->attributes()->Template; $Projects['id']=$id; $Projects['Folder']=(string)$project[$prj]->attributes()->Folder; $Projects['Template']=$PTemplate; $Projects['Status']=(int)$project[$prj]->attributes()->Status; $Projects['DefaultTimeZone']=(string)$project[$prj]->attributes()->DefaultTimeZone; $Projects['AdminFolder']=(string)$project[$prj]->attributes()->AdminFolder; $Projects['TITLE']=iconv("UTF-8", "windows-1251",trim((string)$project[$prj]->TITLE)); $Projects['COMMENT']=iconv("UTF-8", "windows-1251",trim((string)$project[$prj]->COMMENT)); /* Читаем определенные в проекте шаблоны */ if(isset($project[$prj]->TEMPLATES)){ $tpl=$project[$prj]->TEMPLATES; foreach($tpl[0] as $key => $value){ $this->Templates["".$key.""]=(string)$value; } } // Читаем метод авторизации пользователей if(isset($project[$prj]->AUTHENTICATION)){ $auth=$project[$prj]->AUTHENTICATION; foreach($auth->attributes() as $key => $value){ $this->Authentication["".$key.""]=(string)$value; } // Если метод определен if(isset($auth->attributes()->Method)){ switch($auth->attributes()->Method){ case "DB" : // Авторизация с использованием базы данных break; case "MIXED" : // Смешанная авторизация case "GREEN" : // Авторизация с использованием базы данных default : { if(isset($auth->USER)){ $user=$auth->USER; for($i=0;$iattributes()->UserName); $UserPass=iconv("UTF-8", "windows-1251",trim((string)$user[$i])); $UserID=(int)$user->attributes()->id; $this->Users[$UserID]['id']=$UserID; $this->Users[$UserID]['user']=$UserName; $this->Users[$UserID]['pass']=$UserPass; } } } } } } // Читаем строку соединения с базой if(isset($project[$prj]->CONNECT)){ $conn=$project[$prj]->CONNECT; foreach($conn->attributes() as $key => $value){ if(!defined($key)){ define($key, $value); } } } // Читаем константы определенные в проекте if(isset($project[$prj]->CONSTANTS)){ $cons=$project[$prj]->CONSTANTS->CONSTANT; for($i=0;$iattributes()->Name; $consType=(string)$cons[$i]->attributes()->Type; switch($consType){ case "numeric" : $consValue=(int)iconv("UTF-8", "windows-1251",trim((string)$cons[$i])); break; case "string" : $consValue=(string)iconv("UTF-8", "windows-1251",trim((string)$cons[$i])); break; case "logical" : $consValue=(string)iconv("UTF-8", "windows-1251",trim((string)$cons[$i])); $consValue=(($consValue)=='true' ? true : false); break; default : $consValue=(string)(iconv("UTF-8", "windows-1251",trim((string)$cons[$i]))); break; } $Projects['CONSTANTS'][$consName]['TYPE']=$consType; $Projects['CONSTANTS'][$consName]['VALUE']=$consValue; if(!defined($consName)){ define($consName, $consValue); } } } // Соединене с базой $connect=$project[$prj]->CONNECT; $Projects['CONNECT']['DBProvider']=(string)$connect->attributes()->DBProvider; $Projects['CONNECT']['DBHostName']=(string)$connect->attributes()->DBHostName; $Projects['CONNECT']['DBBaseName']=(string)$connect->attributes()->DBBaseName; $Projects['CONNECT']['DBUser']=(string)$connect->attributes()->DBUser; $Projects['CONNECT']['DBPass']=(string)$connect->attributes()->DBPass; $Projects['CONNECT']['DBCodePage']=(string)$connect->attributes()->DBCodePage; $Projects['CONNECT']['DBTablePrefix']=(string)$connect->attributes()->DBTablePrefix; // Пути к папкам проекта $Projects['ModulesPath']=$PFolder."/modules"; $Projects['Media']=$PFolder."/media"; if(!$ADMIN_MODE){ // Путь к папкам шаблона $Projects['TemplateMedia']=$PFolder."/templates/".$PTemplate."/media"; $Projects['TemplateCSS']=$PFolder."/templates/".$PTemplate."/css"; $Projects['TemplateScript']=$PFolder."/templates/".$PTemplate."/script"; $Projects['SmartyTemplates']=$PFolder."/templates/".$PTemplate; $Projects['SmartyCompile']=$PFolder."/templates_c"; $def=$project[$prj]->DEFAULT; $Projects['ModuleDefault']=(string)$def->attributes()->Module; $Projects['ValueDefault']=(string)$def->attributes()->Value; $Projects['ModuleURL']=(string)iconv("UTF-8", "windows-1251",trim((string)$def)); }else{ $Projects['TemplateMedia']=$Projects['AdminFolder']."/media"; $Projects['TemplateCSS']=$Projects['AdminFolder']."/css"; $Projects['TemplateScript']=$Projects['AdminFolder']."/script"; $Projects['SmartyTemplates']=$Projects['AdminFolder']."/templates"; $Projects['SmartyCompile']=$Projects['AdminFolder']."/templates_c"; $def=$project[$prj]->DEFAULTADMIN; $Projects['ModuleDefault']=(string)$def->attributes()->Module; $Projects['ValueDefault']=(string)$def->attributes()->Value; $Projects['ModuleURL']=(string)iconv("UTF-8", "windows-1251",trim((string)$def)); } // Читаем переменные определенные в проекте if(isset($project[$prj]->VARS)){ $vars=$project[$prj]->VARS->VAR; for($i=0;$iattributes()->Name); $Projects['VARS'][$varName]['TYPE']=(string)$vars[$i]->attributes()->Type; $Projects['VARS'][$varName]['VALUE']=(string)iconv("UTF-8", "windows-1251",trim((string)$vars[$i])); } } } } if($projectFound==true){ return($Projects); }else{ trigger_error("XMLProjectNotFound", E_USER_ERROR); } }else{ // В xml не определено ни одного проекта } }else{ // Ошибка в хml файле trigger_error("XMLFileProjectBad", E_USER_ERROR); } }else{ // xml файл не найден trigger_error("XMLFileProjectNotFound", E_USER_ERROR); } } // Функция чтения конфигурационных файла CMS function GetConfigINI($strINIFileName){ $ini_array = parse_ini_file($strINIFileName,false); foreach($ini_array as $key => $value){ define($key,$value); } } function PrintCMS() { //echo "
";
			//print_r (get_defined_constants());
			//echo "
"; } function glob_files($source_folder, $ext){ if( !is_dir($source_folder ) ) { return(false); } $FILES = glob($source_folder."/*.".$ext); foreach($FILES as $key => $file) { $filename=substr( $file, ( strrpos( $file, "/" ) +1 )); $FILE_LIST[$key]['path'] = substr( $file, 0, ( strrpos( $file, "/" ) +1 ) ); $FILE_LIST[$key]['name'] = substr($filename,0,strrpos($filename, ".")); $FILE_LIST[$key]['ext'] = substr($filename,strrpos($filename, ".")+1); $FILE_LIST[$key]['fullname'] = $filename; $FILE_LIST[$key]['size'] = filesize( $file ); $FILE_LIST[$key]['date'] = date('Y-m-d G:i:s', filemtime( $file ) ); } if(!empty($FILE_LIST)){ return $FILE_LIST; } else { return false; } } /* Функция возвращает выполняемый модуль */ function getExecuteModule(){ // Если модуль вывода определен if(isset($this->url['modules'])){ $ModuleCurrent=(string)$this->url['modules']; }else{ // Иначе используем модуль по умолчанию if(!empty($this->ModuleDefault)){ $ModuleCurrent=(string)$this->ModuleDefault; }else{ $ModuleCurrent=$this->Projects['ModuleDefault']; } } return(trim($ModuleCurrent)); } /* Функция обработки ошибок */ function SetError(){ $smarty=$this->smarty; switch(func_num_args()){ case 1: $errorName=func_get_arg(0); $errArg=false; break; case 2: $errorName=func_get_arg(0); $errArg=func_get_arg(1); break; } if(!empty($this->current_error['ErrorName'])){ // Если ошибка уже произошла, то не присваиваем новую return; } if($errArg){ foreach ($errArg as $key => $value){ if(!is_object($value)){ $smarty->assign($key, $value); } } } if(isset($this->errors[$errorName])){ $template_string = $this->errors[$errorName]['TEXT']; $this->current_error['ErrorName']=$errorName; $this->current_error['ErrorText']=$smarty->fetch('eval:'.$template_string); }else{ $this->current_error['ErrorText']="Неизвестная ошибка"; } } function PrintError(){ $errName=$this->current_error['ErrorName']; $errText=$this->current_error['ErrorText']; $errTime=$this->errors[$errName]['Time']; $errURL=""; if(isset($this->errors[$errName]['URL'])){ if(!ADMIN_MODE){ $errURL=$this->errors[$errName]['URL']; }else{ $errURL="/".$this->Projects['AdminFolder']."/".$this->errors[$errName]['URL']; } }else{ $errURL=""; } $errTemplate=((!empty($this->errors[$errName]['Template'])) ? $this->errors[$errName]['Template'] : $this->Templates['ERROR']); $this->smarty->assign("ErrorText", $errText); $this->smarty->assign("ErrorTime", $errTime); if($errTime>0){ $this->smarty->assign("ErrorAction", ""); }else{ $this->smarty->assign("ErrorAction", $errURL); } $IndexTemplate=$this->Templates['PROJECT']; $tpl=$this->smarty->fetch($errTemplate); $this->smarty->assign("MainBody", $this->smarty->fetch($errTemplate)); $this->smarty->display($IndexTemplate); die(); } function getTextError(){ $errName=$this->current_error['ErrorName']; $errText=$this->current_error['ErrorText']; $errTime=$this->errors[$errName]['Time']; $errURL=""; if(isset($this->errors[$errName]['URL'])){ if(!ADMIN_MODE){ $errURL=$this->errors[$errName]['URL']; }else{ $errURL="/".$this->Projects['AdminFolder']."/".$this->errors[$errName]['URL']; } }else{ $errURL=""; } $errTemplate=((!empty($this->errors[$errName]['Template'])) ? $this->errors[$errName]['Template'] : $this->Templates['ERROR']); $this->smarty->assign("ErrorText", $errText); $this->smarty->assign("ErrorTime", $errTime); if($errTime>0){ $this->smarty->assign("ErrorAction", ""); }else{ $this->smarty->assign("ErrorAction", $errURL); } $tpl=$this->smarty->fetch($errTemplate); return($tpl); } // Функция возвращает массив с id групп к которым пренадлежит пользователь function users_get_groups($usersid){ if($this->Authentication['Method']!="GREEN"){ if(defined("DB_usergroup")){ $DB_usergroup=DB_usergroup; if(!empty($DB_usergroup)){ $DB_usergroup=DBTablePrefix.DB_usergroup; }else{ return(false); } }else{ $DB_usergroup=DBTablePrefix."usergroup"; } if($this->DB->list_tables($DB_usergroup)){ // Если таблица существует $sql="SELECT * FROM ".$DB_usergroup." WHERE usersid=".$usersid; $group=array(); $result=$this->DB->QueryDB($sql); if($result && $this->DB->num_rows($result)>0){ while($row=$this->DB->fetch_assoc($result)) { $group[]=$row['groupsid']; } return($group); } }else{ return(false); } }else{ return(false); } } /* Выполняем авторизацию пользователя */ function user_login($User){ if(isset($User['id']) && $User['id']>0){ $this->User=$User; if($this->Authentication['Storage']=="session"){ $this->set_session($User['userLogin'], $User['userPassword']); }else{ $this->set_cookie($User['userLogin'], $User['userPassword']); } }else{ /* Если авторизация с помощью пользовательского модуля авторизации не удалась, пытаемся выполнить авторизацию другими методами*/ switch($this->Authentication['Method']){ case "USER" : $User=$this->AuthenticationUSER($User['userLogin'], $User['userPassword']); break; case "GREEN" : $this->User=$this->AuthenticationGREEN($User['userLogin'], $User['userPassword']); break; case "GREENDB" : $this->User=$this->AuthenticationGREENDB($User['userLogin'], $User['userPassword']); break; case "MIXED" : $this->User=$this->AuthenticationGREEN($User['userLogin'], $User['userPassword']); if($this->User['id']==0){ $this->User=$this->AuthenticationGREENDB($User['userLogin'], $User['userPassword']); } break; } } } /* Функция проверки пользователя */ function user_check($userLogin, $userPassword){ switch($this->Authentication['Method']){ case "USER" : $User=$this->AuthenticationUSER($userLogin, $userPassword); break; case "GREEN" : $User=$this->AuthenticationGREEN(trim($userLogin), trim($userPassword)); break; case "GREENDB" : $User=$this->AuthenticationGREENDB($userLogin, $userPassword); break; case "MIXED" : $User=$this->AuthenticationUSER($userLogin, $userPassword); if($User['id']==0){ $User=$this->AuthenticationGREEN($userLogin, $userPassword); if($User['id']==0){ $User=$this->AuthenticationGREENDB($userLogin, $userPassword); } } break; } return($User); } /* Функцыя завершения сеанса пользователя */ function user_logoff(){ $id_session = $this->id_session; // Получаем уникальный id сессии unset($_SESSION[$id_session]); unset($this->User); if(isset($_COOKIE["userLogin"]) && isset($_COOKIE["userPassword"])){ setcookie("userLogin", "", 0, "/"); setcookie("userPassword", "", 0, "/"); } } /* */ function AuthenticationUSER($userLogin, $userPassword){ $User['id']=0; $User['userLogin']=$userLogin; $User["userPassword"]=$userPassword; if(function_exists("user_check")){ $User=user_check($userLogin, $userPassword); if($this->Authentication['Storage']=="session"){ $this->set_session($userLogin, $userPassword); }else{ $this->set_cookie($userLogin, $userPassword); } } return($User); } /* Функция проверки пользователя по методу GREEN когда список пользователей хранится в XML файле описании проекта */ function AuthenticationGREEN($userLogin, $userPassword){ $id_session = $this->id_session; // Получаем уникальный id сессии $User['id']=0; foreach($this->Users as $key => $value){ if($value['user']==$userLogin){ $decodePass=$this->decode($value['pass'], $userPassword); // Дешифруем пароль if($userPassword==$decodePass){ $User['id']=$key; if($this->Authentication['Storage']=="session"){ $this->set_session($userLogin, $userPassword); }else{ $this->set_cookie($userLogin, $userPassword); } break; } } } $User['userLogin']=$userLogin; $User["userPassword"]=$userPassword; return($User); } /* Функция проверки пользователя по методу DB когда список пользователей хранится в базе данных и для этого используется специализированный модуль авторизации. */ function AuthenticationGREENDB($userLogin, $userPassword){ $User['id']=0; $User['userLogin']=$userLogin; $User["userPassword"]=$userPassword; return($User); } /* Функция устанавливает куки */ function set_cookie($userLogin, $userPassword){ if(!defined("COOKIE_LIFE_TIME")){ define("COOKIE_LIFE_TIME",604800); } setcookie("userLogin", $userLogin, time() + COOKIE_LIFE_TIME, "/"); setcookie("userPassword", $this->encode($userPassword, $this->Salt), time() + COOKIE_LIFE_TIME, "/"); $this->set_session($userLogin, $userPassword); } /* Функция устанавливает сессии */ function set_session($userLogin, $userPassword){ $_SESSION[$this->id_session]["userLogin"]=$userLogin; $_SESSION[$this->id_session]["userPassword"]=$userPassword; } /* Функция перехода на URL */ function location($url){ //header("Request-URI: index.php"); //header("Content-Location: index.php"); if(!empty($url)){ header("Location: $url", true); }else{ header("Location: ".$_SERVER['HTTP_REFERER'], true); } } /* Функции обратимого шифрования */ function encode($String, $Password){ if (!$Password) return(false); $String = substr(pack("H*",sha1($String)),0,1).$String; $StrLen = strlen($String); $Seq = $Password; $Gamma = ''; while (strlen($Gamma)< $StrLen){ $Seq = pack("H*",sha1($Seq.$Gamma.$this->Salt)); $Gamma.=substr($Seq,0,8); } return base64_encode($String^$Gamma); } function decode($String, $Password){ $greenCMS=$GLOBALS['greenCMS']; if (!$Password) return(false); $StrLen = strlen($String); $Seq = $Password; $Gamma = ''; while (strlen($Gamma)<$StrLen){ $Seq = pack("H*",sha1($Seq.$Gamma.$this->Salt)); $Gamma.=substr($Seq,0,8); } $String = base64_decode($String); $String = $String^$Gamma; $DecodedString = substr($String, 1); $Error = ord(substr($String, 0, 1) ^ substr(pack("H*",sha1($DecodedString)),0,1)); //проверяем if ($Error){ return false; }else { return $DecodedString; } } } /* Функция загрузки ошибок */ function LoadErrors($files){ $listErr=array(); $listErr['InternalError']['Template']="error.tpl"; $listErr['InternalError']['TEXT']="Внутренняя ошибка"; $listErr['InternalError']['Time']=0; $xml_file=$_SERVER['DOCUMENT_ROOT'].$files; if(file_exists($xml_file)){ $xml=simplexml_load_file($xml_file); if($xml->getName()=="ERRORS"){ $template=(string)$xml->attributes()->Template; // Шаблон для вывода ошибки // Читаем ошибки if(isset($xml->ERROR)){ $err=$xml->ERROR; for($i=0;$iattributes()->id; $errTime=(int)$err[$i]->attributes()->Time; $listErr["".$errid.""]['Template']=$template; $listErr["".$errid.""]['Time']=$errTime; if(!ADMIN_MODE){ $listErr["".$errid.""]['TEXT']=iconv("UTF-8", "windows-1251",trim((string)$err[$i]->TEXT)); }else{ if(isset($err[$i]->TEXTADMIN)){ $listErr["".$errid.""]['TEXT']=iconv("UTF-8", "windows-1251",trim((string)$err[$i]->TEXTADMIN)); }else{ $listErr["".$errid.""]['TEXT']=iconv("UTF-8", "windows-1251",trim((string)$err[$i]->TEXT)); } } if(isset($err[$i]->URL)){ $url=iconv("UTF-8", "windows-1251",trim((string)$err[$i]->URL)); if($url=="return"){ $listErr["".$errid.""]['URL']="?".$_SERVER['HTTP_REFERER']; }else{ $listErr["".$errid.""]['URL']=$url; } }else{ $listErr["".$errid.""]['URL']=""; } } } }else{ //$this->error("Не верный формат файла ошибок"); } }else{ //$this->error("Отсутствует файл описания ошибок"); } return($listErr); } // функция обработчика ошибок function ErrorMessage($errno, $errstr, $errfile, $errline, $vars) { $errors=LoadErrors("/inc/errors.xml"); // Загружаем ошибки $errstr=trim($errstr); switch ($errno) { case E_ERROR: // Глобальная ошибка break; case E_WARNING: // Предупреждение break; case E_NOTICE: break; case E_USER_NOTICE : case E_USER_ERROR : //echo "[$errno] $errstr $errfile $errline
\n"; if(isset($errors["".$errstr.""])){ $errText=$errors[$errstr]['TEXT']; die($errText); } break; default: $Err="Unkown error type: [$errno] $errstr
\n"; break; } //echo "[$errno] $errstr $errfile $errline
\n"; } /* Функция заполнения массива из форматированной строки Например "1~Новость; 2~Статья; 3~Статья-спутник" где: до ~ элемент массива которому будет присвоено значение после~ $cFormatStr - содержит форматированную строку возвращает массив со значениями */ function BuildArrayFromFormatStr(){ switch(func_num_args()){ case 1: $cFormatStr=func_get_arg(0); $cRowDelimeter=";"; $cArrDelimeter="~"; break; case 2: $cFormatStr=func_get_arg(0); $cRowDelimeter=func_get_arg(1); $cArrDelimeter="~"; break; case 2: $cFormatStr=func_get_arg(0); $cRowDelimeter=func_get_arg(1); $cArrDelimeter=func_get_arg(2); break; } $Line=explode($cRowDelimeter,$cFormatStr); // делим строки // заполняем массив значениями foreach ($Line as $Key => $Value) { if(!empty($Value)){ list($key, $value)=explode($cArrDelimeter, $Value); $Ret[trim($key)]=trim($value); } } return($Ret); } function tag_remove($text){ $search = array ("']*?>.*?'si", // Вырезает javaScript "'<[\/\!]*?[^<>]*?>'si", // Вырезает HTML-теги "'([\r\n])[\s]+'", // Вырезает пробельные символы "'&(quot|#34);'i", // Заменяет HTML-сущности "'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", "'&(nbsp|#160);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&#(\d+);'e"); // интерпретировать как php-код $replace = array ("", "", "\\1", "\"", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), "chr(\\1)"); return(preg_replace($search, $replace, $text)); } /* Построение ComboBox из массива $Arr - Массив с данными $idPole - Название поля в таблице, которое является уникальным идентификатором $idDefault - Значение по умалчанию выбранное в ComboBoxе $FormatView - Внешний вид записи в ComboBoxе $ComboObject - Описание объекта ComboBox */ function BuildComboBoxFromArrayValue($Arr, $strValue, $ComboObject){ $obj=$ComboObject; foreach ($Arr as $Key => $Value) { if($strValue==$Key){ $obj.=""; }else{ $obj.=""; } } $obj.=""; return($obj); } ?>