Compare commits
42 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d9d4a4dfc | ||
|
|
626ba221e0 | ||
|
|
0cebefa406 | ||
|
|
2819989b72 | ||
|
|
8c6eb8ac17 | ||
|
|
72a6dcc54a | ||
|
|
4e1b6b430b | ||
|
|
f90257fe73 | ||
|
|
9b64c2c6d9 | ||
|
|
170fba42db | ||
|
|
12fb7584bc | ||
|
|
a8ffba8f8b | ||
|
|
fcdcbe2514 | ||
|
|
496e08393a | ||
|
|
b225dc57b2 | ||
|
|
b84db2bc87 | ||
|
|
43cee7d2e0 | ||
|
|
bcc1f192f5 | ||
|
|
5e4e6583bb | ||
|
|
6d70fd3309 | ||
|
|
b73ba5d739 | ||
|
|
91169ab103 | ||
|
|
65f7c3c97f | ||
|
|
1e267a64fb | ||
|
|
9837f12b59 | ||
|
|
d2de01100a | ||
|
|
4619306744 | ||
|
|
1b8744abdb | ||
|
|
617890c209 | ||
|
|
79ad8b201e | ||
|
|
b99e62b7e7 | ||
|
|
0c939f044c | ||
|
|
deba1b76e3 | ||
|
|
e2a16f3ae6 | ||
|
|
a250c411eb | ||
|
|
4105f1c61f | ||
|
|
1316d7ca03 | ||
|
|
e7463524af | ||
|
|
a24d26dd7c | ||
|
|
db3aea185b | ||
|
|
2c02a797b8 | ||
|
|
1b4a270038 |
1
Gemfile
1
Gemfile
@@ -15,6 +15,7 @@ gem 'activerecord-session_store'
|
||||
gem 'highlight_js-rails', github: 'RedstonerServer/highlight_js-rails'
|
||||
gem 'kaminari', github: 'jomo/kaminari', branch: 'patch-2' # pagination
|
||||
gem 'jquery-textcomplete-rails', github: 'RedstonerServer/jquery-textcomplete-rails' # @mentions
|
||||
gem 'actionpack-action_caching', github: 'antulik/actionpack-action_caching', ref: '8c6e52c69315d67437f480da5dce4b7c8737fb32'
|
||||
|
||||
# Gems used only for assets and not required
|
||||
# in production environments by default.
|
||||
|
||||
@@ -14,6 +14,14 @@ GIT
|
||||
railties (>= 3.2.0)
|
||||
sass-rails (>= 3.2.0)
|
||||
|
||||
GIT
|
||||
remote: git://github.com/antulik/actionpack-action_caching.git
|
||||
revision: 8c6e52c69315d67437f480da5dce4b7c8737fb32
|
||||
ref: 8c6e52c69315d67437f480da5dce4b7c8737fb32
|
||||
specs:
|
||||
actionpack-action_caching (1.2.0)
|
||||
actionpack (>= 4.0.0, < 6)
|
||||
|
||||
GIT
|
||||
remote: git://github.com/jomo/kaminari.git
|
||||
revision: e49066e94d77a6abb03a0819f3c4b0cc6923cb70
|
||||
@@ -223,6 +231,7 @@ PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
actionpack-action_caching!
|
||||
activerecord-session_store
|
||||
bcrypt
|
||||
better_errors
|
||||
|
||||
@@ -88,5 +88,45 @@ $(function() {
|
||||
}], {
|
||||
debounce: 300
|
||||
});
|
||||
$('.md_editor .field_container_user .editor_field').textcomplete([{
|
||||
// match up to 2 words (everything except some special characters)
|
||||
// each word can have up to 16 characters (up to 32 total)
|
||||
// words must be separated by a single space
|
||||
match: /(^|\s)([^!"§$%&\/()=?.,;+*@\s]{1,16})$/,
|
||||
search: function (text, callback, match) {
|
||||
console.log("Searching " + text);
|
||||
text = text.toLowerCase();
|
||||
$.ajax("/users/suggestions", {
|
||||
type: "post",
|
||||
data: {name: text},
|
||||
dataType: "json",
|
||||
headers: {
|
||||
"X-CSRF-Token": $('meta[name="csrf-token"]').attr("content")
|
||||
},
|
||||
success: function(data) {
|
||||
callback(data);
|
||||
},
|
||||
error: function(xhr, status, err) {
|
||||
console.error(err);
|
||||
callback([]);
|
||||
}
|
||||
});
|
||||
},
|
||||
template: function(user) {
|
||||
var name = user[0];
|
||||
var ign = user[1];
|
||||
if (name != ign) {
|
||||
return name + " <small>(" + ign + ")</small>";
|
||||
} else {
|
||||
return ign;
|
||||
}
|
||||
},
|
||||
cache: true,
|
||||
replace: function (word) {
|
||||
return "$1" + word[1] + " ";
|
||||
}
|
||||
}], {
|
||||
debounce: 300
|
||||
});
|
||||
|
||||
});
|
||||
105
app/assets/stylesheets/dark.css.scss
Normal file
105
app/assets/stylesheets/dark.css.scss
Normal file
@@ -0,0 +1,105 @@
|
||||
body {
|
||||
background-color:rgb(50, 50, 50);
|
||||
text-shadow:none !important;
|
||||
color:rgb(190, 190, 190) !important;
|
||||
}
|
||||
::selection {
|
||||
background-color:rgb(100, 150, 255);
|
||||
}
|
||||
a {
|
||||
color:rgb(203, 75, 22);
|
||||
border-color:black !important;
|
||||
}
|
||||
a:hover {
|
||||
color:rgb(215, 100, 40);
|
||||
}
|
||||
#main-content {
|
||||
border-color:black !important;
|
||||
padding:30px 100px;
|
||||
box-shadow:none;
|
||||
}
|
||||
#main-content-scroll {
|
||||
padding: 131px 100px;
|
||||
border: 1px solid #000;
|
||||
box-shadow: 0 0 5px #000;
|
||||
}
|
||||
hr {
|
||||
background-color:black !important;
|
||||
border-color:black !important;
|
||||
}
|
||||
code {
|
||||
background-color:rgb(30, 30, 30) !important;
|
||||
border-color:black !important;
|
||||
color:white !important;
|
||||
}
|
||||
#head_top {
|
||||
width:100%;
|
||||
z-index:100;
|
||||
}
|
||||
#head_scroll {
|
||||
@extend #head_top;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
div#userbar {
|
||||
background-color:rgb(90, 90, 90) !important;
|
||||
border-color:black !important;
|
||||
color:white !important;
|
||||
text-shadow:none !important;
|
||||
}
|
||||
#head a {
|
||||
text-shadow:none !important;
|
||||
color:white !important;
|
||||
}
|
||||
#head a:hover {
|
||||
color:rgb(190, 190, 190) !important;
|
||||
}
|
||||
.header {
|
||||
background-color:rgb(0, 0, 0);
|
||||
border:none !important;
|
||||
}
|
||||
input[type="email"], input[type="text"], input[type="password"] {
|
||||
background-color:rgb(110, 110, 110) !important;
|
||||
color:white !important;
|
||||
}
|
||||
::placeholder {
|
||||
color:lightgray;
|
||||
}
|
||||
.item {
|
||||
background-color:rgb(40, 40, 40) !important;
|
||||
border-color:black !important;
|
||||
}
|
||||
.item-group {
|
||||
border-color:black !important;
|
||||
}
|
||||
div.header {
|
||||
background-color:rgb(20, 20, 20) !important;
|
||||
}
|
||||
.avatar {
|
||||
border-color:black !important;
|
||||
}
|
||||
.items {
|
||||
border-color:black !important;
|
||||
}
|
||||
.markdown-help {
|
||||
background-color:rgb(90, 90, 90);
|
||||
color:white;
|
||||
border-color:black;
|
||||
}
|
||||
textarea {
|
||||
background-color:rgb(100, 100, 100);
|
||||
color:white;
|
||||
}
|
||||
.headline {
|
||||
border-color:black !important;
|
||||
}
|
||||
.role {
|
||||
opacity:0.7 !important;
|
||||
}
|
||||
.label {
|
||||
opacity:0.7 !important;
|
||||
}
|
||||
.notice {
|
||||
color:white;
|
||||
}
|
||||
@@ -4,12 +4,12 @@
|
||||
|
||||
th, td {
|
||||
// force tables into line-mode
|
||||
// it's a bit ugly, but probably the best
|
||||
// it''s a bit ugly, but probably the best
|
||||
// solution for small screens
|
||||
display: block;
|
||||
}
|
||||
|
||||
#head {
|
||||
#head_top {
|
||||
#menu {
|
||||
#logo {
|
||||
display: none;
|
||||
@@ -17,10 +17,19 @@
|
||||
}
|
||||
}
|
||||
|
||||
#head_scroll {
|
||||
@extend #head_top;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
#main-content {
|
||||
padding: 30px 5px;
|
||||
}
|
||||
|
||||
#main-content-scroll {
|
||||
padding: 181px 5px;
|
||||
}
|
||||
|
||||
.front-page {
|
||||
h1 {
|
||||
font-size: 2em !important;
|
||||
|
||||
@@ -80,7 +80,7 @@ a {
|
||||
}
|
||||
}
|
||||
|
||||
#head {
|
||||
#head_top {
|
||||
background: #3f3f3f;
|
||||
|
||||
#menu {
|
||||
@@ -181,6 +181,13 @@ a {
|
||||
}
|
||||
}
|
||||
|
||||
#head_scroll {
|
||||
@extend #head_top;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.front-page {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
@@ -260,6 +267,11 @@ span.no-about {
|
||||
}
|
||||
}
|
||||
|
||||
#main-content-scroll {
|
||||
@extend #main-content;
|
||||
padding: 131px 100px;
|
||||
}
|
||||
|
||||
#user-info {
|
||||
.user-avatar {
|
||||
margin-bottom: 30px;
|
||||
@@ -437,18 +449,14 @@ blockquote p {
|
||||
color: #ddd !important;
|
||||
}
|
||||
}
|
||||
|
||||
.donor {
|
||||
color: #fff;
|
||||
background: #f60 !important;
|
||||
margin-left: 2px !important;
|
||||
}
|
||||
|
||||
.ign {
|
||||
display: block;
|
||||
color: #000;
|
||||
font-style: italic;
|
||||
}
|
||||
.badge {
|
||||
margin-left: 2px !important;
|
||||
}
|
||||
}
|
||||
|
||||
#online-users {
|
||||
@@ -458,6 +466,7 @@ blockquote p {
|
||||
}
|
||||
|
||||
.md_editor {
|
||||
|
||||
.field_container {
|
||||
position: relative;
|
||||
|
||||
@@ -465,7 +474,7 @@ blockquote p {
|
||||
position: absolute;
|
||||
top: 1em;
|
||||
left: 1em;
|
||||
z-index: 10;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.editor_field {
|
||||
@@ -480,6 +489,10 @@ blockquote p {
|
||||
padding: 4em 1em 1em;
|
||||
}
|
||||
}
|
||||
.field_container_user {
|
||||
.editor_field {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ul.dropdown-menu {
|
||||
@@ -675,6 +688,13 @@ tr.spacer {
|
||||
color: #ddd;
|
||||
}
|
||||
|
||||
&.variable-size {
|
||||
background: #4096ee;
|
||||
@media only screen and (max-width: 500px) {
|
||||
font-size: 9px;
|
||||
}
|
||||
}
|
||||
|
||||
&.blue {
|
||||
background: #4096ee;
|
||||
|
||||
@@ -1027,3 +1047,19 @@ nav.pagination {
|
||||
border-radius: 0.2em;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.searchfield {
|
||||
height:40px;
|
||||
display: inline-block;
|
||||
&.field {
|
||||
width: 300px;
|
||||
}
|
||||
&.btn {
|
||||
margin: 4px 1px 0 0;
|
||||
cursor: default;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
background: #4096ee;
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ class BlogpostsController < ApplicationController
|
||||
before_filter :auth, except: [:index, :show]
|
||||
|
||||
def index
|
||||
@posts = Blogpost.order("created_at desc").page(params[:page]).per(10)
|
||||
@posts = Blogpost.order(id: :desc).page(params[:page]).per(10)
|
||||
end
|
||||
|
||||
def show
|
||||
|
||||
@@ -19,6 +19,19 @@ class ForumgroupsController < ApplicationController
|
||||
def update
|
||||
if admin?
|
||||
@group = Forumgroup.find(params[:id])
|
||||
group_badges = Badgeassociation.where(forumgroup: @group)
|
||||
["read-", "write-"].each_with_index do |p,i|
|
||||
current_badges = group_badges.where(permission: i+1).pluck(:badge_id)
|
||||
params.select{|k,v| k.start_with? p}.each do |k,v|
|
||||
name = k.gsub(p, "")
|
||||
if current_badges.include? (bid = Badge.find_by(name: name).id)
|
||||
current_badges.delete bid
|
||||
else
|
||||
Badgeassociation.create!(badge: Badge.find_by(name: name), forumgroup: @group, permission: i+1)
|
||||
end
|
||||
end
|
||||
current_badges.each {|b| Badgeassociation.find_by(badge_id: b, forumgroup: @group, permission: i+1).delete}
|
||||
end
|
||||
if @group.update_attributes(group_params)
|
||||
flash[:notice] = "Forum group updated"
|
||||
redirect_to @group
|
||||
@@ -43,6 +56,11 @@ class ForumgroupsController < ApplicationController
|
||||
def create
|
||||
if admin?
|
||||
@group = Forumgroup.new(group_params)
|
||||
["read-", "write-"].each_with_index do |p,i|
|
||||
params.select{|k,v| k.start_with? p}.each do |k,v|
|
||||
Badgeassociation.create!(badge: Badge.find_by(name: k.gsub(p, "")), forumgroup: @group, permission: i+1)
|
||||
end
|
||||
end
|
||||
if @group.save
|
||||
flash[:notice] = "Forum group created."
|
||||
redirect_to @group
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class ForumsController < ApplicationController
|
||||
|
||||
before_filter :check_permission, only: [:show, :edit, :update, :destroy]
|
||||
|
||||
def index
|
||||
@@ -10,7 +11,7 @@ class ForumsController < ApplicationController
|
||||
@threads = @forum.forumthreads.select {|f| f.can_read?(current_user) }.to_a
|
||||
@threads.sort_by! do |t|
|
||||
# sticky goes first, then sort by last activity (new replies)
|
||||
[t.sticky ? 0 : 1, -(t.replies.last.try(:created_at) || t.created_at).to_i]
|
||||
[t.sticky ? 0 : 1, -(t.replies.order(:id).last.try(:created_at) || t.created_at).to_i]
|
||||
end
|
||||
@threads = Kaminari.paginate_array(@threads).page(params[:page])
|
||||
end
|
||||
@@ -34,6 +35,19 @@ class ForumsController < ApplicationController
|
||||
|
||||
def update
|
||||
if admin?
|
||||
forum_badges = Badgeassociation.where(forum: @forum)
|
||||
["read-", "write-"].each_with_index do |p,i|
|
||||
current_badges = forum_badges.where(permission: i+1).pluck(:badge_id)
|
||||
params.select{|k,v| k.start_with? p}.each do |k,v|
|
||||
name = k.gsub(p, "")
|
||||
if current_badges.include? (bid = Badge.find_by(name: name).id)
|
||||
current_badges.delete bid
|
||||
else
|
||||
Badgeassociation.create!(badge: Badge.find_by(name: name), forum: @forum, permission: i+1)
|
||||
end
|
||||
end
|
||||
current_badges.each {|b| Badgeassociation.find_by(badge_id: b, forum: @forum, permission: i+1).delete}
|
||||
end
|
||||
if @forum.update_attributes(forum_params)
|
||||
flash[:notice] = "Forum updated"
|
||||
redirect_to @forum
|
||||
@@ -49,6 +63,11 @@ class ForumsController < ApplicationController
|
||||
def create
|
||||
if admin?
|
||||
@forum = Forum.new(forum_params([:forumgroup_id]))
|
||||
["read-", "write-"].each_with_index do |p,i|
|
||||
params.select{|k,v| k.start_with? p}.each do |k,v|
|
||||
Badgeassociation.create!(badge: Badge.find_by(name: k.gsub(p, "")), forum: @forum, permission: i+1)
|
||||
end
|
||||
end
|
||||
if @forum.save
|
||||
flash[:notice] = "Forum created."
|
||||
redirect_to @forum
|
||||
@@ -77,7 +96,6 @@ class ForumsController < ApplicationController
|
||||
redirect_to forums_path
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def check_permission
|
||||
@@ -89,7 +107,7 @@ class ForumsController < ApplicationController
|
||||
end
|
||||
|
||||
def forum_params(add = [])
|
||||
a = [:name, :position, :role_read_id, :role_write_id] + add
|
||||
a = [:name, :position, :role_read_id, :role_write_id, :necro_length] + add
|
||||
params.require(:forum).permit(a)
|
||||
end
|
||||
end
|
||||
@@ -3,11 +3,19 @@ class ForumthreadsController < ApplicationController
|
||||
before_filter :check_permission, only: [:show, :edit, :update, :destroy]
|
||||
|
||||
def index
|
||||
redirect_to forum_path(@thread.forum.forumgroup, f)
|
||||
end
|
||||
params[:forum] = nil if params[:forum] && !Forum.find_by(id: params[:forum])
|
||||
|
||||
params.delete_if{|k,v| v.blank?}
|
||||
|
||||
@threads = Forumthread.filter(current_user, params[:title].try(:slice, 0..255), params[:content].try(:slice, 0..255), params[:reply].try(:slice, 0..255), params[:label], User.find_by(ign: params[:author].to_s.strip) || params[:author], params[:query].try(:slice, 0..255), Forum.find_by(id: params[:forum]))
|
||||
.page(params[:page]).per(30)
|
||||
end
|
||||
def show
|
||||
@replies = @thread.replies.page(params[:page])
|
||||
if params[:reverse] == "true"
|
||||
@replies = @thread.replies.order(id: :desc).page(params[:page])
|
||||
else
|
||||
@replies = @thread.replies.order(:id).page(params[:page])
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
@@ -76,6 +84,9 @@ class ForumthreadsController < ApplicationController
|
||||
redirect_to @thread.forum
|
||||
end
|
||||
|
||||
def search
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def check_permission
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
class StaticsController < ApplicationController
|
||||
|
||||
caches_action :online, expires_in: 10.seconds, layout: false
|
||||
|
||||
def index
|
||||
if current_user
|
||||
redirect_to blogposts_path
|
||||
@@ -14,4 +16,9 @@ class StaticsController < ApplicationController
|
||||
def donate
|
||||
end
|
||||
|
||||
def online
|
||||
json = JSON.parse(File.read("/etc/minecraft/redstoner/plugins/JavaUtils/players.json"))
|
||||
@players = json["players"].collect!{ |p| User.find_by(uuid: p["UUID"].tr("-", "")) or User.new(name: p["name"], ign: p["name"], uuid: p["UUID"].tr("-", ""), role: Role.get("normal"), badge: Badge.get("none"), confirmed: true) }.sort_by!(&:role).reverse!
|
||||
@count = json["amount"]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -37,7 +37,7 @@ class ThreadrepliesController < ApplicationController
|
||||
if @reply.update_attributes(reply_params)
|
||||
@reply.send_new_reply_mail(old_content)
|
||||
flash[:notice] = "Reply updated!"
|
||||
position = @reply.thread.replies.index(@reply)
|
||||
position = @reply.thread.replies.order(:id).index(@reply)
|
||||
page = position / Kaminari.config.default_per_page + 1
|
||||
redirect_to forumthread_path(@reply.thread, page: page) + "#reply-#{@reply.id}"
|
||||
else
|
||||
|
||||
@@ -7,24 +7,10 @@ class UsersController < ApplicationController
|
||||
before_filter :set_user, except: [:index, :new, :create, :lost_password, :reset_password, :suggestions]
|
||||
|
||||
def index
|
||||
if params[:role]
|
||||
if params[:role].downcase == "staff"
|
||||
@users = User.joins(:role).where("roles.value >= ?", Role.get(:mod).to_i)
|
||||
elsif params[:role].downcase == "donor"
|
||||
@users = User.joins(:role).where(donor: true)
|
||||
else
|
||||
if role = Role.get(params[:role])
|
||||
@users = User.joins(:role).where(role: role)
|
||||
else
|
||||
flash[:alert] = "role '#{params[:role]}' does not exist!"
|
||||
redirect_to users_path
|
||||
return
|
||||
end
|
||||
end
|
||||
else
|
||||
@users = User.joins(:role).where.not(id: User.first.id) #Remove first user
|
||||
end
|
||||
@users = @users.order("roles.value desc", "confirmed desc", :name)
|
||||
role = Role.find_by(name: params[:role])
|
||||
badge = Badge.find_by(name: params[:badge])
|
||||
|
||||
@users = User.search(params[:search], role, badge, params.include?(:staff))
|
||||
@count = @users.size
|
||||
@users = @users.page(params[:page]).per(100)
|
||||
end
|
||||
@@ -151,9 +137,9 @@ class UsersController < ApplicationController
|
||||
def update
|
||||
if (mod? && current_user.role >= @user.role ) || (@user.is?(current_user) && confirmed?)
|
||||
if mod?
|
||||
userdata = user_params([:name, :skype, :skype_public, :youtube, :twitter, :about, :role, :confirmed, :donor])
|
||||
userdata = user_params([:name, :skype, :skype_public, :youtube, :twitter, :about, :role, :badge, :confirmed, :header_scroll, :utc_time, :dark])
|
||||
else
|
||||
userdata = user_params([:name, :skype, :skype_public, :youtube, :twitter, :about])
|
||||
userdata = user_params([:name, :skype, :skype_public, :youtube, :twitter, :about, :header_scroll, :utc_time, :dark])
|
||||
end
|
||||
if userdata[:role]
|
||||
role = Role.get(userdata[:role])
|
||||
@@ -164,6 +150,9 @@ class UsersController < ApplicationController
|
||||
userdata.delete(:role)
|
||||
end
|
||||
end
|
||||
if userdata[:badge]
|
||||
userdata[:badge] = Badge.get(userdata[:badge])
|
||||
end
|
||||
if @user.youtube != userdata[:youtube]
|
||||
youtube = get_youtube(userdata[:youtube])
|
||||
userdata[:youtube] = youtube[:channel]
|
||||
@@ -232,6 +221,13 @@ class UsersController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def edit_website_settings
|
||||
unless @user.is?(current_user) || admin? && current_user.role > @user.role || superadmin?
|
||||
flash[:alert] = "You are not allowed to edit this user's website settings!"
|
||||
redirect_to @user
|
||||
end
|
||||
end
|
||||
|
||||
def update_login
|
||||
if @user.is?(current_user) || admin? && current_user.role > @user.role || superadmin?
|
||||
authenticated = !@user.is?(current_user) || @user.authenticate(params[:current_password])
|
||||
|
||||
@@ -11,10 +11,12 @@ module ApplicationHelper
|
||||
end
|
||||
|
||||
def ago(tm)
|
||||
if tm
|
||||
if tm && current_user.try(:utc_time) != true
|
||||
content_tag :time, title: tm.strftime("%e %b %Y, %H:%M %Z"), datetime: tm.to_datetime.rfc3339 do
|
||||
tm.strftime("%e %b %Y, %H:%M")
|
||||
end
|
||||
else
|
||||
tm
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
19
app/models/badge.rb
Normal file
19
app/models/badge.rb
Normal file
@@ -0,0 +1,19 @@
|
||||
class Badge < ActiveRecord::Base
|
||||
include Comparable
|
||||
has_many :users
|
||||
has_and_belongs_to_many :forums
|
||||
|
||||
def self.get (input)
|
||||
if input.is_a?(String) || input.is_a?(Symbol)
|
||||
Badge.find_by(name: input)
|
||||
elsif input.is_a?(Fixnum)
|
||||
Badge.find_by(id: input)
|
||||
elsif input.is_a?(Badge)
|
||||
return input
|
||||
end
|
||||
end
|
||||
|
||||
def to_s
|
||||
self.name
|
||||
end
|
||||
end
|
||||
7
app/models/badgeassociation.rb
Normal file
7
app/models/badgeassociation.rb
Normal file
@@ -0,0 +1,7 @@
|
||||
class Badgeassociation < ActiveRecord::Base
|
||||
|
||||
belongs_to :badge
|
||||
belongs_to :forum
|
||||
belongs_to :forumgroup
|
||||
|
||||
end
|
||||
@@ -1,6 +1,10 @@
|
||||
class Forum < ActiveRecord::Base
|
||||
belongs_to :forumgroup
|
||||
has_many :forumthreads
|
||||
|
||||
has_many :badgeassociations
|
||||
has_many :badges, through: :badgeassociations
|
||||
|
||||
belongs_to :role_read, class_name: "Role", foreign_key: "role_read_id"
|
||||
belongs_to :role_write, class_name: "Role", foreign_key: "role_write_id"
|
||||
has_and_belongs_to_many :labels
|
||||
@@ -18,11 +22,11 @@ class Forum < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def can_read?(user)
|
||||
group && group.can_read?(user) && (role_read.nil? || (!user.nil? && user.role >= role_read))
|
||||
group && group.can_read?(user) && (role_read.nil? || (!user.nil? && user.role >= role_read) || Badgeassociation.find_by(badge: user.badge, forum: self, permission: 1))
|
||||
end
|
||||
|
||||
def can_write?(user)
|
||||
group.can_write?(user) && (role_write.nil? || (!user.nil? && user.role >= role_write))
|
||||
group.can_write?(user) && (role_write.nil? || (!user.nil? && user.role >= role_write || Badgeassociation.find_by(badge: user.badge, forum: self, permission: 2)))
|
||||
end
|
||||
|
||||
def can_view?(user)
|
||||
|
||||
@@ -4,7 +4,8 @@ class Forumgroup < ActiveRecord::Base
|
||||
belongs_to :role_write, class_name: "Role", foreign_key: "role_write_id"
|
||||
accepts_nested_attributes_for :forums
|
||||
|
||||
|
||||
has_many :badgeassociations
|
||||
has_many :badges, through: :badgeassociations
|
||||
|
||||
validates_presence_of :name, :position
|
||||
validates_length_of :name, in: 2..20
|
||||
@@ -14,11 +15,11 @@ class Forumgroup < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def can_read?(user)
|
||||
role_read.nil? || (!user.nil? && user.role >= role_read)
|
||||
role_read.nil? || (!user.nil? && user.role >= role_read) || Badgeassociation.find_by(badge: user.badge, forumgroup: self, permission: 1)
|
||||
end
|
||||
|
||||
def can_write?(user)
|
||||
!user.nil? && user.confirmed? && (role_write.nil? || user.role >= role_write)
|
||||
!user.nil? && user.confirmed? && (role_write.nil? || user.role >= role_write) || Badgeassociation.find_by(badge: user.badge, forumgroup: self, permission: 2)
|
||||
end
|
||||
|
||||
def can_view?(user)
|
||||
|
||||
@@ -65,4 +65,49 @@ class Forumthread < ActiveRecord::Base
|
||||
def to_param
|
||||
[id, to_s.parameterize].join("-")
|
||||
end
|
||||
|
||||
def self.filter (user, title, content, reply, label, author, query, forum)
|
||||
order_phrase = query || [title, content, reply].select(&:present?).join(" ")
|
||||
user_id = user.try(:id).to_i
|
||||
role_value = user.try(:role).to_i
|
||||
can_read = "COALESCE(forum_role_read.value, 0) <= ? AND COALESCE(forumgroup_role_read.value, 0) <= ?"
|
||||
# A user can view sticky threads in write-only forums without read permissions.
|
||||
sticky_can_write = "sticky = true AND (COALESCE(forum_role_write.value, 0) <= ? AND COALESCE(forumgroup_role_write.value, 0) <= ?)"
|
||||
match = ["MATCH (title, forumthreads.content) AGAINST (#{Forumthread.sanitize(order_phrase)})", "MATCH (threadreplies.content) AGAINST (#{Forumthread.sanitize(order_phrase)})", "MATCH (title, forumthreads.content) AGAINST (?) OR MATCH (threadreplies.content) AGAINST (?)", "MATCH (title) AGAINST (?)", "MATCH (forumthreads.content) AGAINST (?)", "MATCH (threadreplies.content) AGAINST (?)"]
|
||||
|
||||
threads = forum.try(:forumthreads) || Forumthread
|
||||
|
||||
threads = threads.select("forumthreads.*", "#{match[0]} AS relevance", "#{match[1]} AS reply_rel")
|
||||
|
||||
threads = threads.joins(forum: :forumgroup)
|
||||
.joins("LEFT JOIN threadreplies ON forumthreads.id = threadreplies.forumthread_id")
|
||||
.joins("LEFT JOIN roles as forum_role_read ON forums.role_read_id = forum_role_read.id")
|
||||
.joins("LEFT JOIN roles as forum_role_write ON forums.role_write_id = forum_role_write.id")
|
||||
.joins("LEFT JOIN roles as forumgroup_role_read ON forumgroups.role_read_id = forumgroup_role_read.id")
|
||||
.joins("LEFT JOIN roles as forumgroup_role_write ON forumgroups.role_write_id = forumgroup_role_write.id")
|
||||
|
||||
threads = threads.where("forumthreads.user_author_id = ? OR (#{can_read}) OR (#{sticky_can_write}) OR (?)", user_id, role_value, role_value, role_value, role_value, Forum.find(forum).can_read?(user))
|
||||
if query
|
||||
threads = threads.where("#{match[2]}", query[0..99], query[0..99])
|
||||
elsif [title, content, reply].any?
|
||||
threads = threads.where("#{match[3]}", title[0..99]) if title
|
||||
threads = threads.where("#{match[4]}", content[0..99]) if content
|
||||
threads = threads.where("#{match[5]}", reply[0..99]) if reply
|
||||
end
|
||||
if label.try(:downcase) == "no label"
|
||||
threads = threads.where(label: nil)
|
||||
elsif label && l = Label.find_by(name: label)
|
||||
threads = threads.where(label: l)
|
||||
end
|
||||
threads = threads.where(user_author: author) if author
|
||||
|
||||
threads = threads.group("forumthreads.id")
|
||||
|
||||
if order_phrase.present?
|
||||
threads = threads.order("GREATEST(relevance, reply_rel) DESC")
|
||||
else
|
||||
threads = threads.order("sticky DESC", "threadreplies.id DESC", "forumthreads.id DESC")
|
||||
end
|
||||
threads
|
||||
end
|
||||
end
|
||||
|
||||
@@ -14,14 +14,14 @@ class Role < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def is? (name)
|
||||
!!(Role.find_by_name(name) == self)
|
||||
!!(Role.find_by(name: name) == self)
|
||||
end
|
||||
|
||||
def self.get (input)
|
||||
if input.is_a?(String) || input.is_a?(Symbol)
|
||||
Role.find_by_name(input)
|
||||
Role.find_by(name: input)
|
||||
elsif input.is_a?(Fixnum)
|
||||
Role.find_by_id(input)
|
||||
Role.find_by(id: input)
|
||||
elsif input.is_a?(Role)
|
||||
return input
|
||||
end
|
||||
@@ -31,7 +31,7 @@ class Role < ActiveRecord::Base
|
||||
if role.is_a?(Role)
|
||||
self.value - role.value
|
||||
elsif role.is_a?(Symbol)
|
||||
self <=> Role.find_by_name(role)
|
||||
self <=> Role.find_by(name: role)
|
||||
else
|
||||
self.to_i <=> role
|
||||
end
|
||||
|
||||
@@ -5,10 +5,11 @@ class User < ActiveRecord::Base
|
||||
strip_attributes
|
||||
|
||||
belongs_to :role
|
||||
belongs_to :badge
|
||||
|
||||
has_secure_password
|
||||
|
||||
before_validation :strip_whitespaces, :set_uuid, :set_name, :set_email_token, :set_role
|
||||
before_validation :strip_whitespaces, :set_uuid, :set_name, :set_email_token, :set_role, :set_badge
|
||||
|
||||
validates_presence_of :password, :password_confirmation, :email_token, on: :create
|
||||
validates_presence_of :name, :email, :ign
|
||||
@@ -29,10 +30,6 @@ class User < ActiveRecord::Base
|
||||
self == user
|
||||
end
|
||||
|
||||
def donor?
|
||||
!!self.donor
|
||||
end
|
||||
|
||||
def confirmed?
|
||||
!!self.confirmed
|
||||
end
|
||||
@@ -150,6 +147,10 @@ class User < ActiveRecord::Base
|
||||
self.role ||= Role.get(:normal)
|
||||
end
|
||||
|
||||
def set_badge
|
||||
self.badge ||= Badge.get(:none)
|
||||
end
|
||||
|
||||
def set_uuid
|
||||
if !self.uuid.present?
|
||||
# idk
|
||||
@@ -173,4 +174,21 @@ class User < ActiveRecord::Base
|
||||
def set_email_token
|
||||
self.email_token ||= SecureRandom.hex(16)
|
||||
end
|
||||
|
||||
def self.search (search, role, badge, staff)
|
||||
users = User.joins(:role)
|
||||
if role
|
||||
users = users.where(role: role)
|
||||
elsif staff
|
||||
users = users.where("roles.value >= ?", Role.get(:mod).to_i)
|
||||
end
|
||||
users = users.where(badge: badge) if badge
|
||||
if search
|
||||
search_san = User.send(:sanitize_sql_like, search.to_s)
|
||||
users = users.where("users.name like ? OR ign like ?", "%#{search_san}%", "%#{search_san}%")
|
||||
end
|
||||
users = users.where.not(id: User.first.id) unless [search, role, badge].any?
|
||||
users = users.order("roles.value desc", "confirmed desc", :name)
|
||||
users
|
||||
end
|
||||
end
|
||||
8
app/views/application/_md_editor_user.html.erb
Normal file
8
app/views/application/_md_editor_user.html.erb
Normal file
@@ -0,0 +1,8 @@
|
||||
<div class="md_editor">
|
||||
<div class="field_container_user">
|
||||
<% options = (defined?(options) && options || {}) %>
|
||||
<% options[:class] = "#{options[:class]} editor_field" %>
|
||||
<% options[:placeholder] ||= "Enter user's name." %>
|
||||
<%= text_field_tag name, content, options %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -29,10 +29,26 @@
|
||||
<td><%= f.label :role_read_id, "Min. read role" %></td>
|
||||
<td><%= f.select :role_read_id, role_selection, include_blank: "None" %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Badges with read permission</b></td>
|
||||
<td>
|
||||
<% Badge.where("name != 'none'").each do |b| %>
|
||||
<%=b%><%= check_box_tag "read-#{b}", nil, Badgeassociation.find_by(badge: b, forumgroup: @group, permission: 1) %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= f.label :role_write_id, "Min. write role" %></td>
|
||||
<td><%= f.select :role_write_id, role_selection, include_blank: false %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Badges with write permission</b></td>
|
||||
<td>
|
||||
<% Badge.where("name != 'none'").each do |b| %>
|
||||
<%=b%><%= check_box_tag "write-#{b}", nil, Badgeassociation.find_by(badge: b, forumgroup: @group, permission: 2) %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p><%= f.submit "Update group", class: "btn blue left" %></p>
|
||||
<% end %>
|
||||
|
||||
@@ -16,10 +16,26 @@
|
||||
<td><%= f.label :role_read_id, "Min. read role" %></td>
|
||||
<td><%= f.select :role_read_id, role_selection, include_blank: "None" %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Badges with read permission</b></td>
|
||||
<td>
|
||||
<% Badge.where("name != 'none'").each do |b| %>
|
||||
<%=b%><%= check_box_tag "read-#{b}" %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= f.label :role_write_id, "Min. write role" %></td>
|
||||
<td><%= f.select :role_write_id, role_selection, include_blank: false %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Badges with write permission</b></td>
|
||||
<td>
|
||||
<% Badge.where("name != 'none'").each do |b| %>
|
||||
<%=b%><%= check_box_tag "write-#{b}" %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p><%= f.submit "Create group", class: "btn blue left" %></p>
|
||||
<div class="clear"></div>
|
||||
|
||||
@@ -17,10 +17,30 @@
|
||||
<td><%= f.label :role_read_id, "Min. read role" %></td>
|
||||
<td><%= f.select :role_read_id, role_selection, include_blank: "None" %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Badges with read permission</b></td>
|
||||
<td>
|
||||
<% Badge.where("name != 'none'").each do |b| %>
|
||||
<%=b%><%= check_box_tag "read-#{b}", nil, Badgeassociation.find_by(badge: b, forum: @forum, permission: 1) %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= f.label :role_write_id, "Min. write role" %></td>
|
||||
<td><%= f.select :role_write_id, role_selection, include_blank: false %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Badges with write permission</b></td>
|
||||
<td>
|
||||
<% Badge.where("name != 'none'").each do |b| %>
|
||||
<%=b%><%= check_box_tag "write-#{b}", nil, Badgeassociation.find_by(badge: b, forum: @forum, permission: 2) %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= f.label :necro_length, "Necropost warning delay (in days)" %></td>
|
||||
<td><%= f.number_field :necro_length, placeholder: "Warning Delay (leave blank for no warning)" %></td>
|
||||
</tr>
|
||||
</table>
|
||||
<p><%= f.submit "Update forum", class: "btn blue left" %></p>
|
||||
<% end %>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<% title "Forums" %>
|
||||
|
||||
<%= link_to "All threads", forumthreads_path, class: "btn blue right" %>
|
||||
<br>
|
||||
<div id="forum_groups">
|
||||
<% @groups.each do |group| %>
|
||||
<div class="item-group" id="group-<%= group.id %>">
|
||||
@@ -16,7 +18,7 @@
|
||||
<%= link_to f.name, f, id: "forum-#{f.id}"%>
|
||||
<div class="item-info">
|
||||
<% if last_thread = f.threads.last %>
|
||||
<% last_reply = Threadreply.where(forumthread: f.threads).order(:created_at).last %>
|
||||
<% last_reply = Threadreply.where(forumthread: f.threads).order(:id).last %>
|
||||
<% if last_reply && last_reply.created_at > last_thread.created_at %>
|
||||
<% if last_reply.thread.can_read?(current_user) %>
|
||||
<%= last_reply.author.name %>
|
||||
|
||||
@@ -17,10 +17,30 @@
|
||||
<td><%= f.label :role_read_id, "Min. read role" %></td>
|
||||
<td><%= f.select :role_read_id, role_selection, include_blank: "None" %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Badges with read permission</b></td>
|
||||
<td>
|
||||
<% Badge.where("name != 'none'").each do |b| %>
|
||||
<%=b%><%= check_box_tag "read-#{b}" %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= f.label :role_write_id, "Min. write role" %></td>
|
||||
<td><%= f.select :role_write_id, role_selection, include_blank: false %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Badges with write permission</b></td>
|
||||
<td>
|
||||
<% Badge.where("name != 'none'").each do |b| %>
|
||||
<%=b%><%= check_box_tag "write-#{b}" %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= f.label :necro_length, "Necropost warning delay (in days)" %></td>
|
||||
<td><%= f.number_field :necro_length, placeholder: "Warning Delay (leave blank for no warning)" %></td>
|
||||
</tr>
|
||||
</table>
|
||||
<%= f.hidden_field :forumgroup_id %>
|
||||
<p><%= f.submit "Create forum", class: "btn blue left" %></p>
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
<%= link_to @forum.group, forumgroup_path(@forum.group) %> → <%= @forum %>
|
||||
|
||||
<h1><%= title @forum %></h1>
|
||||
<h1>
|
||||
<%= title @forum %>
|
||||
<%= link_to "Search Threads", forumthreads_path(forum: @forum.id), class: "btn blue right" %>
|
||||
</h1>
|
||||
<% if @forum.can_write?(current_user) %>
|
||||
<p><%= link_to "New thread", new_forumthread_path(forum: @forum), class: "btn blue" %></p>
|
||||
<p>
|
||||
<%= link_to "New thread", new_forumthread_path(forum: @forum), class: "btn blue" %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<% if @forum.role_read && @forum.role_write && @forum.role_write < @forum.role_read %>
|
||||
@@ -33,7 +38,7 @@
|
||||
<div class="item <%= "#{"locked" if thread.locked}#{"sticky" if thread.sticky}" %>">
|
||||
<%= render partial: "labels/label", locals: {label: thread.label} %><%= link_to truncate(thread.title, length: 60, omission: " …"), forumthread_path(thread), title: thread.title %>
|
||||
<div class="item-info">
|
||||
<% if rpl = thread.replies.last %>
|
||||
<% if rpl = thread.replies.order(:id).last %>
|
||||
<%= rpl.author.name %>
|
||||
<%
|
||||
position = thread.replies.count - 1
|
||||
|
||||
85
app/views/forumthreads/index.html.erb
Normal file
85
app/views/forumthreads/index.html.erb
Normal file
@@ -0,0 +1,85 @@
|
||||
<%= link_to "Forums", forums_path %> →
|
||||
<% params_list = params.slice(:query, :title, :content, :author, :label, :reply) %>
|
||||
<% if params_list.any? %>
|
||||
<%= link_to "All Threads", forumthreads_path %> → Search Results
|
||||
<% else %>
|
||||
<%= "All Threads" %>
|
||||
<% end %>
|
||||
<h1>
|
||||
<%
|
||||
if params[:forum]
|
||||
text = "forum '#{Forum.find(params[:forum]).name}'"
|
||||
if params_list.except(:forum).any?
|
||||
text = "Search results in #{text} (#{@threads.total_count})"
|
||||
else
|
||||
text = text.capitalize
|
||||
end
|
||||
elsif params_list.any?
|
||||
text = "Search results (#{@threads.total_count})"
|
||||
else
|
||||
text = "All threads"
|
||||
end
|
||||
%>
|
||||
<%= title text %>
|
||||
</h1>
|
||||
<br>
|
||||
<%= form_tag(forumthreads_path, method: :get) do %>
|
||||
<%= text_field_tag "query", params[:query], placeholder: "Search...", class: "searchfield field" %>
|
||||
<%= submit_tag "Go", class: "searchfield btn" %>
|
||||
<%= link_to "Advanced Search", search_forumthreads_path(params_list), class: "btn right blue" %>
|
||||
<% if params_list.any? %>
|
||||
<% if params[:forum] %>
|
||||
<%= link_to "Show All Threads", forumthreads_path(params_list.except("forum")), class: "btn right blue" %>
|
||||
<% elsif params_list.except(:controller, :action).any? %>
|
||||
<%= link_to "Show All Threads", forumthreads_path, class: "btn right blue" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if params[:forum] %>
|
||||
<%= link_to "Go to Forum", forum_path(params[:forum]), class: "btn right blue" %>
|
||||
<% end %>
|
||||
<% params.slice(:forum, :title, :content, :reply, :label, :author).each do |key, value| %>
|
||||
<%= hidden_field_tag key, params[key] %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<div id="forum_groups">
|
||||
<% @threads.each do |thread| %>
|
||||
<div class="item-group with-avatar" id="thread-<%= thread.id %>">
|
||||
<div class="header">
|
||||
<%= link_to(thread.author.avatar(64), thread.author, title: thread.author.ign) %>
|
||||
<%= render partial: "users/username", locals: { user: thread.author } %>
|
||||
<%= link_to thread do %>
|
||||
<%= ago thread.created_at %>
|
||||
<% end %>
|
||||
<span class="comment-counter">
|
||||
<%= link_to pluralize(thread.replies.count, "Reply"), thread %>
|
||||
</span>
|
||||
<div class="clear-right"></div>
|
||||
</div>
|
||||
<div class="items bold">
|
||||
<div class="item <%= "#{"locked" if thread.locked}#{"sticky" if thread.sticky}" %>">
|
||||
<%= render partial: "labels/label", locals: {label: thread.label} %><%= link_to truncate(thread.title, length: 60, omission: " …"), forumthread_path(thread), title: thread.title %>
|
||||
<div class="item-info">
|
||||
<% if rpl = thread.replies.order(:id).last %>
|
||||
<%= rpl.author.name %>
|
||||
<%
|
||||
position = thread.replies.count - 1
|
||||
page = position / Kaminari.config.default_per_page + 1
|
||||
%>
|
||||
<%= link_to "replied", forumthread_path(thread, page: page) + "#reply-#{rpl.id}" %>
|
||||
<%= ago rpl.created_at %>.
|
||||
<% else %>
|
||||
No replies yet.
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% if @threads.empty? %>
|
||||
<br>
|
||||
<h3>No results found</h3>
|
||||
<% end %>
|
||||
<%= paginate @threads %>
|
||||
</div>
|
||||
54
app/views/forumthreads/search.html.erb
Normal file
54
app/views/forumthreads/search.html.erb
Normal file
@@ -0,0 +1,54 @@
|
||||
<% title "Thread Search" %>
|
||||
<h1>Thread Search</h1>
|
||||
<h3>Leave a field blank to ignore that search aspect.</h3>
|
||||
<% label = Label.where(name: params[:label]).first %>
|
||||
<table>
|
||||
<tbody>
|
||||
<%= form_tag(forumthreads_path, method: :get) do %>
|
||||
<%
|
||||
forums = []
|
||||
Forum.select{|f| f.can_read?(current_user)}.sort_by{ |f| f.forumgroup && f.forumgroup.position || 0 }.each do |f|
|
||||
forums << ["#{f.forumgroup.name} → #{f.name}", f.id] if f.forumgroup
|
||||
end
|
||||
%>
|
||||
<% label_list = Label.pluck(:name).prepend("No Label") %>
|
||||
<tr>
|
||||
<td>Forum</td>
|
||||
<td><%= select_tag "forum", options_for_select(forums, params[:forum]), include_blank: "Search All Threads" %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Label</td>
|
||||
<td>
|
||||
<%= select_tag "label", options_for_select(label_list, params[:label]), include_blank: "Label" %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>
|
||||
<%= text_field_tag "title", params[:title], placeholder: "Search Titles" %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Content</td>
|
||||
<td>
|
||||
<%= text_field_tag "content", params[:content], placeholder: "Search Contents" %>
|
||||
</td>
|
||||
<tr>
|
||||
<td>Author</td>
|
||||
<td>
|
||||
<%= render partial: "md_editor_user", locals: {name: "author", content: params[:author]} %>
|
||||
</td>
|
||||
</tr>
|
||||
<td>Replies</td>
|
||||
<td>
|
||||
<%= text_field_tag "reply", params[:reply], placeholder: "Search Replies" %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<%= submit_tag "Go", class: "btn blue", style: "width:50px", name: nil %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1,6 +1,8 @@
|
||||
<%= link_to @thread.forum.group, forumgroup_path(@thread.forum.group) %> → <%= link_to @thread.forum, @thread.forum %> → <%=truncate(@thread.title, length: 60, omission: " …") %>
|
||||
<h1><%= render partial: "labels/label", locals: {label: @thread.label} %><%= title @thread.title %></h1>
|
||||
|
||||
<h1>
|
||||
<%= render partial: "labels/label", locals: {label: @thread.label} %><%= title @thread.title %>
|
||||
<%= link_to "Reverse Replies", forumthread_path(@thread, reverse: params[:reverse] != "true"), class: "btn right blue" %>
|
||||
</h1>
|
||||
<div class="item-group thread with-avatar" id="thread-<%= @thread.id %>">
|
||||
<div class="header">
|
||||
<%= link_to(@thread.author.avatar(64), @thread.author, title: @thread.author.ign) %>
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
<div id="head">
|
||||
<% head = "head_top" %>
|
||||
<% if current_user != nil && current_user.header_scroll == true %>
|
||||
<% head = "head_scroll" %>
|
||||
<% end %>
|
||||
|
||||
<div id="<%= head %>">
|
||||
<div id="menu">
|
||||
<%= link_to "", root_path, id: "logo" %>
|
||||
<ul>
|
||||
@@ -26,6 +31,9 @@
|
||||
<li>
|
||||
<%= link_to "Donate", donate_statics_path, class: ("active" if con == "statics" && params[:action] == "donate") %>
|
||||
</li>
|
||||
<li>
|
||||
<%= link_to "Who's Playing?", online_statics_path, class: ("active" if con == "statics" && params[:action] == "online") %>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="userbar">
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
<meta name="viewport" content="initial-scale=1,maximum-scale=1">
|
||||
<meta name="description" content="Redstoner is a creative minecraft server made for redstoners">
|
||||
<%= stylesheet_link_tag "application", :media => "all" %>
|
||||
<% if current_user.try(:dark) == true %>
|
||||
<%= stylesheet_link_tag "dark", :media => "all" %>
|
||||
<% end %>
|
||||
<%= csrf_meta_tags %>
|
||||
<%= favicon_link_tag "favicon.ico" %>
|
||||
<%= javascript_include_tag "https://cdn.rawgit.com/jomo/ago.js/v0.0.1/ago.min.js", crossorigin: :anonymous, integrity: "sha256-xw0JUUdbuZQCVO+QScoxrlEsD4nZGCjMRh9PP8GLhcY=" %>
|
||||
@@ -14,7 +17,11 @@
|
||||
</head>
|
||||
<body>
|
||||
<%= render partial: "/layouts/head" %>
|
||||
<div id="main-content" class="<%= yield(:main_class) %>">
|
||||
<% content = "main-content" %>
|
||||
<% if current_user.try(:header_scroll) == true %>
|
||||
<% content = "main-content-scroll" %>
|
||||
<% end %>
|
||||
<div id="<%=content%>" class="<%=yield(:main_class) %>">
|
||||
<% if alert %>
|
||||
<div class='flash alert'><%= alert %></div>
|
||||
<% end %>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<li>Donator+ ($20 or more)
|
||||
</ul>
|
||||
|
||||
<p>We also have <%= link_to "list of users who donated", users_path(role: "donor") %> already!</p>
|
||||
<p>We also have <%= link_to "list of users who donated", users_path(badge: "donor") %> already!</p>
|
||||
|
||||
<h3>Perks for you</h3>
|
||||
<p>For <i>Donator</i> and <i>Donator+</i></p>
|
||||
@@ -19,6 +19,7 @@
|
||||
<li>The warm feeling of donating for a good thing, plus a huge "<b>thank you</b>"!
|
||||
<li>You can have a nickname. See <%= link_to "our nickname guidelines", info_path("12-nickname-guidelines") %>
|
||||
<li>A "$" next to your name <i>(Including website)</i>
|
||||
<li><i>Donator+</i> has access to the in-game command <code>/lol id</code></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<div class="donations">
|
||||
|
||||
18
app/views/statics/online.html.erb
Normal file
18
app/views/statics/online.html.erb
Normal file
@@ -0,0 +1,18 @@
|
||||
<% title "Who's Playing?" %>
|
||||
<h1>These players are currently playing on Redstoner (<%= @count %>):</h1>
|
||||
<div id="userlist">
|
||||
<% @players.each do |u| %>
|
||||
<div class="list-user">
|
||||
<%= link_to(u.avatar(64), u) %>
|
||||
<div class="detail">
|
||||
<%= render partial: "users/username", locals: { user: u } %><br>
|
||||
<% if u.id %>
|
||||
<i><%= u.ign %></i>
|
||||
<% else %>
|
||||
<i>(Not signed up)</i>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,19 @@
|
||||
<%= form_for [reply.thread, reply] do |f| %>
|
||||
<%= render partial: "md_editor", locals: {name: "threadreply[content]", content: reply.content} %>
|
||||
<p><%= f.submit "Reply#{ ' (Locked)' if reply.thread.locked? }", class: "btn blue" %></p>
|
||||
<% nec_msg = "" %>
|
||||
<% forum = Forum.find(reply.thread.forum_id) %>
|
||||
<% if forum.necro_length %>
|
||||
<% if reply.thread.label.try(:name).try(:downcase) == "closed" %>
|
||||
<% nec_msg = "This thread is closed. Are you sure you want to make this reply? If so, press 'Ok'" %>
|
||||
<% elsif Threadreply.where(forumthread: reply.thread).any? %>
|
||||
<% prevAgo = Threadreply.where(forumthread: reply.thread).order(:id).last.created_at %>
|
||||
<% if prevAgo <= forum.necro_length.days.ago.utc %>
|
||||
<% nec_msg = "You may be necroposting, as the last reply was made at least #{forum.necro_length} days ago. If you still wish to make this reply, press 'Ok'." %>
|
||||
<% end %>
|
||||
<% elsif reply.thread.created_at <= forum.necro_length.days.ago.utc %>
|
||||
<% nec_msg = "You may be necroposting, as this thread was posted at least #{forum.necro_length} days ago. If you still wish to make this reply, press 'Ok'." %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<p><%= f.submit "Reply#{ ' (Locked)' if reply.thread.locked? }", class: "btn blue", data: { confirm: nec_msg } %></p>
|
||||
<% nec_msg = "" %>
|
||||
<% end %>
|
||||
@@ -1,7 +1,7 @@
|
||||
<% title "Edit Thread Reply: #{@reply.thread.title}" %>
|
||||
|
||||
<%
|
||||
position = @reply.thread.replies.index(@reply)
|
||||
position = @reply.thread.replies.order(:id).index(@reply)
|
||||
page = position / Kaminari.config.default_per_page + 1
|
||||
%>
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<div class="user">
|
||||
<%= link_to user.name, user, class: "role #{user.role.name} #{"banned" if user.banned?} #{"disabled" if user.disabled?} #{"unconfirmed" unless user.confirmed?}", title: "#{user.ign} – #{user.role}", style: "color: #{fcolor(user.role.color)}; background-color: #{user.role.color}" %>
|
||||
<%= link_to "$", donate_statics_path, class: "role donor", title: "Donator" if user.donor? %>
|
||||
<% if user.badge %>
|
||||
<%= link_to user.badge.symbol, users_path(badge: user.badge.name), class: "role badge", title: user.badge.name, style: "color: #{fcolor(user.badge.color)}; background-color: #{user.badge.color}" unless user.badge.symbol.blank? %>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -28,15 +28,17 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Confirmed email address</td>
|
||||
<td>Badge</td>
|
||||
<td>
|
||||
<%= f.select :confirmed, [["No", false], ["Yes", true]], {}, { disabled: !can_edit? } %>
|
||||
<% if current_user.role >= Role.get(:mod) %>
|
||||
<%= f.select :badge, Badge.all %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donator</td>
|
||||
<td>Confirmed email address</td>
|
||||
<td>
|
||||
<%= f.select :donor, [["No", false], ["Yes", true]], {}, { disabled: !can_edit? } %>
|
||||
<%= f.select :confirmed, [["No", false], ["Yes", true]], {}, { disabled: !can_edit? } %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
@@ -73,10 +75,11 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p><%= f.submit "Save profile", class: "btn blue left", disabled: (!@user.confirmed? && @user.is?(current_user)) %></p>
|
||||
<p><%= f.submit "Save profile", class: "btn variable-size left", disabled: (!@user.confirmed? && @user.is?(current_user)) %></p>
|
||||
<p>
|
||||
<%= link_to "Edit login details", edit_login_user_path(@user), class: "btn blue right" %>
|
||||
<%= link_to "Notification settings", edit_notifications_user_path(@user), class: "btn blue right" %>
|
||||
<%= link_to "Edit login details", edit_login_user_path(@user), class: "btn variable-size right" %>
|
||||
<%= link_to "Notification settings", edit_notifications_user_path(@user), class: "btn variable-size right" %>
|
||||
<%= link_to "Website settings", edit_website_settings_user_path(@user), class: "btn variable-size right" %>
|
||||
</p>
|
||||
<div class="clear"></div>
|
||||
|
||||
|
||||
34
app/views/users/edit_website_settings.html.erb
Normal file
34
app/views/users/edit_website_settings.html.erb
Normal file
@@ -0,0 +1,34 @@
|
||||
<% title "Edit Website Settings: #{@user.name}" %>
|
||||
|
||||
<%= link_to @user.name, @user %> → Edit Website Settings
|
||||
<h1>Edit Website Settings</h1>
|
||||
|
||||
|
||||
<%= form_for @user do |f| %>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Header moves with scrolling (Experimental - do not report bugs)</td>
|
||||
<td>
|
||||
<%= f.check_box :header_scroll %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Show exact UTC times</td>
|
||||
<td>
|
||||
<%= f.check_box :utc_time %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dark theme*</td>
|
||||
<td>
|
||||
<%= f.check_box :dark %>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><%= f.submit "Save changes", class: "btn blue left" %></p>
|
||||
<div class="clear"></div>
|
||||
<% end %>
|
||||
<br><br><br>
|
||||
*Warning: If as a result to enabling this style your eyes get infected with a severe case of eye cancer, we are not reliable for any damage. Please contact your doctor in advance to ensure that in case of infection you will be treated accordingly. Quality theme brought to you by Redempt™.
|
||||
@@ -1,12 +1,32 @@
|
||||
<%= form_tag(users_path, method: :get) do %>
|
||||
<%= text_field_tag "search", params[:search], placeholder: "Search for a user", class: "searchfield field" %>
|
||||
<%= submit_tag "Go", class: "searchfield btn", name: nil %>
|
||||
<%= hidden_field_tag "role", params[:role] if params[:role] %>
|
||||
<%= hidden_field_tag "badge", params[:badge] if params[:badge]%>
|
||||
<% end %>
|
||||
<h1>
|
||||
<% if params[:role] %>
|
||||
<%= title "All '#{params[:role]}' users" %>
|
||||
<%
|
||||
if params[:role] && !params[:badge]
|
||||
text = "All '#{params[:role]}' users"
|
||||
elsif params[:badge] && !params[:role]
|
||||
text = "All '#{params[:badge]}' users"
|
||||
elsif params[:role] && params[:badge]
|
||||
text = "All '#{params[:role]}' and '#{params[:badge]}' users"
|
||||
elsif params.include?(:staff)
|
||||
text = "All staff"
|
||||
else
|
||||
text = "All users"
|
||||
end
|
||||
text += " that contain '#{params[:search]}'" if params[:search]
|
||||
%>
|
||||
<%= title text %>
|
||||
<% if params[:search] %>
|
||||
(<%= @users.total_count %>)
|
||||
<% else %>
|
||||
<%= title "All Users" %>
|
||||
<% end %>
|
||||
(<%= @count %>)
|
||||
<% end %>
|
||||
</h1>
|
||||
<%= link_to "show all", users_path if params[:role] %>
|
||||
<%= link_to "show all", users_path if params[:role] || params[:badge] %>
|
||||
|
||||
<div id="userlist">
|
||||
<% @users.each do |u| %>
|
||||
|
||||
@@ -40,5 +40,5 @@
|
||||
|
||||
<%= f.submit "Sign up", class: "btn blue" %>
|
||||
|
||||
<p>Contact us ingame if you have problems singing up!</p>
|
||||
<p>Contact us ingame if you have problems signing up!</p>
|
||||
<% end %>
|
||||
@@ -6,6 +6,8 @@ Redstoner::Application.configure do
|
||||
# since you don't have to restart the web server when you make code changes.
|
||||
config.cache_classes = false
|
||||
|
||||
config.action_controller.perform_caching = true
|
||||
|
||||
# Log error messages when you accidentally call methods on nil.
|
||||
config.whiny_nils = true
|
||||
|
||||
|
||||
1
config/initializers/assets.rb
Normal file
1
config/initializers/assets.rb
Normal file
@@ -0,0 +1 @@
|
||||
Rails.application.config.assets.precompile += %w( dark.css )
|
||||
@@ -4,10 +4,11 @@ Redstoner::Application.routes.draw do
|
||||
resources :comments
|
||||
end
|
||||
|
||||
resources :statics, only: [:home, :donate], path: '/' do
|
||||
resources :statics, only: [:home, :donate, :online], path: '/' do
|
||||
collection do
|
||||
get 'donate'
|
||||
get 'home'
|
||||
get 'online'
|
||||
get 'index'
|
||||
end
|
||||
end
|
||||
@@ -21,6 +22,7 @@ Redstoner::Application.routes.draw do
|
||||
post 'resend_mail'
|
||||
get 'edit_notifications'
|
||||
put 'update_login'
|
||||
get 'edit_website_settings'
|
||||
end
|
||||
collection do
|
||||
get 'lost_password'
|
||||
@@ -30,10 +32,13 @@ Redstoner::Application.routes.draw do
|
||||
end
|
||||
|
||||
resources :forumgroups, path: '/forums/groups'
|
||||
resources :forums, path: '/forums'
|
||||
resources :forumthreads, path: '/forums/threads' do
|
||||
resources :threadreplies, path: 'replies'
|
||||
collection do
|
||||
get 'search'
|
||||
end
|
||||
end
|
||||
resources :forums, path: '/forums'
|
||||
|
||||
resources :tools do
|
||||
collection do
|
||||
|
||||
17
db/migrate/20170319193517_add_badge_id_to_users.rb
Normal file
17
db/migrate/20170319193517_add_badge_id_to_users.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
class AddBadgeIdToUsers < ActiveRecord::Migration
|
||||
def change
|
||||
|
||||
create_table "badges", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "symbol"
|
||||
t.string "color"
|
||||
end
|
||||
|
||||
Badge.create!({name: "none", symbol: "", color: "#000"})
|
||||
dbadge = Badge.create!({name: "donor", symbol: "$", color: "#f60"})
|
||||
|
||||
add_column :users, :badge_id, :integer, default: 1
|
||||
User.where(donor: true).update_all(badge_id: dbadge.id)
|
||||
remove_column :users, :donor
|
||||
end
|
||||
end
|
||||
5
db/migrate/20170320195301_add_utc_time_to_users.rb
Normal file
5
db/migrate/20170320195301_add_utc_time_to_users.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
class AddUtcTimeToUsers < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :users, :utc_time, :boolean, default: false
|
||||
end
|
||||
end
|
||||
5
db/migrate/20170328100851_add_header_scroll_to_users.rb
Normal file
5
db/migrate/20170328100851_add_header_scroll_to_users.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
class AddHeaderScrollToUsers < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :users, :header_scroll, :boolean, default: false
|
||||
end
|
||||
end
|
||||
5
db/migrate/20170409135858_add_necro_length_to_forums.rb
Normal file
5
db/migrate/20170409135858_add_necro_length_to_forums.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
class AddNecroLengthToForums < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :forums, :necro_length, :integer
|
||||
end
|
||||
end
|
||||
5
db/migrate/20170515200733_add_dark_to_users.rb
Normal file
5
db/migrate/20170515200733_add_dark_to_users.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
class AddDarkToUsers < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :users, :dark, :boolean, default: false
|
||||
end
|
||||
end
|
||||
8
db/migrate/20170522210610_add_search_indexes.rb
Normal file
8
db/migrate/20170522210610_add_search_indexes.rb
Normal file
@@ -0,0 +1,8 @@
|
||||
class AddSearchIndexes < ActiveRecord::Migration
|
||||
def change
|
||||
add_index :forumthreads, [:title, :content], type: :fulltext
|
||||
add_index :forumthreads, :title, type: :fulltext
|
||||
add_index :forumthreads, :content, type: :fulltext
|
||||
add_index :threadreplies, :content, type: :fulltext
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddIndexForumthreadIdOnThreadreplies < ActiveRecord::Migration
|
||||
def change
|
||||
add_index :threadreplies, :forumthread_id
|
||||
end
|
||||
end
|
||||
10
db/migrate/20170710141543_create_badgeassociations.rb
Normal file
10
db/migrate/20170710141543_create_badgeassociations.rb
Normal file
@@ -0,0 +1,10 @@
|
||||
class CreateBadgeassociations < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :badgeassociations do |t|
|
||||
t.references :badge
|
||||
t.references :forum
|
||||
t.references :forumgroup
|
||||
t.integer :permission #1 = read, 2 = write
|
||||
end
|
||||
end
|
||||
end
|
||||
86
db/schema.rb
86
db/schema.rb
@@ -11,11 +11,18 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20160926220738) do
|
||||
ActiveRecord::Schema.define(version: 20170703003647) do
|
||||
|
||||
create_table "badges", force: :cascade do |t|
|
||||
t.string "name", limit: 191
|
||||
t.string "symbol", limit: 191
|
||||
t.string "color", limit: 191
|
||||
t.integer "value", limit: 4
|
||||
end
|
||||
|
||||
create_table "blogposts", force: :cascade do |t|
|
||||
t.string "title"
|
||||
t.text "content", limit: 65535
|
||||
t.string "title", limit: 255
|
||||
t.text "content", limit: 16777215
|
||||
t.integer "user_author_id", limit: 4
|
||||
t.integer "user_editor_id", limit: 4
|
||||
t.datetime "created_at"
|
||||
@@ -23,7 +30,7 @@ ActiveRecord::Schema.define(version: 20160926220738) do
|
||||
end
|
||||
|
||||
create_table "comments", force: :cascade do |t|
|
||||
t.text "content", limit: 65535
|
||||
t.text "content", limit: 16777215
|
||||
t.integer "user_author_id", limit: 4
|
||||
t.integer "user_editor_id", limit: 4
|
||||
t.integer "blogpost_id", limit: 4
|
||||
@@ -32,18 +39,19 @@ ActiveRecord::Schema.define(version: 20160926220738) do
|
||||
end
|
||||
|
||||
create_table "forumgroups", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "name", limit: 255
|
||||
t.integer "position", limit: 4
|
||||
t.integer "role_read_id", limit: 4
|
||||
t.integer "role_write_id", limit: 4
|
||||
end
|
||||
|
||||
create_table "forums", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "name", limit: 255
|
||||
t.integer "position", limit: 4
|
||||
t.integer "role_read_id", limit: 4
|
||||
t.integer "role_write_id", limit: 4
|
||||
t.integer "forumgroup_id", limit: 4
|
||||
t.integer "necro_length", limit: 4
|
||||
end
|
||||
|
||||
create_table "forums_labels", id: false, force: :cascade do |t|
|
||||
@@ -52,8 +60,8 @@ ActiveRecord::Schema.define(version: 20160926220738) do
|
||||
end
|
||||
|
||||
create_table "forumthreads", force: :cascade do |t|
|
||||
t.string "title"
|
||||
t.text "content", limit: 65535
|
||||
t.string "title", limit: 255
|
||||
t.text "content", limit: 16777215
|
||||
t.boolean "sticky", default: false
|
||||
t.boolean "locked", default: false
|
||||
t.integer "user_author_id", limit: 4
|
||||
@@ -64,44 +72,50 @@ ActiveRecord::Schema.define(version: 20160926220738) do
|
||||
t.integer "label_id", limit: 4
|
||||
end
|
||||
|
||||
add_index "forumthreads", ["content"], name: "index_forumthreads_on_content", type: :fulltext
|
||||
add_index "forumthreads", ["title", "content"], name: "forumthreads_title_content", type: :fulltext
|
||||
add_index "forumthreads", ["title", "content"], name: "index_forumthreads_on_title_and_content", type: :fulltext
|
||||
add_index "forumthreads", ["title"], name: "index_forumthreads_on_title", type: :fulltext
|
||||
|
||||
create_table "info", force: :cascade do |t|
|
||||
t.string "title"
|
||||
t.text "content", limit: 65535
|
||||
t.string "title", limit: 255
|
||||
t.text "content", limit: 16777215
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "labels", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "color"
|
||||
t.string "name", limit: 255
|
||||
t.string "color", limit: 255
|
||||
end
|
||||
|
||||
create_table "register_tokens", force: :cascade do |t|
|
||||
t.string "uuid", null: false
|
||||
t.string "token", null: false
|
||||
t.string "email", null: false
|
||||
t.string "uuid", limit: 32, null: false
|
||||
t.string "token", limit: 6, null: false
|
||||
t.string "email", limit: 191
|
||||
end
|
||||
|
||||
add_index "register_tokens", ["email"], name: "index_register_tokens_on_email", unique: true, using: :btree
|
||||
add_index "register_tokens", ["uuid"], name: "index_register_tokens_on_uuid", unique: true, using: :btree
|
||||
|
||||
create_table "roles", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "name", limit: 255
|
||||
t.integer "value", limit: 4
|
||||
t.string "color"
|
||||
t.string "color", limit: 255
|
||||
end
|
||||
|
||||
create_table "sessions", force: :cascade do |t|
|
||||
t.string "session_id", null: false
|
||||
t.text "data", limit: 65535
|
||||
t.string "session_id", limit: 255, null: false
|
||||
t.text "data", limit: 16777215
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "sessions", ["session_id"], name: "index_sessions_on_session_id", using: :btree
|
||||
add_index "sessions", ["session_id"], name: "index_sessions_on_session_id", length: {"session_id"=>191}, using: :btree
|
||||
add_index "sessions", ["updated_at"], name: "index_sessions_on_updated_at", using: :btree
|
||||
|
||||
create_table "threadreplies", force: :cascade do |t|
|
||||
t.text "content", limit: 65535
|
||||
t.text "content", limit: 16777215
|
||||
t.integer "user_author_id", limit: 4
|
||||
t.integer "user_editor_id", limit: 4
|
||||
t.integer "forumthread_id", limit: 4
|
||||
@@ -109,21 +123,23 @@ ActiveRecord::Schema.define(version: 20160926220738) do
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "threadreplies", ["content"], name: "index_threadreplies_on_content", type: :fulltext
|
||||
add_index "threadreplies", ["forumthread_id"], name: "index_threadreplies_on_forumthread_id", using: :btree
|
||||
|
||||
create_table "users", force: :cascade do |t|
|
||||
t.string "uuid", null: false
|
||||
t.string "name", null: false
|
||||
t.string "password_digest", null: false
|
||||
t.string "ign", null: false
|
||||
t.string "email", null: false
|
||||
t.string "uuid", limit: 255, null: false
|
||||
t.string "name", limit: 191
|
||||
t.string "password_digest", limit: 255, null: false
|
||||
t.string "ign", limit: 255, null: false
|
||||
t.string "email", limit: 191
|
||||
t.text "about", limit: 65535
|
||||
t.string "last_ip"
|
||||
t.string "skype"
|
||||
t.string "last_ip", limit: 255
|
||||
t.string "skype", limit: 255
|
||||
t.boolean "skype_public", default: false
|
||||
t.string "youtube"
|
||||
t.string "youtube_channelname"
|
||||
t.string "twitter"
|
||||
t.boolean "donor", default: false
|
||||
t.string "email_token"
|
||||
t.string "youtube", limit: 255
|
||||
t.string "youtube_channelname", limit: 255
|
||||
t.string "twitter", limit: 255
|
||||
t.string "email_token", limit: 255
|
||||
t.boolean "confirmed", default: false
|
||||
t.datetime "last_seen"
|
||||
t.integer "role_id", limit: 4, null: false
|
||||
@@ -134,6 +150,10 @@ ActiveRecord::Schema.define(version: 20160926220738) do
|
||||
t.boolean "mail_own_blogpost_comment", default: true
|
||||
t.boolean "mail_other_blogpost_comment", default: true
|
||||
t.boolean "mail_mention", default: true
|
||||
t.integer "badge_id", limit: 4, default: 0
|
||||
t.boolean "utc_time", default: false
|
||||
t.boolean "header_scroll", default: false
|
||||
t.boolean "dark", default: false
|
||||
end
|
||||
|
||||
add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
|
||||
|
||||
23
db/seeds.rb
23
db/seeds.rb
@@ -10,6 +10,14 @@ Role.create!([
|
||||
{name: "superadmin", value: 500, color: "#d22"}
|
||||
])
|
||||
|
||||
Badge.create!([
|
||||
{name: "none", symbol: "", color: "#000"},
|
||||
{name: "donor", symbol: "$", color: "#f60"},
|
||||
{name: "developer", symbol: "D", color: "#a0a"},
|
||||
{name: "retired", symbol: "R", color: "#0aa"},
|
||||
{name: "lead", symbol: "L", color: "#a00"}
|
||||
])
|
||||
|
||||
userpw = SecureRandom.hex(36)
|
||||
|
||||
|
||||
@@ -23,19 +31,14 @@ deleted_user = User.create!(
|
||||
password: userpw,
|
||||
password_confirmation: userpw,
|
||||
role: Role.get(:disabled),
|
||||
badge: Badge.get(:none),
|
||||
skype: "echo123",
|
||||
skype_public: true,
|
||||
last_ip: "0.0.0.0",
|
||||
confirmed: true,
|
||||
last_seen: Time.utc(0).to_datetime
|
||||
last_seen: Time.utc(0).to_datetime,
|
||||
header_scroll: false,
|
||||
utc_time: false,
|
||||
dark: false
|
||||
)
|
||||
deleted_user.update_attribute(:ign, "Steve")
|
||||
|
||||
User.create!(
|
||||
uuid: "ae795aa86327408e92ab25c8a59f3ba1",
|
||||
ign: "jomo",
|
||||
email: "jomo@example.com",
|
||||
password: "123456789", # high seructity!
|
||||
password_confirmation: "123456789",
|
||||
role: Role.get(:superadmin)
|
||||
)
|
||||
18
lib/tasks/create_admin_user.rake
Normal file
18
lib/tasks/create_admin_user.rake
Normal file
@@ -0,0 +1,18 @@
|
||||
desc "Creates a superadmin user. Usage: rake create:create_admin_user[uuid, ign, email, pass]"
|
||||
namespace :create do
|
||||
task :create_admin_user, [:uuid, :ign, :email, :pass] => :environment do |task, args|
|
||||
User.create!(
|
||||
uuid: args.uuid,
|
||||
ign: args.ign,
|
||||
email: args.email,
|
||||
password: args.pass,
|
||||
password_confirmation: args.pass,
|
||||
role: Role.get(:superadmin),
|
||||
header_scroll: false,
|
||||
utc_time: false,
|
||||
dark: false,
|
||||
badge: Badge.get(:none),
|
||||
confirmed: true
|
||||
)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user