Sotaro KARASAWA 10 лет назад
Родитель
Сommit
57dffb1ef2

+ 49 - 0
lib/routes/admin.js

@@ -168,6 +168,55 @@ module.exports = function(crowi, app) {
     });
   };
 
+  actions.search = {};
+  actions.search.index = function(req, res) {
+    var search = crowi.getSearcher();
+    if (!search) {
+      return res.redirect('/admin');
+    }
+
+    return res.render('admin/search', {
+    });
+  };
+
+  actions.search.buildIndex = function(req, res) {
+    var search = crowi.getSearcher();
+    if (!search) {
+      return res.redirect('/admin');
+    }
+
+    search.deleteIndex()
+      .then(function(data) {
+        if (!data.errors) {
+          debug('Index deleted.');
+        }
+        return search.buildIndex();
+      })
+      .then(function(data) {
+        if (!data.errors) {
+          debug('Index created.');
+        }
+        return search.addAllPages();
+      })
+      .then(function(data) {
+        if (!data.errors) {
+          debug('Data is successfully indexed.');
+        } else {
+          debug('Data index error.', data);
+        }
+
+        //return res.json(ApiResponse.success({}));
+        req.flash('successMessage', 'Successfully re-build index.');
+        return res.redirect('/admin/search');
+      })
+      .catch(function(err) {
+        debug('Error', err);
+        req.flash('errorMessage', 'Error');
+        return res.redirect('/admin/search');
+        //return res.json(ApiResponse.error(err));
+      });
+  };
+
   actions.user = {};
   actions.user.index = function(req, res) {
     var page = parseInt(req.query.page) || 1;

+ 4 - 0
lib/routes/index.js

@@ -45,6 +45,10 @@ module.exports = function(crowi, app) {
   app.post('/_api/admin/settings/google', loginRequired(crowi, app) , middleware.adminRequired() , form.admin.google, admin.api.appSetting);
   app.post('/_api/admin/settings/fb'    , loginRequired(crowi, app) , middleware.adminRequired() , form.admin.fb , admin.api.appSetting);
 
+  // search admin
+  app.get('/admin/search'              , loginRequired(crowi, app) , middleware.adminRequired() , admin.search.index);
+  app.post('/admin/search/build'       , loginRequired(crowi, app) , middleware.adminRequired() , admin.search.buildIndex);
+
   // notification admin
   app.get('/admin/notification'              , loginRequired(crowi, app) , middleware.adminRequired() , admin.notification.index);
   app.post('/admin/notification/slackSetting', loginRequired(crowi, app) , middleware.adminRequired() , form.admin.slackSetting, admin.notification.slackSetting);

+ 1 - 6
lib/views/admin/app.html

@@ -28,12 +28,7 @@
 
   <div class="row">
     <div class="col-md-3">
-      <ul class="nav nav-pills nav-stacked">
-        <li><a href="/admin"><i class="fa fa-cube"></i> Wiki管理トップ</a></li>
-        <li class="active"><a href="/admin/app"><i class="fa fa-gears"></i> アプリ設定</a></li>
-        <li><a href="/admin/notification"><i class="fa fa-bell"></i> 通知設定</a></li>
-        <li><a href="/admin/users"><i class="fa fa-users"></i> ユーザー管理</a></li>
-      </ul>
+      {% include './widget/menu.html' with {current: 'app'} %}
     </div>
     <div class="col-md-9">
 

+ 2 - 7
lib/views/admin/index.html

@@ -12,7 +12,7 @@
 
 {% block content_main %}
 <div class="content-main">
-  
+
   {% set emessage = req.flash('errorMessage') %}
   {% if emessage.length %}
   <div class="alert alert-danger">
@@ -22,12 +22,7 @@
 
   <div class="row">
     <div class="col-md-3">
-      <ul class="nav nav-pills nav-stacked">
-        <li class="active"><a href="/admin"><i class="fa fa-cube"></i> Wiki管理トップ</a></li>
-        <li><a href="/admin/app"><i class="fa fa-gears"></i> アプリ設定</a></li>
-        <li><a href="/admin/notification"><i class="fa fa-bell"></i> 通知設定</a></li>
-        <li><a href="/admin/users"><i class="fa fa-users"></i> ユーザー管理</a></li>
-      </ul>
+      {% include './widget/menu.html' %}
     </div>
     <div class="col-md-9">
       <p>

+ 1 - 6
lib/views/admin/notification.html

@@ -14,12 +14,7 @@
 <div class="content-main">
   <div class="row">
     <div class="col-md-3">
-      <ul class="nav nav-pills nav-stacked">
-        <li><a href="/admin"><i class="fa fa-cube"></i> Wiki管理トップ</a></li>
-        <li><a href="/admin/app"><i class="fa fa-gears"></i> アプリ設定</a></li>
-        <li class="active"><a href="/admin/notification"><i class="fa fa-bell"></i> 通知設定</a></li>
-        <li><a href="/admin/users"><i class="fa fa-users"></i> ユーザー管理</a></li>
-      </ul>
+      {% include './widget/menu.html' with {current: 'notification'} %}
     </div>
     <div class="col-md-9">
 

+ 67 - 0
lib/views/admin/search.html

@@ -0,0 +1,67 @@
+{% extends '../layout/admin.html' %}
+
+{% block html_title %}検索管理 · {{ path }}{% endblock %}
+
+{% block content_head %}
+<div class="header-wrap">
+  <header id="page-header">
+    <h1 class="title" id="">検索管理</h1>
+  </header>
+</div>
+{% endblock %}
+
+{% block content_main %}
+<div class="content-main">
+  <div class="row">
+    <div class="col-md-3">
+      {% include './widget/menu.html' with {current: 'search'} %}
+    </div>
+    <div class="col-md-9">
+
+      {% set smessage = req.flash('successMessage') %}
+      {% if smessage.length %}
+      <div class="alert alert-success">
+        {% for e in smessage %}
+          {{ e }}<br>
+        {% endfor %}
+      </div>
+      {% endif %}
+
+      {% set emessage = req.flash('errorMessage') %}
+      {% if emessage.length %}
+      <div class="alert alert-danger">
+        {% for e in emessage %}
+        {{ e }}<br>
+        {% endfor %}
+      </div>
+      {% endif %}
+
+      <form action="/admin/search/build" method="post" class="form-horizontal" id="appSettingForm" role="form">
+      <fieldset>
+        <legend>Index Build</legend>
+        <div class="form-group">
+          <label for="" class="col-xs-3 control-label">Index Build</label>
+          <div class="col-xs-6">
+            <button type="submit" class="btn btn-primary">Build Now</button>
+            <p class="help-block">
+              Force rebuild index.<br>
+              Click "Build Now" to delete and create mapping file and add all pages.<br>
+              This may take a while.
+            </p>
+          </div>
+        </div>
+      </fieldset>
+      </form>
+
+    </div>
+  </div>
+
+</div>
+{% endblock content_main %}
+
+{% block content_footer %}
+{% endblock content_footer %}
+
+
+
+

+ 1 - 6
lib/views/admin/users.html

@@ -28,12 +28,7 @@
 
   <div class="row">
     <div class="col-md-3">
-      <ul class="nav nav-pills nav-stacked">
-        <li><a href="/admin"><i class="fa fa-cube"></i> Wiki管理トップ</a></li>
-        <li><a href="/admin/app"><i class="fa fa-gears"></i> アプリ設定</a></li>
-        <li><a href="/admin/notification"><i class="fa fa-bell"></i> 通知設定</a></li>
-        <li class="active"><a href="/admin/users"><i class="fa fa-users"></i> ユーザー管理</a></li>
-      </ul>
+      {% include './widget/menu.html' with {current: 'user'} %}
     </div>
 
     <div class="col-md-9">

+ 12 - 0
lib/views/admin/widget/menu.html

@@ -0,0 +1,12 @@
+{% if not current %}
+  {% set current = 'index' %}
+{% endif  %}
+<ul class="nav nav-pills nav-stacked">
+  <li class="{% if current == 'index'%}active{% endif %}"><a href="/admin"><i class="fa fa-cube"></i> Wiki管理トップ</a></li>
+  <li class="{% if current == 'app'%}active{% endif %}"><a href="/admin/app"><i class="fa fa-gears"></i> アプリ設定</a></li>
+  <li class="{% if current == 'notification'%}active{% endif %}"><a href="/admin/notification"><i class="fa fa-bell"></i> 通知設定</a></li>
+  <li class="{% if current == 'user'%}active{% endif %}"><a href="/admin/users"><i class="fa fa-users"></i> ユーザー管理</a></li>
+  {% if searchConfigured() %}
+  <li class="{% if current == 'search'%}active{% endif %}"><a href="/admin/search"><i class="fa fa-search"></i> 検索管理</a></li>
+  {% endif %}
+</ul>