OSDN Git Service

implement Users Manager
authorhylom <hylom@users.sourceforge.jp>
Mon, 1 May 2017 12:06:21 +0000 (21:06 +0900)
committerhylom <hylom@users.sourceforge.jp>
Mon, 1 May 2017 12:06:21 +0000 (21:06 +0900)
src/newslash_web/lib/Newslash/Plugin/TT2Renderer.pm
src/newslash_web/lib/Newslash/Web.pm
src/newslash_web/lib/Newslash/Web/Controller/Admin/Users.pm [new file with mode: 0644]
src/newslash_web/public/js/users-manager.js [new file with mode: 0644]
src/newslash_web/templates/admin/users/index.html.tt2 [new file with mode: 0644]

index ab13251..a76d608 100644 (file)
@@ -146,7 +146,7 @@ sub register {
                                  for my $key (keys %{$app->config}) {
                                      $vars->{$key} = $app->config->{$key};
                                  }
-                                 $vars->{C} = $c;
+                                 #$vars->{Controller} = $c;
                                  $vars->{the_path} = $c->url_for;
 
                                 my $process_opts = {};
index 6434efc..d5afc4e 100644 (file)
@@ -178,6 +178,8 @@ sub startup {
     $admin->get('/css')->to('admin-css#edit');
     $admin->get('/story/edit')->to('admin-story#edit');
 
+    $admin->get('/users')->to('admin-users#index');
+
     $admin->get('/sidebar')->to('admin-sidebar#index');
     $admin->post('/sidebar/update')->to('admin-sidebar#update');
     $admin->post('/sidebar/delete')->to('admin-sidebar#delete');
diff --git a/src/newslash_web/lib/Newslash/Web/Controller/Admin/Users.pm b/src/newslash_web/lib/Newslash/Web/Controller/Admin/Users.pm
new file mode 100644 (file)
index 0000000..5af7c72
--- /dev/null
@@ -0,0 +1,14 @@
+package Newslash::Web::Controller::Admin::Users;
+use Mojo::Base 'Mojolicious::Controller';
+use Mojo::Util qw(dumper);
+
+sub index {
+    my $c = shift;
+    my $uid = $c->param('uid') || 0;
+    my $nickname = $c->param('nickname') || '';
+    $c->render(uid => $uid, nickname => $nickname);
+}
+
+
+1;
+
diff --git a/src/newslash_web/public/js/users-manager.js b/src/newslash_web/public/js/users-manager.js
new file mode 100644 (file)
index 0000000..ceb790d
--- /dev/null
@@ -0,0 +1,63 @@
+/* users-manager.js */
+const usersManager = {vm: {}};
+
+usersManager.run = function run (params) {
+  const data = {
+    message: '',
+    userName: "",
+    user: {
+      uid: "",
+      nickname: "",
+      realemail: "",
+      homepage: "",
+      sig: "",
+      seclev: 0,
+      author: 0
+    },
+    urls: {
+      get: '/api/v1/user',
+    },
+    showProfile: false,
+  };
+  const computed = {
+    isAuthor: function () {return this.user.author == 1;},
+  };
+
+  const methods = {
+    getUserInfo: getUserInfo,
+  };
+
+  function getUserInfo() {
+    var url;
+    if (/^\d+$/.test(this.userName)) {
+      url = this.urls.get + "?uid=" + this.userName;
+    } else {
+      url = this.urls.get + "?nickname=" + this.userName;
+    }
+    this.$http.get(url).then(
+      (resp) => { // success
+        this.user = resp.body.item || {};
+      },
+      (resp) => { // fail
+        this.message = resp.body.message || "failed to get items";
+      }
+    );
+  }
+
+  function created() {
+    if (params.uid) {
+      this.userName = params.uid;
+      this.getUserInfo();
+    } else if (params.nickname) {
+      this.userName = params.nickname;
+      this.getUserInfo();
+    }
+  }
+
+  this.vm = new Vue({el: params.el,
+                     data: data,
+                     computed: computed,
+                     methods: methods,
+                     created: created,
+                    });
+};
diff --git a/src/newslash_web/templates/admin/users/index.html.tt2 b/src/newslash_web/templates/admin/users/index.html.tt2
new file mode 100644 (file)
index 0000000..266faa3
--- /dev/null
@@ -0,0 +1,80 @@
+[% WRAPPER common/layout %]
+
+<div class="app-frame" id="users-manager">
+  <h2>Users Manager</h2>
+
+  <form class="users-search form-horizontal">
+    <div class="form-group">
+      <label for="user-name" class="col-sm-2 control-label">User Search:</label>
+      <div class="col-sm-8">
+        <input type="input" class="form-control" id="user-name" placeholder="nickname, uid"
+               v-model="userName" v-on:keyup.enter="getUserInfo">
+      </div>
+      <div class="col-sm-2">
+        <button type="submit" class="btn btn-default" v-on:click.prevent="getUserInfo">Search</button>
+      </div>
+    </div>
+  </form>
+
+  <div class="basic-info" v-show="user.uid">
+    <h3>
+      Basic informations:
+    </h3>
+    <dl>
+      <dt>uid:</dt>
+      <dd v-text="user.uid"></dd>
+      <dt>nickname:</dt>
+      <dd v-text="user.nickname"></dd>
+      <dt>seclev:</dt>
+      <dd v-text="user.seclev"></dd>
+      <dt>author:</dt>
+      <dd v-if="isAuthor">true</dd>
+      <dd v-else>false</dd>
+    </dl>
+  </div>
+
+  <div class="basic-info" v-show="user.uid">
+    <h3 v-on:click="showProfile=!showProfile">
+      <span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true" v-if="showProfile"></span>
+      <span class="glyphicon glyphicon-triangle-right" aria-hidden="true" v-else></span>
+      Basic profile:
+    </h3>
+    <form class="user-info form-horizontal" v-show="showProfile">
+      <div class="item form-group">
+        <label class="col-sm-2 control-label" for="realemail">email:</label>
+        <div class="col-sm-10">
+          <input type="email" id="realemail" class="form-control" v-model="user.realemail"></input>
+        </div>
+      </div>
+
+      <div class="item form-group">
+        <label class="col-sm-2 control-label" for="homepage">homgepage:</label>
+        <div class="col-sm-10">
+          <input type="input" id="homgepage" class="form-control" v-model="user.homepage"></input>
+        </div>
+      </div>
+
+      <div class="item form-group">
+        <label class="col-sm-2 control-label" for="sig">sig:</label>
+        <div class="col-sm-10">
+          <textarea id="sig" class="form-control" v-model="user.sig"></textarea>
+        </div>
+      </div>
+
+    </form>
+  </div><!-- .basic-info -->
+
+  
+</div>
+
+</div>
+
+<script src="/js/users-manager.js" ></script>
+<script>
+  usersManager.run({ el: '#users-manager',
+  [%- IF uid %] uid: [% uid %],[% END -%]
+  [%- IF nickname %] nickname: "[% nickname %]",[% END -%]
+  });
+</script>
+
+[% END %]