admin_data 1.0.18 → 1.0.19
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/README.md +6 -5
- data/app/controllers/admin_data/base_controller.rb +2 -2
- data/app/controllers/admin_data/feed_controller.rb +3 -0
- data/app/controllers/admin_data/main_controller.rb +1 -1
- data/app/controllers/admin_data/search_controller.rb +11 -9
- data/app/views/admin_data/feed/index.rss.builder +3 -3
- data/app/views/admin_data/main/association/_association_info.html.erb +1 -1
- data/app/views/admin_data/main/association/_belongs_to_info.html.erb +1 -1
- data/app/views/admin_data/main/association/_has_many_info.html.erb +1 -1
- data/app/views/admin_data/main/association/_has_one_info.html.erb +1 -1
- data/app/views/admin_data/main/edit.html.erb +1 -1
- data/app/views/admin_data/main/misc/_modify_record.html.erb +0 -4
- data/app/views/admin_data/main/show.html.erb +1 -1
- data/app/views/admin_data/search/_search_base.html.erb +2 -2
- data/app/views/admin_data/search/search/_advance_search_form.html.erb +25 -16
- data/app/views/admin_data/search/search/_sortby.html.erb +10 -10
- data/app/views/admin_data/search/search/_title.html.erb +1 -1
- data/app/views/admin_data/shared/_header.html.erb +14 -13
- data/lib/admin_data/util.rb +2 -5
- data/lib/admin_data/version.rb +1 -1
- data/lib/css/base.css +17 -0
- data/lib/js/advance_search/advance_search.js +3 -3
- data/lib/js/advance_search/build_first_row.js +1 -1
- data/lib/js/misc/js_util.js +17 -1
- metadata +4 -4
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -1,15 +1,16 @@
|
|
1
|
+
# admin_data #
|
1
2
|
|
2
3
|
# This plugin works with both Rails 2.3.x and Rails 3.
|
3
|
-
*
|
4
|
-
*
|
5
|
-
|
6
|
-
[More info about Rails3](http://github.com/neerajdotname/admin_data/wiki/Installing-admin_data-in-a-Rails-3-project)
|
4
|
+
* [Installing in Rails3 project](http://github.com/neerajdotname/admin_data/wiki/Installing-admin_data-in-a-Rails-3-project)
|
5
|
+
* [Installing in Rails 2.3.x project](https://github.com/neerajdotname/admin_data/wiki/Installing-admin_data-in-a-Rails-2.3.x-project)
|
7
6
|
|
8
7
|
## [Live Demo](http://admin-data-test.heroku.com/admin_data)
|
9
8
|
|
10
9
|
## [Documentation](http://github.com/neerajdotname/admin_data/wiki)
|
11
10
|
|
12
|
-
##
|
11
|
+
## Source Code ##
|
12
|
+
* admin_data works as a gem with Rails 3.x project. Source for that resides in master branch.
|
13
|
+
* admin_data works as a plugin with Rails 2.3.x project. Source code for that resides in branch called [rails2](https://github.com/neerajdotname/admin_data/tree/rails2) .
|
13
14
|
|
14
15
|
#Test#
|
15
16
|
|
@@ -20,7 +20,7 @@ class AdminData::BaseController < ApplicationController
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def ensure_is_allowed_to_view
|
23
|
-
render :text => '
|
23
|
+
render :text => 'not authorized' unless admin_data_is_allowed_to_view?
|
24
24
|
end
|
25
25
|
|
26
26
|
def ensure_is_allowed_to_view_klass
|
@@ -49,7 +49,7 @@ class AdminData::BaseController < ApplicationController
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def build_klasses
|
52
|
-
# if is_allowed_to_view_klass option is passed then
|
52
|
+
# if is_allowed_to_view_klass option is passed then global constant can't be used since
|
53
53
|
# list of klasses need to be built for each user. It will slow down the speed a bit since
|
54
54
|
# every single the list needs to be built
|
55
55
|
if AdminData::Config.setting[:is_allowed_to_view_klass]
|
@@ -9,6 +9,9 @@ class AdminData::FeedController < AdminData::BaseController
|
|
9
9
|
|
10
10
|
begin
|
11
11
|
@klass = AdminData::Util.camelize_constantize(params[:klasss])
|
12
|
+
@title = "Feeds from admin_data #{@klass.name}"
|
13
|
+
@description = "feeds from AdminData #{@klass.name}"
|
14
|
+
@records = @klass.find(:all, :order => "#{@klass.primary_key} desc", :limit => 100)
|
12
15
|
rescue NameError => e
|
13
16
|
render :text => "No constant was found with name #{params[:klasss]}" and return
|
14
17
|
end
|
@@ -117,7 +117,7 @@ class AdminData::MainController < AdminData::BaseController
|
|
117
117
|
|
118
118
|
@model = @klass.send('find', :first, :conditions => condition)
|
119
119
|
unless @model
|
120
|
-
render :text => "
|
120
|
+
render :text => "#{@klass.name} not found: #{params[:id]}", :status => :not_found
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__) , '..', '..', '..', 'lib', 'admin_data', 'search')
|
2
2
|
|
3
|
-
class AdminData::SearchController
|
3
|
+
class AdminData::SearchController < AdminData::BaseController
|
4
4
|
|
5
5
|
include Search
|
6
6
|
|
@@ -11,7 +11,7 @@ class AdminData::SearchController < AdminData::BaseController
|
|
11
11
|
before_filter :ensure_is_allowed_to_view_klass
|
12
12
|
before_filter :ensure_valid_children_klass, :only => [:quick_search]
|
13
13
|
before_filter :ensure_is_authorized_for_update_opration, :only => [:advance_search]
|
14
|
-
before_filter :
|
14
|
+
before_filter :set_column_type_info, :only => [:advance_search]
|
15
15
|
|
16
16
|
def quick_search
|
17
17
|
@page_title = "Search #{@klass.name.underscore}"
|
@@ -28,7 +28,7 @@ class AdminData::SearchController < AdminData::BaseController
|
|
28
28
|
params[:query] = params[:query].strip unless params[:query].blank?
|
29
29
|
cond = build_quick_search_conditions(@klass, params[:query])
|
30
30
|
h = { :page => params[:page], :per_page => per_page, :order => @order, :conditions => cond }
|
31
|
-
@records = @klass.paginate(h)
|
31
|
+
@records = @klass.unscoped.paginate(h)
|
32
32
|
end
|
33
33
|
respond_to {|format| format.html}
|
34
34
|
end
|
@@ -46,8 +46,9 @@ class AdminData::SearchController < AdminData::BaseController
|
|
46
46
|
format.html { render }
|
47
47
|
format.js {
|
48
48
|
|
49
|
-
|
50
|
-
|
49
|
+
unless hash[:errors].blank?
|
50
|
+
file = "#{plugin_dir}/app/views/admin_data/search/search/_errors.html.erb"
|
51
|
+
render :file => file, :locals => {:errors => errors}
|
51
52
|
return
|
52
53
|
end
|
53
54
|
if params[:admin_data_advance_search_action_type] == 'destroy'
|
@@ -61,7 +62,8 @@ class AdminData::SearchController < AdminData::BaseController
|
|
61
62
|
if @success_message
|
62
63
|
render :json => {:success => @success_message }
|
63
64
|
else
|
64
|
-
|
65
|
+
file = "/admin_data/search/search/listing.html.erb"
|
66
|
+
render :partial => file, :locals => {:klass => @klass}, :layout => false
|
65
67
|
end
|
66
68
|
}
|
67
69
|
end
|
@@ -109,13 +111,13 @@ class AdminData::SearchController < AdminData::BaseController
|
|
109
111
|
params[:sortby] || "#{@klass.send(:table_name)}.#{@klass.send(:primary_key)} desc"
|
110
112
|
end
|
111
113
|
|
112
|
-
def
|
113
|
-
|
114
|
+
def set_column_type_info
|
115
|
+
column_type_info = @klass.columns.collect { |column|
|
114
116
|
#JSLint complains if a hash has key named boolean. So I am changing the key to booleant
|
115
117
|
column_type = (column.type.to_s == 'boolean') ? 'booleant' : column.type.to_s
|
116
118
|
%Q{ "#{column.name}":"#{column_type}" }
|
117
119
|
}.join(',')
|
118
|
-
@
|
120
|
+
@column_type_info = "{#{column_type_info}}"
|
119
121
|
end
|
120
122
|
|
121
123
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
xml.instruct! :xml, :version => "1.0"
|
2
2
|
xml.rss(:version => "2.0" ){
|
3
3
|
xml.channel{
|
4
|
-
xml.title(
|
4
|
+
xml.title(@title)
|
5
5
|
xml.link(request.host_with_port)
|
6
|
-
xml.description(
|
6
|
+
xml.description(@description)
|
7
7
|
xml.language('en-us')
|
8
8
|
h = {:order => "#{@klass.primary_key} desc", :limit => 100}
|
9
|
-
@
|
9
|
+
@records.each do |record|
|
10
10
|
xml.item do
|
11
11
|
xml.title("#{@klasss} id: #{record.id}")
|
12
12
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="block rounded">
|
2
2
|
<h3>Association Information</h3>
|
3
3
|
<div class='content association_info'>
|
4
|
-
<% if AdminData::Util.
|
4
|
+
<% if AdminData::Util.association_info_size(klass) %>
|
5
5
|
<%= render 'admin_data/main/association/belongs_to_info' , :klass => klass, :model => model %>
|
6
6
|
<%= render 'admin_data/main/association/has_one_info', :klass => klass, :model => model %>
|
7
7
|
<%= render 'admin_data/main/association/has_many_info' , :klass => klass, :model => model %>
|
@@ -1,6 +1,4 @@
|
|
1
1
|
<% if controller.send(:admin_data_is_allowed_to_update?) %>
|
2
|
-
<% @help = link_to('[?]','http://neerajdotname.github.com/admin_data/#deletevs-destroy') %>
|
3
|
-
|
4
2
|
<div class="block rounded">
|
5
3
|
<h3>Modify Record</h3>
|
6
4
|
<div style='padding-left:15px'>
|
@@ -10,12 +8,10 @@
|
|
10
8
|
<p>
|
11
9
|
<%= link_to 'Delete', del_admin_data_on_k_path(:klass => klass.name.underscore, :id => model) ,
|
12
10
|
{ :confirm => ' You are deleting (not destroying) a record. Are you sure?', :method => :delete} %>
|
13
|
-
<%= @help %>
|
14
11
|
</p>
|
15
12
|
<p>
|
16
13
|
<%= link_to "Destroy", admin_data_on_k_path(:klass => klass.name.underscore, :id => model),
|
17
14
|
{ :confirm => 'You are destroying a record. Are you sure?', :method => :delete} %>
|
18
|
-
<%= @help %>
|
19
15
|
</p>
|
20
16
|
</div>
|
21
17
|
</div>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<div class="block" id="block-text">
|
2
2
|
|
3
3
|
<div>
|
4
|
-
<h1
|
5
|
-
<h3
|
4
|
+
<h1 class='listing_klass'> Listing <%=klass.name%></h1>
|
5
|
+
<h3 class='total_records_info_klass'><%=total_records_info(klass)%></h3>
|
6
6
|
<div class='clear'></div>
|
7
7
|
</div>
|
8
8
|
|
@@ -3,33 +3,42 @@
|
|
3
3
|
:class => 'form search_form',
|
4
4
|
:id => 'advance_search_form') %>
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
<div id='advance_search' class='search_box'>
|
7
|
+
<table id='advance_search_table' class='advtable'>
|
8
|
+
</table>
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
</div>
|
18
|
-
<div class='clear'></div>
|
19
|
-
<input type="submit" value="Search" class='submit_search' />
|
10
|
+
<div class='sortby_umbrella'>
|
11
|
+
<div class='group'>
|
12
|
+
<div class='sortby_text'>Sort by</div>
|
13
|
+
<select name='sortby' id='sortby'>
|
14
|
+
<%= AdminData::Util.build_sort_options(klass,params[:sortby]).html_safe %>
|
15
|
+
</select>
|
16
|
+
<br />
|
20
17
|
</div>
|
21
|
-
|
18
|
+
<div class='clear'></div>
|
19
|
+
<input type="submit" value="Search" class='submit_search' />
|
20
|
+
</div>
|
21
|
+
</div>
|
22
22
|
|
23
23
|
</form>
|
24
24
|
|
25
|
-
<div style='display:none;' id='
|
26
|
-
<%=@
|
25
|
+
<div style='display:none;' id='primary_column_type_info'>
|
26
|
+
<%=@column_type_info%>
|
27
|
+
</div>
|
28
|
+
<div style='display:none;' id='association_info'>
|
29
|
+
<%=@association_info%>
|
27
30
|
</div>
|
28
31
|
|
29
32
|
<style>
|
30
33
|
.sortby_umbrella {
|
31
34
|
margin-top: 6px;
|
32
35
|
}
|
36
|
+
.sortby_umbrella .group {
|
37
|
+
padding-left: 20px;
|
38
|
+
}
|
39
|
+
.sortby_umbrella .sortby_text {
|
40
|
+
font-size: 16px;
|
41
|
+
}
|
33
42
|
.submit_search {
|
34
43
|
margin-left: 15px;
|
35
44
|
margin-right: 20px;
|
@@ -4,15 +4,15 @@
|
|
4
4
|
</select>
|
5
5
|
|
6
6
|
<style>
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
.sortby_label {
|
8
|
+
float: left;
|
9
|
+
vertical-align: bottom;
|
10
|
+
margin-left: 40px;
|
11
|
+
width: 70px;
|
12
|
+
}
|
13
|
+
#sortyby {
|
14
|
+
width: 200px;
|
15
|
+
float: left;
|
16
|
+
}
|
17
17
|
</style>
|
18
18
|
|
@@ -1,19 +1,20 @@
|
|
1
1
|
<div id="header">
|
2
|
-
|
3
|
-
</h1>
|
2
|
+
<h1> </h1>
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
<% label = "Back to Site " + image_tag('https://github.com/neerajdotname/admin_data/raw/
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
<ul id='subnav'>
|
5
|
+
<li>
|
6
|
+
<% label = "Back to Site " + image_tag('https://github.com/neerajdotname/admin_data/raw/master/public/images/site.png', :width => '12') %>
|
7
|
+
<%= link_to label.html_safe, '/' %>
|
8
|
+
</li>
|
9
|
+
<li>
|
10
|
+
<%= link_to AdminData::Config.setting[:app_name] , admin_data_index_path %>
|
11
|
+
</li>
|
12
|
+
</ul>
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
<div id='model_drop_down'>
|
15
|
+
<%= render '/admin_data/shared/drop_down_klasses', :drop_down_for_klasses => drop_down_for_klasses %>
|
16
|
+
</div>
|
16
17
|
|
17
|
-
|
18
|
+
<div class='clear'></div>
|
18
19
|
|
19
20
|
</div>
|
data/lib/admin_data/util.rb
CHANGED
@@ -193,11 +193,8 @@ class AdminData::Util
|
|
193
193
|
associations_for(klass, :has_and_belongs_to_many).map(&:name).map(&:to_s)
|
194
194
|
end
|
195
195
|
|
196
|
-
def self.
|
197
|
-
|
198
|
-
(has_many_what(klass).size > 0) ||
|
199
|
-
(has_one_what(klass).size > 0) ||
|
200
|
-
(habtm_what(klass).size > 0)
|
196
|
+
def self.association_info_size(k)
|
197
|
+
belongs_to_what(k).any? || has_many_what(k).any? || has_one_what(k).any? || habtm_what(k).any?
|
201
198
|
end
|
202
199
|
|
203
200
|
def self.string_representation_of_data(value)
|
data/lib/admin_data/version.rb
CHANGED
data/lib/css/base.css
CHANGED
@@ -1089,3 +1089,20 @@ ul#subnav li a:hover {
|
|
1089
1089
|
font-weight: bold;
|
1090
1090
|
font-size: 18px;
|
1091
1091
|
}
|
1092
|
+
#main h2.search_path {
|
1093
|
+
float:left;
|
1094
|
+
font-weight:bold;
|
1095
|
+
font-size: 35px;
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
.listing_klass {
|
1099
|
+
float:left;
|
1100
|
+
font-weight:bold;
|
1101
|
+
font-size: 35px;
|
1102
|
+
}
|
1103
|
+
|
1104
|
+
.total_records_info_klass {
|
1105
|
+
float:left;
|
1106
|
+
margin:22px 0 0 10px;
|
1107
|
+
color:gray;
|
1108
|
+
}
|
@@ -5,7 +5,7 @@ AdminData.advanceSearch = {
|
|
5
5
|
buildFirstRow: function() {
|
6
6
|
|
7
7
|
var img = $('<img />', {
|
8
|
-
src: 'https://github.com/neerajdotname/admin_data/raw/
|
8
|
+
src: 'https://github.com/neerajdotname/admin_data/raw/master/public/images/add.png'
|
9
9
|
});
|
10
10
|
|
11
11
|
$('#advance_search_table').append(this.buildRow())
|
@@ -42,7 +42,7 @@ AdminData.advanceSearch = {
|
|
42
42
|
|
43
43
|
buildCol4: function() {
|
44
44
|
var img = $('<img />', {
|
45
|
-
src: 'https://github.com/neerajdotname/admin_data/raw/
|
45
|
+
src: 'https://github.com/neerajdotname/admin_data/raw/master/public/images/no.png'
|
46
46
|
});
|
47
47
|
|
48
48
|
return $('<td />').append($('<a />', {
|
@@ -63,7 +63,7 @@ AdminData.advanceSearch = {
|
|
63
63
|
currentRowNumber = 1;
|
64
64
|
$(document).data('currentRowNumber', currentRowNumber);
|
65
65
|
} else {
|
66
|
-
currentRowNumber = parseInt(currentRowNumber) + 1;
|
66
|
+
currentRowNumber = parseInt(currentRowNumber, 10) + 1;
|
67
67
|
$(document).data('currentRowNumber', currentRowNumber);
|
68
68
|
}
|
69
69
|
|
data/lib/js/misc/js_util.js
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
var AdminData = AdminData || {};
|
2
2
|
|
3
|
+
/**
|
4
|
+
* A general Utility
|
5
|
+
* @namespace AdminData
|
6
|
+
* @class jsUtil
|
7
|
+
*/
|
3
8
|
AdminData.jsUtil = {
|
4
9
|
|
5
10
|
// TODO since advance search was not working with util confirm , window.confirm is used directly
|
@@ -21,7 +26,12 @@ AdminData.jsUtil = {
|
|
21
26
|
$('.colorize tr:even').addClass('even');
|
22
27
|
},
|
23
28
|
|
24
|
-
|
29
|
+
/**
|
30
|
+
* Returns the input date in string format.
|
31
|
+
*
|
32
|
+
* @param {date} input date
|
33
|
+
* @return {string} The string value of input date
|
34
|
+
*/
|
25
35
|
dateToString: function(date) {
|
26
36
|
var month = (date.getMonth() + 1).toString();
|
27
37
|
var day = date.getDate().toString();
|
@@ -31,6 +41,12 @@ AdminData.jsUtil = {
|
|
31
41
|
return day + "-" + months[month - 1] + "-" + date.getFullYear();
|
32
42
|
},
|
33
43
|
|
44
|
+
/**
|
45
|
+
* Generate a random number between 1 and 10000000
|
46
|
+
*
|
47
|
+
* @return {Integer} a random Integer
|
48
|
+
*
|
49
|
+
*/
|
34
50
|
randomNumber: function() {
|
35
51
|
var maxVal = 100000000,
|
36
52
|
minVal = 1;
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: admin_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 49
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 19
|
10
|
+
version: 1.0.19
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Neeraj Singh
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-17 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|