/app/modules/admin/AdminWebModule.php

https://github.com/Alex8452/Kurogo-Mobile-Web-Doc-Translation · PHP · 247 lines · 199 code · 38 blank · 10 comment · 21 complexity · 0e43d19749e010d291feabf4ca9191d2 MD5 · raw file

  1. <?php
  2. /**
  3. * @package Module
  4. * @subpackage Admin
  5. */
  6. /**
  7. * @package Module
  8. * @subpackage Admin
  9. */
  10. class AdminWebModule extends WebModule {
  11. protected $id = 'admin';
  12. private function getNavSections() {
  13. $navSections = array(
  14. array(
  15. 'id'=>'site',
  16. 'title'=>'Site Configuration',
  17. 'description'=>'',
  18. 'url'=>$this->buildURL('site',array()),
  19. ),
  20. array(
  21. 'id'=>'modules',
  22. 'title'=>'Module Configuration',
  23. 'description'=>'',
  24. 'url'=>$this->buildURL('modules',array()),
  25. ),
  26. array(
  27. 'id'=>'credits',
  28. 'title'=>'Credits and Licensing',
  29. 'description'=>'',
  30. 'url'=>$this->buildURL('credits',array()),
  31. ),
  32. );
  33. return $navSections;
  34. }
  35. private function getSiteAdminConfig() {
  36. static $configData;
  37. if (!$configData) {
  38. $file = APP_DIR . "/common/config/admin-site.json";
  39. if (!$configData = json_decode(file_get_contents($file), true)) {
  40. throw new Exception("Error parsing $file");
  41. }
  42. }
  43. return $configData;
  44. }
  45. private function getSubNavSections($section) {
  46. $subNavSections = array();
  47. switch ($section) {
  48. case 'site':
  49. $configData = $this->getSiteAdminConfig();
  50. foreach ($configData as $id=>$data) {
  51. $subNavSections[$id] = array(
  52. 'id'=>$id,
  53. 'title'=>$data['title'],
  54. 'url'=>$this->buildURL($section, array('section'=>$id))
  55. );
  56. }
  57. break;
  58. case 'modules':
  59. $subNavSections['overview'] = array(
  60. 'id'=>'overview',
  61. 'title'=>'Modules Overview',
  62. 'url'=>$this->buildURL($section, array('section'=>'overview'))
  63. );
  64. $subNavSections['homescreen'] = array(
  65. 'id'=>'homescreen',
  66. 'title'=>'Home Screen Layout',
  67. 'url'=>$this->buildURL($section, array('section'=>'homescreen'))
  68. );
  69. $modules = array();
  70. foreach ($this->getAllModules() as $module) {
  71. $subNavSections[$module->getConfigModule()] = array(
  72. 'id'=>$module->getConfigModule(),
  73. 'title'=>$module->getModuleName(),
  74. 'url'=>$this->buildURL('modules', array('module'=>$module->getConfigModule()))
  75. );
  76. $modules[$module->getConfigModule()] = array(
  77. 'id'=>$module->getConfigModule(),
  78. 'title'=>$module->getModuleName(),
  79. 'home'=>$module->isOnHomeScreen(),
  80. 'disabled'=>$module->getModuleVar('disabled'),
  81. 'protected'=>$module->getModuleVar('protected'),
  82. 'secure'=>$module->getModuleVar('secure'),
  83. 'search'=>$module->getModuleVar('search'),
  84. 'url'=>$this->buildURL('modules', array('module'=>$module->getConfigModule()))
  85. );
  86. }
  87. $this->assign('modules', $modules);
  88. break;
  89. }
  90. return $subNavSections;
  91. }
  92. private function getModules() {
  93. $moduleNavConfig = $this->getModuleNavigationConfig();
  94. $modules = array(
  95. 'primary'=>$moduleNavConfig->getOptionalSection('primary_modules'),
  96. 'secondary'=>$moduleNavConfig->getOptionalSection('secondary_modules'),
  97. 'unused'=>array()
  98. );
  99. $usedModules = array_merge($modules['primary'], $modules['secondary']);
  100. $allModules = $this->getAllModules();
  101. $unusedModules = array_diff(array_keys($allModules), array_keys($usedModules));
  102. foreach ($unusedModules as $moduleID) {
  103. $module = $allModules[$moduleID];
  104. if ($module->canBeAddedToHomeScreen()) {
  105. $modules['unused'][$moduleID] = $module->getModuleName();
  106. }
  107. }
  108. $imgSuffix = ($this->pagetype == 'tablet' && $selected) ? '-selected' : '';
  109. foreach ($modules as $type=>&$m) {
  110. foreach ($m as $id=>$title) {
  111. $modules[$type][$id] = array(
  112. 'title' => $title,
  113. 'img' => "/modules/home/images/{$id}{$imgSuffix}".$this->imageExt,
  114. );
  115. }
  116. }
  117. return $modules;
  118. }
  119. protected function initialize() {
  120. $this->requiresAdmin();
  121. }
  122. protected function initializeForPage() {
  123. //make sure that only desktop/tablet devices can use the module
  124. $deviceClassifier = Kurogo::deviceClassifier();
  125. if ($this->page != 'index' && !($deviceClassifier->isComputer() || $deviceClassifier->isTablet())) {
  126. $this->redirectTo('index');
  127. }
  128. $navSections = $this->getNavSections();
  129. $section = '';
  130. $this->assign('navSections', $navSections);
  131. $this->addJQuery();
  132. $this->addJQueryUI();
  133. switch ($this->page)
  134. {
  135. case 'modules':
  136. $subNavSections = $this->getSubNavSections($this->page);
  137. $this->assign('subNavSections', $subNavSections);
  138. $defaultSubNavSection = key($subNavSections);
  139. $section = $this->getArg('section', $defaultSubNavSection);
  140. $moduleID = $this->getArg('module');
  141. if ($moduleID) {
  142. $this->setTemplatePage('module');
  143. try {
  144. if ($module = WebModule::factory($moduleID)) {
  145. $this->assign('moduleName', $module->getModuleName());
  146. $this->assign('moduleID', $module->getConfigModule());
  147. $section = $moduleID;
  148. $moduleSection = $this->getArg('section','general');
  149. $this->assign('moduleSection',$moduleSection);
  150. }
  151. } catch (Exception $e) {
  152. $this->redirectTo($this->page, array());
  153. }
  154. } elseif ($section == $defaultSubNavSection) {
  155. $this->setTemplatePage($section);
  156. } elseif ($section == 'homescreen') {
  157. $this->setTemplatePage($section);
  158. $homeModule = WebModule::factory('home');
  159. $modules = $this->getModules();
  160. $this->assign('modules', $modules);
  161. } else {
  162. $this->redirectTo($this->page, array());
  163. }
  164. break;
  165. case 'site':
  166. $subNavSections = $this->getSubNavSections($this->page);
  167. $this->assign('subNavSections', $subNavSections);
  168. $defaultSubNavSection = key($subNavSections);
  169. $section = $this->getArg('section', $defaultSubNavSection);
  170. if (!isset($subNavSections[$section])) {
  171. $this->redirectTo($this->page, array());
  172. }
  173. break;
  174. case 'credits':
  175. $section = $this->getArg('section', 'credits');
  176. $subNavSections = array(
  177. 'credits'=>array(
  178. 'id'=>'credits',
  179. 'title'=>'Credits',
  180. 'url'=>$this->buildURL($this->page, array('section'=>'credits'))
  181. ),
  182. 'license'=>array(
  183. 'id'=>'license',
  184. 'title'=>'License',
  185. 'url'=>$this->buildURL($this->page, array('section'=>'license'))
  186. )
  187. );
  188. $this->assign('subNavSections', $subNavSections);
  189. if (isset($subNavSections[$section])) {
  190. $this->setTemplatePage($section);
  191. } else {
  192. $this->redirectTo('section', array());
  193. }
  194. break;
  195. case 'index':
  196. //redirect desktop devices to the "default page"
  197. $deviceClassifier = Kurogo::deviceClassifier();
  198. if ($deviceClassifier->isComputer() || $deviceClassifier->isTablet()) {
  199. $defaultSection = current($navSections);
  200. $this->redirectTo($defaultSection['id'], array());
  201. }
  202. break;
  203. default:
  204. $this->redirectTo('index', array());
  205. break;
  206. }
  207. $this->assign('section', $section);
  208. }
  209. }