PageRenderTime 33ms CodeModel.GetById 5ms RepoModel.GetById 1ms app.codeStats 0ms

/arlicle/modules/arlicle/controllers/install.php

http://arlicle.googlecode.com/
PHP | 280 lines | 203 code | 34 blank | 43 comment | 36 complexity | 3c7ab5e6f86049528d04aa243d5d740f MD5 | raw file
Possible License(s): AGPL-1.0, LGPL-2.1
  1. <?php defined('SYSPATH') OR die('No direct access allowed.');
  2. /*
  3. * Arlicle admin Options Image controller.
  4. *
  5. * @packpage Arlicle
  6. * @author Edison Rao
  7. * @copyright (c) 2009 Arlicle Team
  8. * @license GNU General Public License 2.0
  9. */
  10. class Install_Controller extends Controller {
  11. public function index() {
  12. $this->_install_initialize();
  13. if (Arlicle::is_installed()) {
  14. return $this->_installed();
  15. }
  16. if ($_POST) {
  17. $default_language = $this->input->post('language');
  18. if (!empty($default_language)) {
  19. cookie::set('default_language', $default_language);
  20. }
  21. url::admin_redirect('install/step1');
  22. }
  23. $view = new View('layouts/install');
  24. $view->page_title = 'Installation';
  25. $view->languages = T::get_languages();
  26. $browser_language = '';
  27. $languages = Kohana::user_agent('languages');
  28. if (isset($languages[0])) {
  29. $browser_language = $languages[0];
  30. }
  31. $view->browser_language = $browser_language;
  32. $view->render(true);
  33. }
  34. public function step1() {
  35. $this->_install_initialize();
  36. if (Arlicle::is_installed()) {
  37. return $this->_installed();
  38. }
  39. $arlicle = false;
  40. $apppath = false;
  41. $config_folder = false;
  42. $config_file = false;
  43. if (is_writable(DOCROOT)) {
  44. $arlicle = true;
  45. }
  46. if (is_writable(APPPATH)) {
  47. $apppath = true;
  48. }
  49. if (is_writable(APPPATH . 'config')) {
  50. $config_folder = true;
  51. Arlicle::config_save('arlicle.default_language', cookie::get('default_language'));
  52. }
  53. if (is_writable(APPPATH . 'config/config.php')) {
  54. $config_file = true;
  55. }
  56. $view = new View('layouts/install');
  57. $view->page_title = 'Installation step 1';
  58. $view->arlicle = $arlicle;
  59. $view->apppath = $apppath;
  60. $view->config_folder = $config_folder;
  61. $view->config_file = $config_file;
  62. $view->languages = T::get_languages();
  63. $view->render(true);
  64. }
  65. public function step2() {
  66. $this->_install_initialize();
  67. if (Arlicle::is_installed()) {
  68. return $this->_installed();
  69. }
  70. $dbname = '';
  71. $dbusername = '';
  72. $dbpassword = '';
  73. $dbhost = 'localhost';
  74. $tbprefix = 'a_';
  75. $error_message = '';
  76. if ($_POST) {
  77. $database_config = Kohana::config('database.default');
  78. //$dbname = $database = $this->input->post('dbname');
  79. $database_config['connection']['database'] = $this->input->post('dbname');
  80. $dbusername = $database_config['connection']['user'] = $this->input->post('dbusername');
  81. $dbpassword = $database_config['connection']['pass'] = $this->input->post('dbpassword');
  82. $dbhost = $database_config['connection']['host'] = $this->input->post('dbhost');
  83. $tbprefix = $database_config['table_prefix'] = $this->input->post('tbprefix');
  84. $auto_create = $this->input->post('run_auto_create');
  85. Kohana::config_set('database.default', $database_config);
  86. $db = new Database();
  87. $db->connect();
  88. Arlicle::config_save('database.default', $database_config);
  89. url::admin_redirect('install/step3');
  90. // get db instance
  91. #$db = new Database();
  92. // check username, password, host
  93. #$db->connect();
  94. /*
  95. // check if database exists
  96. $exists = false;
  97. $databases = $db->query("SHOW DATABASES");
  98. foreach($databases as $object) {
  99. if ($database == $object->Database) {
  100. $exists = true;
  101. }
  102. }
  103. if (!$exists && !empty($auto_create)) {
  104. $db->query("CREATE DATABASE IF NOT EXISTS `$database`");
  105. $exists = true;
  106. }
  107. if ($exists) {
  108. $database_config['connection']['database'] = $database;
  109. Arlicle::config_save('database.default', $database_config);
  110. url::admin_redirect('install/step3');
  111. } else {
  112. $error_message = sprintf(T::_("Database '%s' is not exists, Auto create it or input it again?"), $database);
  113. }
  114. */
  115. }
  116. $view = new View('layouts/install');
  117. $view->page_title = 'Installation step 2';
  118. $view->dbname = $dbname;
  119. $view->dbusername = $dbusername;
  120. $view->dbpassword = $dbpassword;
  121. $view->dbhost = $dbhost;
  122. $view->tbprefix = $tbprefix;
  123. $view->error_message = $error_message;
  124. $view->render(true);
  125. }
  126. public function step3() {
  127. $this->_install_initialize();
  128. if (Arlicle::is_installed()) {
  129. return $this->_installed();
  130. }
  131. $view = new View('layouts/install');
  132. $view->page_title = 'Installation step 3';
  133. $view->render(true);
  134. }
  135. // arlicle is_installed 应该返回true或者false
  136. public function step4() {
  137. $this->_install_initialize();
  138. if (Arlicle::is_installed()) {
  139. return $this->_installed();
  140. }
  141. $view = new View('layouts/install');
  142. $view->page_title = 'Installation step 4';
  143. $view->error_message = '';
  144. $view->username = '';
  145. $view->password = '';
  146. $view->password_confirm = '';
  147. $view->site_title = '';
  148. $view->admin_uri = 'admin';
  149. $view->admin_email = '';
  150. $view->initial_data = true;
  151. if ($_POST) {
  152. $view->username = trim($this->input->post('username'));
  153. if (empty($view->username)) {
  154. $view->error_message = T::_('ERROR: The username is empty.');
  155. }
  156. if (empty($view->error_message) && !valid::username($view->username)) {
  157. $view->error_message = T::_('ERROR: Invalid username.');
  158. }
  159. $view->password = $this->input->post('password');
  160. $view->password_confirm = $this->input->post('password_confirm');
  161. if (empty($view->error_message) && (empty($view->password) || empty($view->password_confirm))) {
  162. $view->error_message = T::_('ERROR: The password is empty.');
  163. }
  164. if (empty($view->error_message) && $view->password != $view->password_confirm) {
  165. $view->error_message = T::_('ERROR: The password not equal.');
  166. }
  167. $view->site_title = trim($this->input->post('site_title'));
  168. $view->admin_uri = trim($this->input->post('admin_uri'));
  169. if (empty($view->error_message) && empty($view->admin_uri)) {
  170. $view->error_message = T::_('ERROR: Admin uri is empty.');
  171. }
  172. if (empty($view->error_message) && !valid::alpha_dash($view->admin_uri)) {
  173. $view->error_message = T::_('ERROR: Invalid admin uri.');
  174. }
  175. $view->admin_email = trim($this->input->post('admin_email'));
  176. if (empty($view->error_message) && !valid::email($view->admin_email)) {
  177. $view->error_message = T::_('ERROR: Invalid email.');
  178. }
  179. $view->initial_data = $this->input->post('initial_data') == 'yes' ? true : false;
  180. if (empty($view->error_message)) {
  181. Install::db();
  182. // add admin user
  183. $user = ORM::factory('user');
  184. $user->username = $view->username;
  185. $user->email = $view->admin_email;
  186. $user->is_superuser = 1;
  187. $user->status = 1;
  188. $user->activation_key = '';
  189. $user->password = $view->password;
  190. $user->save();
  191. // create folder
  192. // attach, backup, cache, logs
  193. @mkdir(APPPATH . 'attach');
  194. @mkdir(APPPATH . 'backup');
  195. @mkdir(APPPATH . 'cache');
  196. @mkdir(APPPATH . 'logs');
  197. // save site info
  198. Arlicle::config_save('arlicle.site_title', $view->site_title);
  199. // save current http post for site url
  200. $site_url = !empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
  201. if (!empty($site_url)) {
  202. $site_url = 'http://' . $site_url;
  203. Arlicle::config_save('arlicle.site_url', $site_url);
  204. }
  205. // save upload_max_filesize
  206. Arlicle::config_save('arlicle.upload_max_filesize', ini_get('upload_max_filesize'));
  207. $cache = Cache::instance();
  208. $cache->set('arlicle_installed', true, null, 0);
  209. if ($view->initial_data) {
  210. Install::initial_data(Kohana::config('core.theme'));
  211. }
  212. // save admin uri
  213. Arlicle::config_save('arlicle.admin_uri', $view->admin_uri);
  214. Kohana::config_set('arlicle.admin_uri', $view->admin_uri);
  215. url::admin_redirect('install/step5');
  216. }
  217. }
  218. $view->render(true);
  219. }
  220. public function step5() {
  221. $this->_install_initialize();
  222. $view = new View('layouts/install');
  223. $view->page_title = 'Installation step 5';
  224. $view->render(true);
  225. }
  226. protected function _install_initialize() {
  227. // get default language
  228. $default_language = strtolower(cookie::get('default_language'));
  229. if (empty($default_language)) {
  230. $default_languages = Kohana::user_agent('languages');
  231. if (!empty($default_languages)) {
  232. foreach($default_languages as $language) {
  233. $language = strtolower($language);
  234. T::add_language('languages', $language . '_install');
  235. }
  236. }
  237. } else {
  238. T::add_language('languages', $default_language . '_install');
  239. }
  240. }
  241. protected function _installed() {
  242. $view = new View('install/installed');
  243. $view->page_title = 'Installation step 5';
  244. $view->render(true);
  245. }
  246. }