Browse Source

新增自动生成标签&时间区间组件

新增自动生成固定列
新增弱密码检测
优化插件相关命令行命令
优化默认管理员和前台用户头像
Karson 3 years ago
parent
commit
fce5b8e374

+ 6 - 45
application/admin/command/Addon.php

@@ -21,11 +21,12 @@ class Addon extends Command
         $this
             ->setName('addon')
             ->addOption('name', 'a', Option::VALUE_REQUIRED, 'addon name', null)
-            ->addOption('action', 'c', Option::VALUE_REQUIRED, 'action(create/enable/disable/install/uninstall/refresh/upgrade/package/move)', 'create')
+            ->addOption('action', 'c', Option::VALUE_REQUIRED, 'action(create/enable/disable/uninstall/refresh/package/move)', 'create')
             ->addOption('force', 'f', Option::VALUE_OPTIONAL, 'force override', null)
             ->addOption('release', 'r', Option::VALUE_OPTIONAL, 'addon release version', null)
             ->addOption('uid', 'u', Option::VALUE_OPTIONAL, 'fastadmin uid', null)
             ->addOption('token', 't', Option::VALUE_OPTIONAL, 'fastadmin token', null)
+            ->addOption('domain', 'd', Option::VALUE_OPTIONAL, 'domain', null)
             ->addOption('local', 'l', Option::VALUE_OPTIONAL, 'local package', null)
             ->setDescription('Addon manager');
     }
@@ -48,7 +49,7 @@ class Addon extends Command
 
         include dirname(__DIR__) . DS . 'common.php';
 
-        if (!$name) {
+        if (!$name && !in_array($action, ['refresh'])) {
             throw new Exception('Addon name could not be empty');
         }
         if (!$action || !in_array($action, ['create', 'disable', 'enable', 'install', 'uninstall', 'refresh', 'upgrade', 'package', 'move'])) {
@@ -132,42 +133,6 @@ class Addon extends Command
                 }
                 $output->info(ucfirst($action) . " Successed!");
                 break;
-            case 'install':
-                //非覆盖模式时如果存在则报错
-                if (is_dir($addonDir) && !$force) {
-                    throw new Exception("addon already exists!\nIf you need to install again, use the parameter --force=true ");
-                }
-                //如果存在先移除
-                if (is_dir($addonDir)) {
-                    rmdirs($addonDir);
-                }
-                // 获取本地路径
-                $local = $input->getOption('local');
-                try {
-                    Service::install($name, 0, ['version' => $release], $local);
-                } catch (AddonException $e) {
-                    if ($e->getCode() != -3) {
-                        throw new Exception($e->getMessage());
-                    }
-                    if (!$force) {
-                        //如果有冲突文件则提醒
-                        $data = $e->getData();
-                        foreach ($data['conflictlist'] as $k => $v) {
-                            $output->warning($v);
-                        }
-                        $output->info("Are you sure you want to override all those files?  Type 'yes' to continue: ");
-                        $line = fgets(defined('STDIN') ? STDIN : fopen('php://stdin', 'r'));
-                        if (trim($line) != 'yes') {
-                            throw new Exception("Operation is aborted!");
-                        }
-                    }
-                    Service::install($name, 1, ['version' => $release, 'uid' => $uid, 'token' => $token], $local);
-                } catch (Exception $e) {
-                    throw new Exception($e->getMessage());
-                }
-
-                $output->info("Install Successed!");
-                break;
             case 'uninstall':
                 //非覆盖模式时如果存在则报错
                 if (!$force) {
@@ -202,10 +167,6 @@ class Addon extends Command
                 Service::refresh();
                 $output->info("Refresh Successed!");
                 break;
-            case 'upgrade':
-                Service::upgrade($name, ['version' => $release, 'uid' => $uid, 'token' => $token]);
-                $output->info("Upgrade Successed!");
-                break;
             case 'package':
                 $infoFile = $addonDir . 'info.ini';
                 if (!is_file($infoFile)) {
@@ -256,8 +217,8 @@ class Addon extends Command
             case 'move':
                 $movePath = [
                     'adminOnlySelfDir' => ['admin/behavior', 'admin/controller', 'admin/library', 'admin/model', 'admin/validate', 'admin/view'],
-                    'adminAllSubDir' => ['admin/lang'],
-                    'publicDir' => ['public/assets/addons', 'public/assets/js/backend']
+                    'adminAllSubDir'   => ['admin/lang'],
+                    'publicDir'        => ['public/assets/addons', 'public/assets/js/backend']
                 ];
                 $paths = [];
                 $appPath = str_replace('/', DS, APP_PATH);
@@ -350,7 +311,7 @@ class Addon extends Command
     /**
      * 写入到文件
      * @param string $name
-     * @param array $data
+     * @param array  $data
      * @param string $pathname
      * @return mixed
      */

+ 0 - 14
application/admin/command/Addon/stubs/addon.stub

@@ -51,18 +51,4 @@ class {%addonClassName%} extends Addons
         return true;
     }
 
-    /**
-     * 实现钩子方法
-     * @return mixed
-     */
-    public function testhook($param)
-    {
-        // 调用钩子时候的参数信息
-        print_r($param);
-        // 当前插件的配置信息,配置信息存在当前目录的config.php文件中,见下方
-        print_r($this->getConfig());
-        // 可以返回模板,模板文件默认读取的为插件目录中的文件。模板名不能为空!
-        //return $this->fetch('view/info');
-    }
-
 }

+ 2 - 2
application/admin/command/Addon/stubs/info.stub

@@ -1,7 +1,7 @@
 name = {%name%}
 title = 插件名称{%name%}
-intro = FastAdmin插件
+intro = 插件介绍
 author = yourname
 website = https://www.fastadmin.net
 version = 1.0.0
-state = 1
+state = 1

File diff suppressed because it is too large
+ 150 - 13
application/admin/command/Crud.php


+ 1 - 1
application/admin/command/Crud/stubs/add.stub

@@ -4,7 +4,7 @@
     <div class="form-group layer-footer">
         <label class="control-label col-xs-12 col-sm-2"></label>
         <div class="col-xs-12 col-sm-8">
-            <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
+            <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
             <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
         </div>
     </div>

+ 1 - 1
application/admin/command/Crud/stubs/edit.stub

@@ -4,7 +4,7 @@
     <div class="form-group layer-footer">
         <label class="control-label col-xs-12 col-sm-2"></label>
         <div class="col-xs-12 col-sm-8">
-            <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
+            <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
             <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
         </div>
     </div>

+ 20 - 0
application/admin/command/Crud/stubs/html/fieldlist-template.stub

@@ -0,0 +1,20 @@
+
+            <table class="table fieldlist" data-name="{%fieldName%}" data-template="{%fieldName%}tpl">
+                <tr>
+                    {%theadList%}
+                    <td width="90">{:__('Operate')}</td>
+                </tr>
+                <tr><td colspan="{%colspan%}">
+                <a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a>
+                <textarea name="{%fieldName%}" class="form-control hide" cols="30" rows="5">{%fieldValue%}</textarea>
+                </td></tr>
+            </table>
+            <script type="text/html" id="{%fieldName%}tpl">
+                <tr>
+                    {%tbodyList%}
+                    <td width="90">
+                        <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
+                        <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>
+                    </td>
+                </tr>
+            </script>

+ 2 - 2
application/admin/command/Crud/stubs/javascript.stub

@@ -21,7 +21,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
             table.bootstrapTable({
                 url: $.fn.bootstrapTable.defaults.extend.index_url,
                 pk: '{%pk%}',
-                sortName: '{%order%}',
+                sortName: '{%order%}',{%fixedColumnsJs%}
                 columns: [
                     [
                         {%javascriptList%}
@@ -45,4 +45,4 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
         }
     };
     return Controller;
-});
+});

+ 7 - 2
application/admin/command/Install.php

@@ -162,6 +162,10 @@ class Install extends Command
         if (!preg_match("/^[\S]{6,16}$/", $adminPassword)) {
             throw new Exception(__('Please input correct password'));
         }
+        $weakPasswordArr = ['123456', '12345678', '123456789', '654321', '111111', '000000', 'password', 'qwerty', 'abc123', '1qaz2wsx'];
+        if (in_array($adminPassword, $weakPasswordArr)) {
+            throw new Exception(__('Password is too weak'));
+        }
         if ($siteName == '' || preg_match("/fast" . "admin/i", $siteName)) {
             throw new Exception(__('Please input correct website'));
         }
@@ -230,18 +234,19 @@ class Install extends Command
             throw new Exception(__('The current permissions are insufficient to write the file %s', 'application/config.php'));
         }
 
+        $avatar = request()->domain() . '/assets/img/avatar.png';
         // 变更默认管理员密码
         $adminPassword = $adminPassword ? $adminPassword : Random::alnum(8);
         $adminEmail = $adminEmail ? $adminEmail : "admin@admin.com";
         $newSalt = substr(md5(uniqid(true)), 0, 6);
         $newPassword = md5(md5($adminPassword) . $newSalt);
-        $data = ['username' => $adminUsername, 'email' => $adminEmail, 'password' => $newPassword, 'salt' => $newSalt];
+        $data = ['username' => $adminUsername, 'email' => $adminEmail, 'avatar' => $avatar, 'password' => $newPassword, 'salt' => $newSalt];
         $instance->name('admin')->where('username', 'admin')->update($data);
 
         // 变更前台默认用户的密码,随机生成
         $newSalt = substr(md5(uniqid(true)), 0, 6);
         $newPassword = md5(md5(Random::alnum(8)) . $newSalt);
-        $instance->name('user')->where('username', 'admin')->update(['password' => $newPassword, 'salt' => $newSalt]);
+        $instance->name('user')->where('username', 'admin')->update(['avatar' => $avatar, 'password' => $newPassword, 'salt' => $newSalt]);
 
         // 修改后台入口
         $adminName = '';

File diff suppressed because it is too large
+ 5 - 2
application/admin/command/Install/fastadmin.sql


File diff suppressed because it is too large
+ 4 - 4
application/admin/command/Install/install.html


+ 1 - 0
application/admin/command/Install/zh-cn.php

@@ -24,6 +24,7 @@ return [
     'Please input correct database'                                                                         => '请输入正确的数据库名',
     'Please input correct username'                                                                         => '用户名只能由3-12位数字、字母、下划线组合',
     'Please input correct password'                                                                         => '密码长度必须在6-16位之间,不能包含空格',
+    'Password is too weak'                                                                                  => '密码太简单,请重新输入',
     'The two passwords you entered did not match'                                                           => '两次输入的密码不一致',
     'Please input correct website'                                                                          => '网站名称输入不正确',
     'The current version %s is too low, please use PHP 7.1 or higher'                                       => '当前版本%s过低,请使用PHP7.1以上版本',