/**
  * Add information in config array by handle path
  *
  * @param  string $sKey Ключ
  * @param  mixed $value Значение
  * @param  string $sInstance Название инстанции конфига
  * @return bool
  */
 public static function Set($sKey, $value, $sInstance = self::DEFAULT_CONFIG_INSTANCE)
 {
     $aKeys = explode('.', $sKey);
     if (isset($value['$root$']) && is_array($value['$root$'])) {
         $aRoot = $value['$root$'];
         unset($value['$root$']);
         foreach ($aRoot as $sRk => $mRv) {
             self::Set($sRk, self::isExist($sRk) ? func_array_merge_assoc(Config::Get($sRk, $sInstance), $mRv) : $mRv, $sInstance);
         }
     }
     $sEval = 'self::getInstance($sInstance)->aConfig';
     foreach ($aKeys as $sK) {
         $sEval .= '[' . var_export((string) $sK, true) . ']';
     }
     $sEval .= '=$value;';
     eval($sEval);
     return true;
 }
Example #2
0
 /**
  * Возврашает параметры для группы, если каких то параметров в группе нет, то используются дефолтные
  *
  * @param  string $sName	Имя группы
  * @return array
  */
 public function BuildParams($sName = null)
 {
     if (is_null($sName)) {
         return Config::Get('module.image.default');
     }
     $aDefault = (array) Config::Get('module.image.default');
     $aNamed = (array) Config::Get('module.image.' . strtolower($sName));
     return func_array_merge_assoc($aDefault, $aNamed);
 }
Example #3
0
/**
 * Сливает два ассоциативных массива
 *
 * @param unknown_type $aArr1
 * @param unknown_type $aArr2
 * @return unknown
 */
function func_array_merge_assoc($aArr1, $aArr2)
{
    $aRes = $aArr1;
    foreach ($aArr2 as $k2 => $v2) {
        $bIsKeyInt = false;
        if (is_array($v2)) {
            foreach ($v2 as $k => $v) {
                if (is_int($k)) {
                    $bIsKeyInt = true;
                    break;
                }
            }
        }
        if (is_array($v2) and !$bIsKeyInt and isset($aArr1[$k2])) {
            $aRes[$k2] = func_array_merge_assoc($aArr1[$k2], $v2);
        } else {
            $aRes[$k2] = $v2;
        }
    }
    return $aRes;
}
Example #4
0
 /**
  * Запрос URL через механизм socket
  *
  * @param $sUrl
  * @param string $aParams
  * @param string $sMethod
  * @param array $aOptions
  * @return string
  */
 public function socketSend($sUrl, $aParams = '', $sMethod = 'GET', $aOptions = array())
 {
     $sParams = self::BuildParamsStr($aParams);
     $aUrl = parse_url($sUrl);
     $sMethod = strtoupper($sMethod);
     if ($sMethod == 'POST') {
         $aSocketOptions = array('Content-type' => 'application/x-www-form-urlencoded', 'Content-length' => strlen($sParams));
     } else {
         $aSocketOptions = array();
     }
     $aSocketOptions = func_array_merge_assoc($aSocketOptions, $aOptions);
     $sRequest = "POST {$aUrl['path']} HTTP/1.1\r\n";
     $sRequest .= "Host: {$aUrl['host']}\r\n";
     foreach ($aSocketOptions as $sKey => $sVal) {
         if (is_integer($sKey)) {
             $sRequest .= $sVal . "\r\n";
         } else {
             $sRequest .= $sKey . ':' . $sVal . "\r\n";
         }
     }
     if ($sMethod == 'POST') {
         $sRequest .= "\r\n{$sParams}\r\n\r\n";
     }
     // открывает сокет
     $sh = @fsockopen($aUrl['host'], isset($aUrl['port']) ? $aUrl['port'] : 80, $errno, $errstr, self::$nTimeOut);
     if (!$sh) {
         return false;
     }
     // передаем данные
     fputs($sh, $sRequest);
     $sResponse = '';
     while (($sLine = fgets($sh, 4096)) !== false) {
         $sResponse .= $sLine;
     }
     // закрываем сокет
     fclose($sh);
     return $sResponse;
 }
Example #5
0
    $aPluginsList = array_map('trim', $aPluginsList);
    foreach ($aPluginsList as $sPlugin) {
        $aConfigFiles = glob($sPluginsDir . '/' . $sPlugin . '/config/*.php');
        if ($aConfigFiles and count($aConfigFiles) > 0) {
            $aConfig = array();
            foreach ($aConfigFiles as $sPath) {
                $aConfig = (include $sPath);
                if (!empty($aConfig) && is_array($aConfig)) {
                    // Если конфиг этого плагина пуст, то загружаем массив целиком
                    $sKey = "plugin.{$sPlugin}";
                    if (!Config::isExist($sKey)) {
                        Config::Set($sKey, $aConfig);
                    } else {
                        // Если уже существую привязанные к плагину ключи,
                        // то сливаем старые и новое значения ассоциативно
                        Config::Set($sKey, func_array_merge_assoc(Config::Get($sKey), $aConfig));
                    }
                }
            }
        }
        /**
         * Подключаем include-файлы
         */
        $aIncludeFiles = glob($sPluginsDir . '/' . $sPlugin . '/include/*.php');
        if ($aIncludeFiles and count($aIncludeFiles)) {
            foreach ($aIncludeFiles as $sPath) {
                require_once $sPath;
            }
        }
    }
}
 /**
  * Добавить к текстовкам массив сообщений
  *
  * @param array $aMessages Список текстовок для добавления
  * @param array|null $aParams Параметры, позволяют хранить текстовки в структурированном виде, например, тестовки плагина "test" получать как Get('plugin.name.test')
  */
 public function AddMessages($aMessages, $aParams = null)
 {
     if (is_array($aMessages)) {
         if (isset($aParams['name'])) {
             $sMsgs = $aMessages;
             if (isset($aParams['category'])) {
                 if (isset($this->aLangMsg[$aParams['category']][$aParams['name']])) {
                     $sMsgs = func_array_merge_assoc($this->aLangMsg[$aParams['category']][$aParams['name']], $sMsgs);
                 }
                 $this->aLangMsg[$aParams['category']][$aParams['name']] = $sMsgs;
             } else {
                 if (isset($this->aLangMsg[$aParams['name']])) {
                     $sMsgs = func_array_merge_assoc($this->aLangMsg[$aParams['name']], $sMsgs);
                 }
                 $this->aLangMsg[$aParams['name']] = $sMsgs;
             }
         } else {
             $this->aLangMsg = func_array_merge_assoc($this->aLangMsg, $aMessages);
         }
     }
 }
 protected function EventInfo()
 {
     $this->sMenuItemSelect = Router::GetActionEvent();
     if ($this->GetParam(0) == 'phpinfo') {
         $this->EventInfoPhpInfo(1);
     } elseif ($this->GetParam(0) == 'params') {
         $this->EventInfoParams();
     } else {
         $this->sMenuSubItemSelect = 'about';
         $this->PluginSetTemplate('info_about');
         //$this->SetTemplate(HelperPlugin::GetTemplateActionPath('info_about.tpl'));
     }
     $aSiteStat = $this->PluginAceadminpanel_Admin_GetSiteStat();
     $this->_AddBlock('right', 'admin_info');
     $aPlugins = $this->Plugin_GetList();
     foreach ($aPlugins as $sPlugin => $aPliginProps) {
         if (isset($aPliginProps['is_active']) and $aPliginProps['is_active']) {
             $sPluginClass = 'Plugin' . ucfirst($sPlugin);
             if (class_exists($sPluginClass) and method_exists($sPluginClass, 'GetUpdateInfo')) {
                 $oPlugin = new $sPluginClass();
                 $aPlugins[$sPlugin]['update_info'] = $oPlugin->GetUpdateInfo();
             }
         }
     }
     // Active plugins insert into top of list
     $aActivePlugins = $this->Plugin_GetActivePlugins();
     $aPluginList = array();
     foreach ($aActivePlugins as $sPlugin) {
         if (isset($aPlugins[$sPlugin])) {
             $aPluginList[$sPlugin] = $aPlugins[$sPlugin];
             unset($aPlugins[$sPlugin]);
         }
     }
     $aPluginList = func_array_merge_assoc($aPluginList, $aPlugins);
     $this->Viewer_Assign('aSiteStat', $aSiteStat);
     $this->Viewer_Assign('aPlugins', $aPluginList);
 }
 /**
  * Возврашает параметры для группы, если каких-то параметров в группе нет, то используются дефолтные
  *
  * @param  string $sName Имя группы
  * @return array
  */
 public function BuildParams($sName = null)
 {
     $aDefault = func_array_merge_assoc($this->aParamsDefault, (array) Config::Get('module.image.params.default'));
     if (is_null($sName)) {
         return $aDefault;
     }
     $aNamed = (array) Config::Get('module.image.params.' . strtolower($sName));
     return func_array_merge_assoc($aDefault, $aNamed);
 }
 /**
  * Возвращает json данные компонента с учетом наследования
  *
  * @param $aPaths
  * @return array|mixed
  */
 protected function GetComponentJson(&$aPaths)
 {
     /**
      * Получаем пути в обратном порядке, т.к. будем мержить данные
      */
     $aPaths = array_reverse($aPaths);
     $aPathsNew = array();
     $aJson = array();
     foreach ($aPaths as $sPath) {
         $sFileJson = $sPath . '/component.json';
         if (file_exists($sFileJson)) {
             if ($sContent = @file_get_contents($sFileJson) and $aData = @json_decode($sContent, true)) {
                 if (isset($aData['mode']) and $aData['mode'] == 'delegate') {
                     $aJson = $aData;
                     /**
                      * Удаляем прошлые каталоги
                      */
                     $aPathsNew = array();
                 } else {
                     $aJson = func_array_merge_assoc($aJson, $aData);
                 }
             }
         }
         $aPathsNew[] = $sPath;
     }
     /**
      * Подменяем пути
      */
     $aPaths = array_reverse($aPathsNew);
     return $aJson;
 }
Example #10
0
 /**
  * Подгрузка файла конфигурации для конкретного плагина
  *
  * @param   string  $sPlugin    - плагин
  * @param   string  $sConfigFile - файл конфигурации
  */
 static function LoadPluginConfig($sPlugin, $sConfigFile)
 {
     if (is_file($sConfigFile)) {
         $sKey = 'plugin.' . $sPlugin;
         $aPluginConfig = Config::Get($sKey);
         // переменная $config нужна для того, чтоб ее можно было не определять внутри файла
         $config = array();
         $aResult = (include $sConfigFile);
         if (!$aResult or !is_array($aResult)) {
             $aResult = $config;
         }
         if ($aResult) {
             $aPluginConfig = func_array_merge_assoc($aPluginConfig, $aResult);
             Config::Set($sKey, $aPluginConfig);
         }
     }
 }