Просмотр исходного кода

Notify user if content is stale

Daisuke Takahashi 6 лет назад
Родитель
Сommit
29a14ebea5

+ 3 - 1
resource/locales/en-US/translation.json

@@ -251,7 +251,9 @@
       "redirected": "You are redirected from <code>%s</code>",
       "duplicated": "This page was duplicated from <code>%s</code>",
       "unlinked": "Redirect pages to this page have been deleted.",
-      "restricted": "Access to this page is restricted"
+      "restricted": "Access to this page is restricted",
+      "stale": "More than {{years}} year has passed since last update.",
+      "stale_plural": "More than {years}} years has passed since last update."
     }
   },
 

+ 2 - 1
resource/locales/ja/translation.json

@@ -250,7 +250,8 @@
       "redirected": "リダイレクト元 >> <code>%s</code>",
       "duplicated": "このページは <code>%s</code> から複製されました。",
       "unlinked": "このページへのリダイレクトは削除されました。",
-      "restricted": "このページの閲覧は制限されています"
+      "restricted": "このページの閲覧は制限されています",
+      "stale": "このページは最終更新日から{{years}}年以上が経過しています。"
     }
   },
 

+ 4 - 0
src/server/models/page.js

@@ -488,6 +488,10 @@ module.exports = function(crowi) {
     }
   };
 
+  pageSchema.methods.isStale = function() {
+    return Math.max(0, new Date(new Date() - this.updatedAt).getUTCFullYear() - 1970)
+  }
+
 
   pageSchema.statics.updateCommentCount = function(pageId) {
     validateCrowi();

+ 13 - 0
src/server/views/widget/page_alerts.html

@@ -13,6 +13,19 @@
       </p>
     {% endif %}
 
+    {% if page && page.updatedAt && page.isStale() > 0 %}
+    {% if page.isStale() == 1 %}
+    <div class="alert alert-info">
+    {% elseif page.isStale() == 2 %}
+    <div class="alert alert-warning">
+    {% else %}
+    <div class="alert alert-danger">
+    {% endif %}
+      <i class="icon-fw icon-hourglass"></i>
+      <strong>{{ t('page_page.notice.stale', { years: page.isStale() }) }}</strong>
+    </div>
+    {% endif %}
+
     {% if redirectFrom or req.query.renamed or req.query.redirectFrom %}
     <div class="alert alert-info alert-moved d-flex align-items-center justify-content-between">
       <span>