PageRenderTime 43ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 1ms

/kernel/settings/view.php

https://bitbucket.org/crevillo/enetcall
PHP | 240 lines | 193 code | 27 blank | 20 comment | 26 complexity | bbffed9f50a5bf2bc7d5828061b8c4f1 MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, LGPL-2.1
  1. <?php
  2. /**
  3. * @copyright Copyright (C) 1999-2012 eZ Systems AS. All rights reserved.
  4. * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2
  5. * @version 2012.4
  6. * @package kernel
  7. */
  8. $tpl = eZTemplate::factory();
  9. $http = eZHTTPTool::instance();
  10. $ini = eZINI::instance();
  11. $siteAccessList = $ini->variable( 'SiteAccessSettings', 'RelatedSiteAccessList' );
  12. if ( $Params['INIFile'] )
  13. $settingFile = $Params['INIFile'];
  14. if ( $http->hasPostVariable( 'selectedINIFile' ) )
  15. $settingFile = $http->variable( "selectedINIFile" );
  16. if ( $Params['SiteAccess'] )
  17. $currentSiteAccess = $Params['SiteAccess'];
  18. if ( $http->hasPostVariable( 'CurrentSiteAccess' ) )
  19. $currentSiteAccess = $http->postVariable( 'CurrentSiteAccess' );
  20. if ( !isset( $currentSiteAccess ) or
  21. !in_array( $currentSiteAccess, $siteAccessList ) )
  22. $currentSiteAccess = $siteAccessList[0];
  23. unset( $ini );
  24. if ( $http->hasPostVariable( 'RemoveButton' ) )
  25. {
  26. if ( $http->hasPostVariable( 'RemoveSettingsArray' ) )
  27. {
  28. if ( isset( $settingFile ) )
  29. {
  30. $ini = eZSiteAccess::getIni( $currentSiteAccess, $settingFile );
  31. }
  32. $placements = $ini->groupPlacements();
  33. $deletedSettingArray = $http->postVariable( 'RemoveSettingsArray' );
  34. foreach ( $deletedSettingArray as $deletedSetting )
  35. {
  36. list( $block, $setting ) = explode( ':', $deletedSetting );
  37. if ( is_array( $placements[$block][$setting] ) )
  38. {
  39. foreach ( $placements[$block][$setting] as $settingElementKey => $key )
  40. {
  41. $placement = $ini->findSettingPlacement( $placements[$block][$setting][$settingElementKey] );
  42. break;
  43. }
  44. }
  45. else
  46. {
  47. $placement = $ini->findSettingPlacement( $placements[$block][$setting] );
  48. }
  49. // Get extension name if exists, $placement might be "extension:ezdhtml"
  50. $exploded = explode( ':', $placement );
  51. $extension = ( $exploded[0] === 'extension' || $exploded[0] === 'ext-siteaccess' )
  52. ? $exploded[1]
  53. : false;
  54. $path = 'settings/override';
  55. if ( $placement === 'siteaccess' )
  56. $path = "settings/siteaccess/$currentSiteAccess";
  57. elseif ( $exploded[0] === 'extension' && $extension !== false )
  58. $path = "extension/$extension/settings";
  59. elseif ( $exploded[0] === 'ext-siteaccess' && $extension !== false )
  60. $path = "extension/$extension/settings/siteaccess/$currentSiteAccess";
  61. // We should use "reference" if multiply removing of ini setting.
  62. // if eZINI::instance() is called twice instance will be fetched from GLOBAL variable.
  63. // Without reference there will be a inconsistency with GLOBAL instance and stored ini file.
  64. $iniTemp = eZINI::create( $settingFile . '.append.php', $path, null, null, null );
  65. $iniTemp->removeSetting( $block, $setting );
  66. $iniTemp->save();
  67. }
  68. }
  69. }
  70. if ( $http->hasPostVariable( 'ChangeINIFile' ) or
  71. ( $Params['SiteAccess'] and $Params['INIFile'] ) )
  72. {
  73. if ( $GLOBALS['eZCurrentAccess']['name'] !== $currentSiteAccess )
  74. {
  75. // create a site ini instance using $useLocalOverrides
  76. $siteIni = eZSiteAccess::getIni( $currentSiteAccess, 'site.ini' );
  77. // load settings file with $useLocalOverrides = true & $addArrayDefinition = true
  78. $ini = new eZINI( /*$fileName =*/ $settingFile,
  79. /*$rootDir =*/ 'settings',
  80. /*$useTextCodec =*/ null,
  81. /*$useCache =*/ false,
  82. /*$useLocalOverrides =*/ true,
  83. /*$directAccess =*/ false,
  84. /*$addArrayDefinition =*/ true,
  85. /*$load =*/ false );
  86. $ini->setOverrideDirs( $siteIni->overrideDirs( false ) );
  87. $ini->load();
  88. }
  89. else
  90. {
  91. // load settings file more or less normally but with $addArrayDefinition = true
  92. $ini = new eZINI( $settingFile,'settings', null, false, null, false, true );
  93. }
  94. $blocks = $ini->groups();
  95. $placements = $ini->groupPlacements();
  96. $settings = array();
  97. $blockCount = 0;
  98. $totalSettingCount = 0;
  99. foreach( $blocks as $block=>$key )
  100. {
  101. $settingsCount = 0;
  102. $blockRemoveable = false;
  103. $blockEditable = true;
  104. foreach( $key as $setting=>$settingKey )
  105. {
  106. $hasSetPlacement = false;
  107. $type = $ini->settingType( $settingKey );
  108. $removeable = false;
  109. switch ( $type )
  110. {
  111. case 'array':
  112. if ( count( $settingKey ) == 0 )
  113. $settings[$block]['content'][$setting]['content'] = array();
  114. foreach( $settingKey as $settingElementKey=>$settingElementValue )
  115. {
  116. $settingPlacement = $ini->findSettingPlacement( $placements[$block][$setting][$settingElementKey] );
  117. if ( $settingElementValue != null )
  118. {
  119. // Make a space after the ';' to make it possible for
  120. // the browser to break long lines
  121. $settings[$block]['content'][$setting]['content'][$settingElementKey]['content'] = str_replace( ';', "; ", $settingElementValue );
  122. }
  123. else
  124. {
  125. $settings[$block]['content'][$setting]['content'][$settingElementKey]['content'] = "";
  126. }
  127. $settings[$block]['content'][$setting]['content'][$settingElementKey]['placement'] = $settingPlacement;
  128. $hasSetPlacement = true;
  129. if ( $settingPlacement != 'default' )
  130. {
  131. $removeable = true;
  132. $blockRemoveable = true;
  133. }
  134. }
  135. break;
  136. case 'string':
  137. if( strpos( $settingKey, ';' ) )
  138. {
  139. // Make a space after the ';' to make it possible for
  140. // the browser to break long lines
  141. $settingArray = str_replace( ';', "; ", $settingKey );
  142. $settings[$block]['content'][$setting]['content'] = $settingArray;
  143. }
  144. else
  145. {
  146. $settings[$block]['content'][$setting]['content'] = $settingKey;
  147. }
  148. break;
  149. default:
  150. $settings[$block]['content'][$setting]['content'] = $settingKey;
  151. }
  152. $settings[$block]['content'][$setting]['type'] = $type;
  153. $settings[$block]['content'][$setting]['placement'] = "";
  154. if ( !$hasSetPlacement )
  155. {
  156. $placement = $ini->findSettingPlacement( $placements[$block][$setting] );
  157. $settings[$block]['content'][$setting]['placement'] = $placement;
  158. if ( $placement != 'default' )
  159. {
  160. $removeable = true;
  161. $blockRemoveable = true;
  162. }
  163. }
  164. $editable = $ini->isSettingReadOnly( $settingFile, $block, $setting );
  165. $removeable = $editable === false ? false : $removeable;
  166. $settings[$block]['content'][$setting]['editable'] = $editable;
  167. $settings[$block]['content'][$setting]['removeable'] = $removeable;
  168. ++$settingsCount;
  169. }
  170. $blockEditable = $ini->isSettingReadOnly( $settingFile, $block );
  171. $settings[$block]['count'] = $settingsCount;
  172. $settings[$block]['removeable'] = $blockRemoveable;
  173. $settings[$block]['editable'] = $blockEditable;
  174. $totalSettingCount += $settingsCount;
  175. ++$blockCount;
  176. }
  177. ksort( $settings );
  178. $tpl->setVariable( 'settings', $settings );
  179. $tpl->setVariable( 'block_count', $blockCount );
  180. $tpl->setVariable( 'setting_count', $totalSettingCount );
  181. $tpl->setVariable( 'ini_file', $settingFile );
  182. }
  183. else
  184. {
  185. $tpl->setVariable( 'settings', false );
  186. $tpl->setVariable( 'block_count', false );
  187. $tpl->setVariable( 'setting_count', false );
  188. $tpl->setVariable( 'ini_file', false );
  189. }
  190. $rootDir = 'settings';
  191. $iniFiles = eZDir::recursiveFindRelative( $rootDir, '', '.ini' );
  192. // find all .ini files in active extensions
  193. foreach ( eZINI::globalOverrideDirs() as $iniDataSet )
  194. {
  195. $iniPath = $iniDataSet[1] ? $iniDataSet[0] : 'settings/' . $iniDataSet[0];
  196. $iniFiles = array_merge( $iniFiles, eZDir::recursiveFindRelative( $iniPath, '', '.ini' ) );
  197. $iniFiles = array_merge( $iniFiles, eZDir::recursiveFindRelative( $iniPath, '', '.ini.append.php' ) );
  198. }
  199. // extract all .ini files without path
  200. $iniFiles = preg_replace('%.*/%', '', $iniFiles );
  201. // remove *.ini[.append.php] from file name
  202. $iniFiles = preg_replace('%\.ini.*%', '.ini', $iniFiles );
  203. sort( $iniFiles );
  204. $tpl->setVariable( 'ini_files', array_unique( $iniFiles ) );
  205. $tpl->setVariable( 'siteaccess_list', $siteAccessList );
  206. $tpl->setVariable( 'current_siteaccess', $currentSiteAccess );
  207. $Result = array();
  208. $Result['content'] = $tpl->fetch( 'design:settings/view.tpl' );
  209. $Result['path'] = array( array( 'text' => ezpI18n::tr( 'settings/view', 'Settings' ),
  210. 'url' => false ),
  211. array( 'text' => ezpI18n::tr( 'settings/view', 'View' ),
  212. 'url' => false ) );
  213. ?>