setinfo.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2016-10-19 12:51
  7. */
  8. use common\widgets\JsBlock;
  9. use yii\helpers\Url;
  10. use install\assets\LayerAsset;
  11. LayerAsset::register($this);
  12. $this->title = Yii::t('install', 'Fill Info');
  13. ?>
  14. <section class="section">
  15. <?= $this->render('_steps') ?>
  16. <form id="js-install-form" action="<?php Url::to(['setinfo']) ?>" method="post">
  17. <input type="hidden" name="force" value="0"/>
  18. <div class="server">
  19. <table width="100%">
  20. <tr>
  21. <td class="td1" width="100"><?= Yii::t('install', 'Database') ?></td>
  22. <td class="td1" width="200">&nbsp;</td>
  23. <td class="td1">&nbsp;</td>
  24. </tr>
  25. <tr>
  26. <td class="text-left"><?= Yii::t('install', 'Type') ?>:</td>
  27. <td>
  28. <select name="dbtype">
  29. <option selected value="mysql">MySQL</option>
  30. <option value="sqlite">SQLite</option>
  31. <option value="pgsql">PostgreSQL</option>
  32. </select>
  33. </td>
  34. <td>
  35. <div>
  36. <span class="gray"><?= Yii::t('install', 'Recommend MySQL') ?></span>
  37. </div>
  38. </td>
  39. </tr>
  40. <tr>
  41. <td class="text-left"><?= Yii::t('install', 'DB Host') ?>:</td>
  42. <td><input type="text" name="dbhost" id="dbhost" value="localhost" class="input"></td>
  43. <td>
  44. <div id="js-install-tip-dbhost">
  45. <span class="gray"><?= Yii::t('install', 'Database host, SQLite like `/path/to/feehi.db`, other database often is localhost') ?></span>
  46. </div>
  47. </td>
  48. </tr>
  49. <tr>
  50. <td class="text-left"><?= Yii::t('install', 'DB Port') ?>:</td>
  51. <td><input type="text" name="dbport" id="dbport" value="3306" class="input"></td>
  52. <td>
  53. <div id="js-install-tip-dbport">
  54. <span class="gray"><?= Yii::t('install', 'Default MySQL 3306, PostgreSQL 5432') ?></span>
  55. </div>
  56. </td>
  57. </tr>
  58. <tr>
  59. <td class="text-left"><?= Yii::t('install', 'DB Username') ?>:</td>
  60. <td><input type="text" name="dbuser" id="dbuser" value="root" class="input"></td>
  61. <td>
  62. <div id="js-install-tip-dbuser"></div>
  63. </td>
  64. </tr>
  65. <tr>
  66. <td class="text-left"><?= Yii::t('install', 'DB Password') ?>:</td>
  67. <td><input type="password" name="dbpw" id="dbpw" value="" class="input" autoComplete="off"></td>
  68. <td>
  69. <div id="js-install-tip-dbpw"></div>
  70. </td>
  71. </tr>
  72. <tr>
  73. <td class="text-left"><?= Yii::t('install', 'DB Name') ?>:</td>
  74. <td><input type="text" name="dbname" id="dbname" value="feehi" class="input"></td>
  75. <td>
  76. <div id="js-install-tip-dbname"></div>
  77. </td>
  78. </tr>
  79. <tr>
  80. <td class="text-left"><?= Yii::t('install', 'Table Prefix') ?>:</td>
  81. <td><input type="text" name="dbprefix" id="dbprefix" value="feehi_" class="input"></td>
  82. <td>
  83. <div id="js-install-tip-dbprefix"></div>
  84. </td>
  85. </tr>
  86. </table>
  87. <table width="100%">
  88. <tr>
  89. <td class="td1" width="100"><?= Yii::t('install', 'Website') ?></td>
  90. <td class="td1" width="200">&nbsp;</td>
  91. <td class="td1">&nbsp;</td>
  92. </tr>
  93. <tr>
  94. <td class="text-left"><?= Yii::t('install', 'Title') ?>:</td>
  95. <td><input type="text" name="sitename" value="Feehi CMS" class="input"></td>
  96. <td>
  97. <div id="js-install-tip-sitename"></div>
  98. </td>
  99. </tr>
  100. <tr>
  101. <td class="text-left"><?= Yii::t('install', 'Site Url') ?>:</td>
  102. <td><input type="text" name="siteurl" value="<?= str_replace(["http://", "https://"], "//", Yii::$app->getRequest()->getHostInfo() . Yii::$app->getRequest()->getBaseUrl()) ?>/"
  103. class="input" autoComplete="off"></td>
  104. <td>
  105. <div id="js-install-tip-siteurl">
  106. <span class="gray"><?= Yii::t('install', 'Please end at "/"') ?></span>
  107. </div>
  108. </td>
  109. </tr>
  110. <tr>
  111. <td class="text-left"><?= Yii::t('install', 'Keywords') ?>:</td>
  112. <td><input type="text" name="sitekeywords" value="FeehiCMS,php,内容管理框架,cms, feehi,framework"
  113. class="input" autoComplete="off"></td>
  114. <td>
  115. <div id="js-install-tip-sitekeywords"></div>
  116. </td>
  117. </tr>
  118. <tr>
  119. <td class="text-left"><?= Yii::t('install', 'Description') ?>:</td>
  120. <td><input type="text" name="siteinfo" class="input" value="FeehiCMS是一款基于yii2的高性能快速开发的内容管理框架">
  121. </td>
  122. <td>
  123. <div id="js-install-tip-siteinfo"></div>
  124. </td>
  125. </tr>
  126. </table>
  127. <table width="100%">
  128. <tr>
  129. <td class="td1" width="100"><?= Yii::t('install', 'Administrator') ?></td>
  130. <td class="td1" width="200">&nbsp;</td>
  131. <td class="td1">&nbsp;</td>
  132. </tr>
  133. <tr>
  134. <td class="text-left"><?= Yii::t('install', 'Username') ?>:</td>
  135. <td><input type="text" name="manager" value="admin" class="input"></td>
  136. <td>
  137. <div id="js-install-tip-manager"></div>
  138. </td>
  139. </tr>
  140. <tr>
  141. <td class="text-left"><?= Yii::t('install', 'Password') ?>:</td>
  142. <td><input type="password" name="manager_pwd" id="js-manager-pwd" class="input"
  143. autoComplete="off"></td>
  144. <td>
  145. <div id="js-install-tip-manager_pwd"></div>
  146. </td>
  147. </tr>
  148. <tr>
  149. <td class="text-left"><?= Yii::t('install', 'Re-password') ?>:</td>
  150. <td><input type="password" name="manager_ckpwd" class="input" autoComplete="off"></td>
  151. <td>
  152. <div id="js-install-tip-manager_ckpwd"></div>
  153. </td>
  154. </tr>
  155. <tr>
  156. <td class="text-left"><?= Yii::t('install', 'Email') ?>:</td>
  157. <td><input type="text" name="manager_email" class="input" value=""></td>
  158. <td>
  159. <div id="js-install-tip-manager_email"></div>
  160. </td>
  161. </tr>
  162. </table>
  163. <div id="js-response-tips" style="display: none;"></div>
  164. </div>
  165. <div class="bottom text-center">
  166. <a href="<?= Url::to(['check-environment']) ?>"
  167. class="btn btn-primary"><?= Yii::t('install', 'Prev') ?></a>
  168. <button type="submit" class="btn btn-primary"><?= Yii::t('install', 'Install') ?></button>
  169. </div>
  170. </form>
  171. </section>
  172. <?php JsBlock::begin() ?>
  173. <script>
  174. function sqliteInput(){
  175. $("input[name=dbname]").eq(0).parents("tr").eq(0).hide();
  176. $("input[name=dbport]").eq(0).parents("tr").eq(0).hide();
  177. $("input[name=dbuser]").eq(0).parents("tr").eq(0).hide();
  178. $("input[name=dbpw]").eq(0).parents("tr").eq(0).hide();
  179. $("#dbname").rules("remove");
  180. $("#dbport").rules("remove");
  181. $("#dbuser").rules("remove");
  182. }
  183. function notSqliteInput() {
  184. $("input[name=dbname]").eq(0).parents("tr").eq(0).show();
  185. $("input[name=dbport]").eq(0).parents("tr").eq(0).show();
  186. $("input[name=dbuser]").eq(0).parents("tr").eq(0).show();
  187. $("input[name=dbpw]").eq(0).parents("tr").eq(0).show();
  188. $("#dbname").rules("add", {required:true});
  189. $("#dbport").rules("add", {required:true});
  190. $("#dbuser").rules("add", {required:true});
  191. }
  192. $(function () {
  193. $("select[name=dbtype]").change(function (e) {
  194. dbType = $(this).val();
  195. if(dbType === "sqlite"){
  196. sqliteInput();
  197. }else{
  198. notSqliteInput();
  199. }
  200. });
  201. //聚焦时默认提示
  202. var focus_tips = {
  203. dbhost: '<?=addcslashes(Yii::t('install', 'Database host, SQLite like `/path/to/feehi.db`, other database often is localhost'), "'")?>',
  204. dbport: '<?=addcslashes(Yii::t('install', 'Default MySQL 3306, PostgreSQL 5432'), "'")?>',
  205. dbuser: '<?=addcslashes(Yii::t('install', 'Database Username'), "'")?>',
  206. dbpw: '<?=addcslashes(Yii::t('install', 'Database Password'), "'")?>',
  207. dbname: '<?=addcslashes(Yii::t('install', 'Database Name'), "'")?>',
  208. dbprefix: '<?=addcslashes(Yii::t('install', 'Database table prefix'), "'")?>',
  209. manager: '<?=addcslashes(Yii::t('install', 'Super administrator, own the whole permission'), "'")?>',
  210. manager_pwd: '',
  211. manager_ckpwd: '',
  212. sitename: '',
  213. siteurl: '<?=addcslashes(Yii::t('install', 'Please end at "/"'), "'")?>',
  214. sitekeywords: '',
  215. siteinfo: '',
  216. manager_email: ''
  217. };
  218. var install_form = $("#js-install-form");
  219. //validate插件修改了remote ajax验证返回的response处理方式;增加密码强度提示 passwordRank
  220. install_form.validate({
  221. //debug : true,
  222. //onsubmit : false,
  223. errorPlacement: function (error, element) {
  224. //错误提示容器
  225. $('#js-install-tip-' + element[0].name).html(error);
  226. },
  227. errorElement: 'span',
  228. //invalidHandler : , 未验证通过 回调
  229. //ignore : '.ignore' 忽略验证
  230. //onkeyup : true,
  231. errorClass: 'tips-error',
  232. validClass: 'tips-error',
  233. onkeyup: false,
  234. focusInvalid: false,
  235. rules: {
  236. dbhost: {required: true},
  237. dbport: {required: true},
  238. dbuser: {required: true},
  239. /* dbpw: {required : true}, */
  240. dbname: {required: true},
  241. //dbprefix: {required: true},
  242. manager: {required: true},
  243. manager_pwd: {required: true},
  244. manager_ckpwd: {required: true, equalTo: '#js-manager-pwd'},
  245. manager_email: {required: true, email: true}
  246. },
  247. highlight: false,
  248. unhighlight: function (element, errorClass, validClass) {
  249. var tip_elem = $('#js-install-tip-' + element.name);
  250. tip_elem.html('<span class="' + validClass + '" data-text="text"><span>');
  251. },
  252. onfocusin: function (element) {
  253. var name = element.name;
  254. $('#js-install-tip-' + name).html('<span data-text="text">' + focus_tips[name] + '</span>');
  255. $(element).parents('tr').addClass('current');
  256. },
  257. onfocusout: function (element) {
  258. var _this = this;
  259. $(element).parents('tr').removeClass('current');
  260. if (element.name === 'email') {
  261. //邮箱匹配点击后,延时处理
  262. setTimeout(function () {
  263. _this.element(element);
  264. }, 150);
  265. } else {
  266. _this.element(element);
  267. }
  268. },
  269. messages: {
  270. dbhost: {required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'DB Host')]), "'")?>'},
  271. dbport: {required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'DB Port')]), "'")?>'},
  272. dbuser: {required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'DB Username')]), "'")?>'},
  273. dbpw: {required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'DB Password')]), "'")?>'},
  274. dbname: {required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'DB Name')]), "'")?>'},
  275. dbprefix: {required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'Table Prefix')]), "'")?>'},
  276. manager: {required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'Admin Username')]), "'")?>'},
  277. manager_pwd: {required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'Admin Password')]), "'")?>'},
  278. manager_ckpwd: {
  279. required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'Repeat Password')]), "'")?>',
  280. equalTo: '<?=addcslashes(Yii::t('install', 'Repeat password is not equal password'), "'")?>.'
  281. },
  282. manager_email: {
  283. required: '<?=addcslashes(Yii::t('install', '{attribute} cannot be empty', ['attribute' => Yii::t('install', 'Email')]), "'")?>',
  284. email: '<?=addcslashes(Yii::t('install', 'Please input the correct email'), "'")?>'
  285. }
  286. },
  287. submitHandler: function (form) {
  288. layer.msg('<?=addcslashes(Yii::t('install', 'Verifying, do no refresh this window.'), "'")?>', {icon: 16, time: 0});
  289. $(form).ajaxSubmit({
  290. type: 'post', //数据发送方式
  291. dataType: 'json', //接受数据格式
  292. url: "<?=Url::to(['create-database'])?>",
  293. success: function (data) {
  294. $(".layui-layer").remove();
  295. if (data.message == '') {
  296. $("button[type=submit]").attr('disabled', true);
  297. form.submit();
  298. } else {
  299. alert(data.message);
  300. }
  301. },
  302. error: function (data) {
  303. $(".layui-layer").remove();
  304. alert(data.responseJSON.message);
  305. }
  306. });
  307. }
  308. });
  309. if( $("select[name=dbtype]:selected").val() === "sqlite" ){
  310. sqliteInput();
  311. }else{
  312. notSqliteInput();
  313. }
  314. });
  315. </script>
  316. <?php JsBlock::end() ?>