SetupController.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace Typemill\Controllers;
  3. use \Symfony\Component\Yaml\Yaml;
  4. use Typemill\Models\Validation;
  5. use Typemill\Models\User;
  6. use Typemill\Models\Write;
  7. class SetupController extends Controller
  8. {
  9. # redirect if visit /setup route
  10. public function redirect($request, $response)
  11. {
  12. return $response->withRedirect($this->c->router->pathFor('setup.show'));
  13. }
  14. public function show($request, $response, $args)
  15. {
  16. /* make some checks befor you install */
  17. $checkFolder = new Write();
  18. $systemcheck = array();
  19. # check folders and create them if possible
  20. try{ $checkFolder->checkPath('settings'); }catch(\Exception $e){ $systemcheck['error'][] = $e->getMessage(); }
  21. try{ $checkFolder->checkPath('settings/users'); }catch(\Exception $e){ $systemcheck['error'][] = $e->getMessage(); }
  22. try{ $checkFolder->checkPath('content'); }catch(\Exception $e){ $systemcheck['error'][] = $e->getMessage(); }
  23. try{ $checkFolder->checkPath('cache'); }catch(\Exception $e){ $systemcheck['error'][] = $e->getMessage(); }
  24. try{ $checkFolder->checkPath('media'); }catch(\Exception $e){ $systemcheck['error'][] = $e->getMessage(); }
  25. # check php-version
  26. if (version_compare(phpversion(), '7.0.0', '<'))
  27. {
  28. $systemcheck['error'][] = 'The PHP-version of your server is ' . phpversion() . ' and Typemill needs at least 7.0.0';
  29. }
  30. /* check if mod rewrite is enabled, does not work with PHP-fpm or NGINX
  31. $modules = apache_get_modules();
  32. if(!in_array('mod_rewrite', $modules))
  33. {
  34. $systemcheck['error'][] = 'The apache module "mod_rewrite" is not enabled.';
  35. }
  36. */
  37. # check if extensions are loaded
  38. if(!extension_loaded('gd')){ $systemcheck['error'][] = 'The php-extension GD for image manipulation is not enabled.'; }
  39. if(!extension_loaded('mbstring')){ $systemcheck['error'][] = 'The php-extension mbstring is not enabled.'; }
  40. if(!extension_loaded('fileinfo')){ $systemcheck['error'][] = 'The php-extension fileinfo is not enabled.'; }
  41. if(!extension_loaded('session')){ $systemcheck['error'][] = 'The php-extension session is not enabled.'; }
  42. if(!extension_loaded('iconv')){ $systemcheck['error'][] = 'The php-extension iconv is not enabled.'; }
  43. $setuperrors = empty($systemcheck) ? false : 'Some system requirements for Typemill are missing.';
  44. $systemcheck = empty($systemcheck) ? false : $systemcheck;
  45. return $this->render($response, 'auth/setup.twig', array( 'messages' => $setuperrors, 'systemcheck' => $systemcheck ));
  46. }
  47. public function create($request, $response, $args)
  48. {
  49. if($request->isPost())
  50. {
  51. $params = $request->getParams();
  52. $validate = new Validation();
  53. $user = new User();
  54. # set user as admin
  55. $params['userrole'] = 'administrator';
  56. # get userroles for validation
  57. $userroles = $this->c->acl->getRoles();
  58. /* validate user */
  59. if($validate->newUser($params, $userroles))
  60. {
  61. $userdata = array('username' => $params['username'], 'email' => $params['email'], 'userrole' => $params['userrole'], 'password' => $params['password']);
  62. /* create initial user */
  63. $username = $user->createUser($userdata);
  64. if($username)
  65. {
  66. /* login user */
  67. $user->login($username);
  68. # create initial settings file
  69. \Typemill\Settings::createSettings();
  70. return $response->withRedirect($this->c->router->pathFor('setup.welcome'));
  71. }
  72. }
  73. $this->c->flash->addMessage('error', 'Please check your input and try again');
  74. return $response->withRedirect($this->c->router->pathFor('setup.show'));
  75. }
  76. }
  77. public function welcome($request, $response, $args)
  78. {
  79. /* store updated settings */
  80. \Typemill\Settings::updateSettings(array('welcome' => false));
  81. return $this->render($response, 'auth/welcome.twig', array());
  82. }
  83. }