PageRenderTime 39ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/mpanel/controller.php

https://github.com/4sidora/Bagira.CMS
PHP | 328 lines | 211 code | 95 blank | 22 comment | 72 complexity | 05bcb4dd11c00229cb64a78213e593b9 MD5 | raw file
  1. <?php
  2. class controller {
  3. public function defAction() {
  4. // Устанавливаем статус системы "в режиме администрирования".
  5. system::$isAdmin = true;
  6. page::$macros = 0;
  7. // Попытка авторизации
  8. if(!empty($_POST['enter']))
  9. if (!user::auth($_POST['login'], $_POST['passw']))
  10. $this->showAuthForm(1);
  11. else
  12. header("Location: ".$_SERVER["HTTP_REFERER"]);
  13. // Если пользователь не админ, показываем форму авторизации
  14. if (!user::isAdmin())
  15. $this->showAuthForm();
  16. // Определяем текущий домен
  17. domains::curDomain();
  18. // Выход из системы
  19. if (system::issetUrl(0) && system::url(0) == 'logout')
  20. user::logout();
  21. if (system::url(0) == 'showhide') {
  22. $_SESSION['SH_FIELDS'] = (system::url(1) == 0) ? 'hide' : 'show';
  23. system::stop();
  24. }
  25. // Обработка запросов от поля ObjectLinks
  26. ui::checkObjectLinks();
  27. system::$defTemplate = MODUL_DIR.'/mpanel/template/default.tpl';
  28. // Определяем модуль
  29. if (!system::issetUrl(0))
  30. system::setUrl(0, user::getDefModul());
  31. // Если есть ссылка на обработчик формы
  32. if (!empty($_POST['right']))
  33. system::setUrl(1, system::POST('right', isVarName));
  34. // Определяем право
  35. if (system::issetUrl(1)) {
  36. // Проверяем существует ли указанное право
  37. if (user::issetRight(system::url(1)))
  38. $currRight = system::url(1);
  39. else if (user::issetRight(str_replace('_proc', '', system::url(1))))
  40. $currRight = system::url(1);
  41. } else {
  42. // Пытаемся найти право по умолчанию
  43. $def_right = user::getDefaultRight(system::url(0));
  44. if ($def_right) {
  45. $currRight = $def_right;
  46. system::setUrl(1, $def_right);
  47. }
  48. }
  49. $this->getMenu();
  50. page::assign('current_url', system::getCurrentUrl());
  51. page::assign('admin_url', system::au());
  52. if (!empty($currRight)) {
  53. // Определяем имя и метод контролера
  54. $pos = strpos($currRight, '_');
  55. if ($pos) {
  56. $class_name = '__'.substr($currRight, 0, $pos);
  57. $action_name = substr($currRight, $pos + 1, strlen($currRight) - $pos);
  58. } else {
  59. $class_name = '__'.$currRight;
  60. $action_name = 'defAction';
  61. }
  62. $mod_name = MODUL_DIR.'/'.system::url(0).'/'.$class_name.'.php';
  63. // Пытаемся подгрузить модуль
  64. if (file_exists($mod_name)) {
  65. include($mod_name);
  66. if (file_exists(MODUL_DIR.'/'.system::url(0).'/lang-ru.php'))
  67. include(MODUL_DIR.'/'.system::url(0).'/lang-ru.php');
  68. ui::setHeader(lang::right($currRight));
  69. if (class_exists($class_name)) {
  70. eval('$c = new '.$class_name.'();');
  71. if (ui::$stop)
  72. $content = '.';
  73. else if (method_exists($c, $action_name))
  74. $content = call_user_func(array($c, $action_name));
  75. }
  76. }
  77. if (empty($content)) {
  78. $msg = lang::get('TEXT_PROC_NOTFOUND2').'<br />'.system::getCurrentUrl().'<br /><br />
  79. '.lang::get('TEXT_PROC_NOTFOUND3').'<br />'.$mod_name.'<br /><br />
  80. '.lang::get('TEXT_PROC_NOTFOUND4');
  81. system::log(lang::get('TEXT_PROC_NOTFOUND').' '.system::getCurrentUrl());
  82. ui::MessageBox(lang::get('TEXT_PROC_NOTFOUND'), $msg);
  83. system::redirect('/');
  84. }
  85. } else {
  86. system::log(lang::get('TEXT_ERROR_RIGHT_LOG').system::getCurrentUrl());
  87. ui::MessageBox(lang::get('TEXT_ERROR_RIGHT'), lang::get('TEXT_ERROR_RIGHT2'));
  88. system::redirect('/');
  89. }
  90. //Производим сжатие страницы
  91. if (reg::getKey('/config/gzip')) {
  92. $PREFER_DEFLATE = false;
  93. $FORCE_COMPRESSION = false;
  94. $AE = (isset($_SERVER['HTTP_ACCEPT_ENCODING'])) ? $_SERVER['HTTP_ACCEPT_ENCODING'] : $_SERVER['HTTP_TE'];
  95. $support_gzip = (strpos($AE, 'gzip') !== FALSE) || $FORCE_COMPRESSION;
  96. $support_deflate = (strpos($AE, 'deflate') !== FALSE) || $FORCE_COMPRESSION;
  97. if ($support_gzip && $support_deflate)
  98. $support_deflate = $PREFER_DEFLATE;
  99. if ($support_deflate) {
  100. header("Content-Encoding: deflate");
  101. ob_start("compress_output_deflate");
  102. } else {
  103. if ($support_gzip) {
  104. header("Content-Encoding: gzip");
  105. ob_start("compress_output_gzip");
  106. } else ob_start();
  107. }
  108. }
  109. return ui::getMainHTML($content);
  110. }
  111. // Формируем меню с модулями
  112. private function getMenu() {
  113. if (file_exists(MODUL_DIR.'/mpanel/template/menu.tpl')) {
  114. include(MODUL_DIR.'/mpanel/template/menu.tpl');
  115. if (file_exists(MODUL_DIR.'/mpanel/lang-ru.php'))
  116. include(MODUL_DIR.'/mpanel/lang-ru.php');
  117. $mas = user::getRights();
  118. ///print_r($mas);
  119. $items = $sub_items = '';
  120. $num = 0;
  121. while (list($name, $modul) = each ($mas)) {
  122. if (!empty($modul['rights'])){
  123. $num ++;
  124. if (file_exists(MODUL_DIR.'/'.$name.'/lang-ru.php'))
  125. include(MODUL_DIR.'/'.$name.'/lang-ru.php');
  126. $mod_name = (isset($MODNAME[$name])) ? $MODNAME[$name] : $name;
  127. page::assign('name', $mod_name);
  128. page::assign('url', system::au().'/'.$name);
  129. if ($num < 7) {
  130. $act = (system::url(0) == $name) ? 'act' : 'no_act';
  131. $items .= page::parse($TEMPLATE['item_'.$act]);
  132. } else {
  133. $sub_items .= page::parse($TEMPLATE['sub_item']);
  134. }
  135. }
  136. }
  137. // Список редко используемых модулей
  138. if (!empty($sub_items)) {
  139. page::assign('eshe', $LANG['eshe']);
  140. page::assign('sub_items', $sub_items);
  141. $sub_menu = page::parse($TEMPLATE['sub_menu']);
  142. } else $sub_menu = '';
  143. // echo $sub_menu;
  144. // Вывод списка языковых версий и доменов
  145. $sub_menu .= $this->getLangsAndDomains($TEMPLATE);
  146. page::assign('items', $items);
  147. page::assign('sub_menu', $sub_menu);
  148. $menu = page::parse($TEMPLATE['basic_menu']);
  149. page::assign('menu', $menu);
  150. // Устанавливаем доступ к языковым переменным
  151. if (isset($RIGHT) && isset($MODNAME)) {
  152. lang::setLang($LANG);
  153. lang::setRight($RIGHT);
  154. lang::setModule($MODNAME);
  155. }
  156. }
  157. }
  158. private function getLangsAndDomains($TEMPLATE){
  159. $sub_menu = '';
  160. $langs = languages::getAll();
  161. $domains = domains::getAll();
  162. page::assign('ldObjectLinks', '');
  163. if (count($langs) > 1 || count($domains) > 1) {
  164. $isMultiDom = (count($domains) > 1) ? true : false;
  165. $sub_items = $curLD = '';
  166. $mas = array();
  167. $num = 0;
  168. while (list($num2, $domain) = each ($domains)) {
  169. reset($langs);
  170. while (list($num1, $lang) = each ($langs)) {
  171. if (user::issetRight($lang['l_id'].' '.$domain['d_id'], 'structure')) {
  172. if ($isMultiDom) {
  173. $lanver = $domain['d_name'];
  174. if ($lang['l_id'] != $domain['d_def_lang'])
  175. $lanver .= '/'.$lang['l_prefix'];
  176. } else $lanver = $lang['l_name'];
  177. $link = ADMIN_URL;
  178. if ($domain['d_id'] != domains::curSiteDomain()->id())
  179. $link .= '/'.str_replace('.', '_', $domain['d_name']);
  180. if ($lang['l_id'] != $domain['d_def_lang'])
  181. $link = '/'.$lang['l_prefix'].$link;
  182. if (domains::curId() == $domain['d_id'] && languages::curId() == $lang['l_id'])
  183. $curLD = $link;
  184. page::assign('name', $lanver);
  185. page::assign('url', $link);
  186. $sub_items .= page::parse($TEMPLATE['langver']);
  187. $mas[] = array(
  188. 'id' => $link,
  189. 'name' => $lanver
  190. );
  191. $num ++;
  192. }
  193. }
  194. }
  195. if (!empty($sub_items) && $num > 1) {
  196. if ($isMultiDom)
  197. $lanver = domains::curDomain()->getName().languages::pre();
  198. else
  199. $lanver = languages::curLang()->getName();
  200. page::assign('eshe', $lanver);
  201. page::assign('sub_items', $sub_items);
  202. $sub_menu = page::parse($TEMPLATE['sub_menu']);
  203. ui::SelectBox('ldObjectLinks', $mas, $curLD, 474, '', 'onSelectldObjectLinks()');
  204. }
  205. }
  206. return $sub_menu;
  207. }
  208. private function showAuthForm($error = 0){
  209. if (file_exists(MODUL_DIR.'/mpanel/template/auth.tpl')) {
  210. include(MODUL_DIR.'/mpanel/template/auth.tpl');
  211. page::assign('title', lang::get('CMF'));
  212. if (user::isGuest()) {
  213. // Пользователь не авторизован
  214. page::assign('url', system::getCurrentUrl());
  215. page::assign('login', lang::get('AUTHFORM_LOGIN'));
  216. page::assign('passw', lang::get('AUTHFORM_PASSW'));
  217. page::assign('enter', lang::get('AUTHFORM_ENTER'));
  218. page::assign('error', $error);
  219. echo page::parse($TEMPLATE['frame']);
  220. } else {
  221. // Пользователь авторизован, но не является админом
  222. page::assign('exit_url', '/users/logout');
  223. page::assign('user', user::get('name'));
  224. page::assign('hello', lang::get('AUTHFORM_HELLO'));
  225. page::assign('big_text', lang::get('AUTHFORM_BIG_TEXT'));
  226. page::assign('exit_text', lang::get('AUTHFORM_EXIT_TEXT'));
  227. echo page::parse($TEMPLATE['frame_no_admin']);
  228. }
  229. system::stop();
  230. }
  231. }
  232. }
  233. ?>