Bläddra i källkod

added admin-only button to feedback

Akira Laine 9 år sedan
förälder
incheckning
62a7c8e1d2

+ 5 - 1
app/client/scripts/events.js

@@ -227,7 +227,11 @@ Template.feedback.events({
     },
     "click .upvote": function(){
         var message = $(this).parent("card").prevObject[0].message;
-        Meteor.call("upvoteFeedback", message)
+        Meteor.call("upvoteFeedback", message);
+    },
+    "click #delete": function(){
+        var message = $(this).parent("card").prevObject[0].message;
+        Meteor.call("deleteFeedback", message);
     }
 });
 

+ 16 - 0
app/client/stylesheets/app.css

@@ -89,3 +89,19 @@ main p.flow-text{
     color: #00C853;
     cursor: pointer;
 }
+
+.upvote-text{
+    display: inline;
+    float: right;
+    font-size: 1.5em;
+    margin-top: 3px;
+    margin-right: 10px;
+    color: white;
+}
+
+.edit{
+    position: initial;
+    float: right;
+    margin-top: -3em;
+    margin-right: -2em;
+}

+ 15 - 1
app/client/templates/feedback.html

@@ -8,11 +8,25 @@
                 <div class="col s12 m4">
                     <div class="card blue-grey darken-1">
                         <div class="card-content white-text">
+                            {{#if isAdmin}}
+                                <div class="fixed-action-btn horizontal edit" style="bottom: 45px; right: 24px;">
+                                    <a class="btn-floating btn-large red">
+                                        <i class="large material-icons">more_vert</i>
+                                    </a>
+                                    <ul>
+                                        <li><a id="edit" class="btn-floating green"><i
+                                                class="material-icons">create</i></a></li>
+                                        <li><a id="delete" class="btn-floating red"><i class="material-icons">delete</i></a>
+                                        </li>
+                                    </ul>
+                                </div>
+                            {{/if}}
                             <p>{{message}}</p>
                         </div>
                         <div class="card-action">
                             <a class="lowercase" href="/u/{{username}}">{{username}}</a>
-                            {{upvotes}}<i class="material-icons upvote">thumb_up</i>
+                            <i class="material-icons upvote">thumb_up</i>
+                            <p class="upvote-text">{{upvotes}}</p>
                         </div>
                     </div>
                 </div>

+ 9 - 1
app/database/schemas.js

@@ -174,8 +174,16 @@ Schemas.Feedback = new SimpleSchema({
         defaultValue: 0,
         min: 0,
         label: "Number of upvotes for a particualar feedback"
+    },
+    "messages.$.upvotedBy": {
+        type: Array,
+        label: "Array of users who have upvoted a feedback"
+    },
+    "messages.$.upvotedBy.$": {
+        type: String,
+        label: "Username of user who upvoted a feedback"
     }
-})
+});
 
 Schemas.Room = new SimpleSchema({
     display: {

+ 17 - 4
app/server/server.js

@@ -1153,15 +1153,28 @@ Meteor.methods({
                 if (res.content.indexOf("true") > -1) {
                     return true;
                 } else {
-                    Feedback.update({}, {$push: {messages: {username: Meteor.user().profile.username, message: message, upvotes: 0}}});
+                    Feedback.update({}, {$push: {messages: {username: Meteor.user().profile.username, message: message, upvotes: 0, upvotedBy: []}}});
                 }
             });
         }
     },
     upvoteFeedback: function(message){
-        if(!isBanned()){
-            //Check if the upvotedBy array in the feedback object contains user, if so, pull. Else, push.
-            Feedback.update({"messages.message": message}, {$inc: {"messages.$.upvotes": 1}});
+        if(Meteor.userId() && !isBanned()){
+            console.log(Feedback.findOne({"messages.message": message}, {_id: 0, 'messages.$': 1}).messages[0].upvotedBy.indexOf(Meteor.user().profile.username));
+            if(Feedback.findOne({"messages.message": message}, {_id: 0, 'messages.$': 1}).messages[0].upvotedBy.indexOf(Meteor.user().profile.username) === -1){
+                Feedback.update({"messages.message": message}, {$push: {"messages.$.upvotedBy": Meteor.user().profile.username}});
+                Feedback.update({"messages.message": message}, {$inc: {"messages.$.upvotes": 1}});
+            } else{
+                Feedback.update({"messages.message": message}, {$pull: {"messages.$.upvotedBy": Meteor.user().profile.username}});
+                Feedback.update({"messages.message": message}, {$inc: {"messages.$.upvotes": -1}});
+            }
+        }
+    },
+    deleteFeedback: function(message){
+        if(isAdmin() && !isBanned()){
+            //Feedback.findOne({"messages.message": "This site rocks"}, {_id: 0, 'messages.$': 1}).messages[0].remove();
+        } else {
+            throw new Meteor.Error(403, "Invalid permissions.");
         }
     }
 });