diff --git a/app/assets/javascripts/orbitdesktop.js b/app/assets/javascripts/orbitdesktop.js
index fa20b1cc..d83cfa06 100755
--- a/app/assets/javascripts/orbitdesktop.js
+++ b/app/assets/javascripts/orbitdesktop.js
@@ -55,7 +55,7 @@ var orbitDesktop = function(dom){
$(document).ready(function(){o.loadWallpaper(customwallpaper);o.bindDesktopEvents();o.loadIconCache();o.initializeDesktop();});
})
}
- };
+ }
this.changeTheme = function(theme){ // this function is used for changing theme
o.theme = theme;
$.getJSON("/"+o.themefolder+"/"+theme+"/settings/"+theme+".json",function(ts){
@@ -1098,24 +1098,116 @@ var orbitDesktop = function(dom){
}
var widgets = function(){
var bindHandlers = function(){
-
+ $("#widget_list a").click(function(){
+ var sectionid = $(this).attr("for");
+ var widgetid = $(this).parent().parent().attr("for");
+ switch($(this).attr("href")){
+ case "addthis":
+ $this = $(this);
+ o.confirm({
+ message: "Are you sure you want to add this widget?",
+ buttons: ['Yes','No'],
+ highlighted: 1
+ },function(reply){
+ if(reply){
+ $.post("desktop_appstore/widgets_settings",{section:sectionid, widget:widgetid, what:"add"},function(result){
+ if(result[0].success){
+ $this.attr("href","removethis");
+ $targetDom = $this.parent().parent().find("div.status");
+ $parentDom = $this.parent();
+ if($targetDom.find("a").length == 0)
+ $targetDom.html("Status : Installed on");
+ $targetDom.append(" ").append($this);
+ if($parentDom.find("a").length == 0)
+ $parentDom.empty();
+ o.desktopData["home"]="";
+ o.notify("Widget added.","success",2);
+ }else{
+ o.notify(result[0].error,"imp",2);
+ }
+ })
+ }
+ })
+ break;
+ case "removethis":
+ $this = $(this);
+ o.confirm({
+ message: "Are you sure you want to remove this widget?",
+ buttons: ['Yes','No'],
+ highlighted: 2
+ },function(reply){
+ if(reply){
+ $.post("desktop_appstore/widgets_settings",{section:sectionid, widget:widgetid, what:"remove"},function(result){
+ if(result[0].success){
+ $this.attr("href","addthis");
+ $targetDom = $this.parent().parent().find("div.not_status");
+ $parentDom = $this.parent();
+ if($targetDom.html()=="")
+ $targetDom.html("Install on");
+ $targetDom.append(" ").append($this);
+ if($parentDom.find("a").length == 0)
+ $parentDom.html("Status : Downloaded");
+ o.desktopData["home"]="";
+ o.notify("Widget removed.","success",2);
+ }
+ })
+ }
+ })
+ break;
+ }
+ return false;
+ })
}
$("div#apps_store div#panel_r").load("/desktop_appstore/widgets",function(){
$.getJSON("/desktop_appstore/getuserwidgets",function(userwidgets){
- var column = $('
'),
+ var column = $(''),
counter = 1,
li;
$.each(userwidgets,function(i,widge){
- li = $(''+widge.name+'
'+widge.shape+'
');
+ if(!widge.status)widge.status = "Downloaded";
+ var brick = widge.shape.split(' '),
+ bw = parseInt(brick[0].substr(1)),
+ bh = parseInt(brick[1].substr(1)),
+ shp = bw+" X "+bh;
+ li = $(''+widge.name+'
Author : '+widge.author+'
Shape : '+shp+'
Status : '+widge.status+'
');
+ var cur_section_names = new Array();
+ var section_names = new Array();
+ var section_links = new Array();
+ if(widge.section){
+ var s_name_list = "";
+ $.each(widge.section,function(x,sec){
+ $.each(o.sectionList,function(j,s){
+ if(s._id==sec){
+ cur_section_names.push(s.name);
+ s_name_list+= ""+s.name +" ";
+ }
+ })
+ })
+ var section_names = o.getArrayfromJson(o.sectionList,"name");
+ var section_links = o.getArrayfromJson(o.sectionList,"_id");
+ var s_name_list_not = "";
+ $.each(section_names,function(j,sec_name){
+ if($.inArray(sec_name,cur_section_names)==-1){
+ var sec_link = section_links[j];
+ s_name_list_not+= ""+sec_name+" ";
+ }
+ })
+ li.find("div.status").html("Status : Installed on "+s_name_list);
+ if(s_name_list_not)
+ li.find("div.not_status").html("Install on "+s_name_list_not);
+ }else{
+ li.find("div.not_status").html("Install on "+o.sectionList[0].name+", "+o.sectionList[1].name+", "+o.sectionList[2].name+", "+o.sectionList[3].name);
+ }
+ //console.log(section_names);
column.find("ul").append(li);
- if(counter%5==0){
- $("#journal_p div#paper_list div.overview").append(column);
- column = $('');
+ if(counter%4==0){
+ $("#apps_store div#widget_list").append(column);
+ column = $('');
}
counter++;
})
- //alert(column);
$("#apps_store div#widget_list").append(column);
+ bindHandlers();
})
})
}
diff --git a/app/assets/javascripts/orbitdesktopAPI.js b/app/assets/javascripts/orbitdesktopAPI.js
index 51eed919..de093973 100644
--- a/app/assets/javascripts/orbitdesktopAPI.js
+++ b/app/assets/javascripts/orbitdesktopAPI.js
@@ -79,6 +79,13 @@ var orbitDesktopAPI = function(){
});
$confirm.stop(1,1).fadeIn();
};
+ this.getArrayfromJson = function(tjson,key){
+ var tempArray = new Array;
+ $.each(tjson,function(i,val){
+ tempArray.push(val[key]);
+ })
+ return tempArray;
+ }
};
orbitDesktopAPI.prototype.notifyImgPath = "temp";
orbitDesktopAPI.prototype.wallpaperPath = "temp";
diff --git a/app/controllers/desktop_appstore_controller.rb b/app/controllers/desktop_appstore_controller.rb
index 82e27412..d05160c2 100644
--- a/app/controllers/desktop_appstore_controller.rb
+++ b/app/controllers/desktop_appstore_controller.rb
@@ -9,8 +9,89 @@ class DesktopAppstoreController< ApplicationController
end
def getuserwidgets
- @widgets = current_user.desktop_widgets
+ @widgets = current_user.desktop.desktop_widgets
+ @groups = Array.new
+ @sections = current_user.desktop.sections
+
+ @sections.each do |section|
+ @groups << section.groups
+ end
+
+ @widgets.each do |widget|
+ @count = 0;
+ @sectionids = Array.new
+ @groups.each do |group|
+ group.each do |grp|
+ @widge = 0
+ @gid = widget.id.to_s
+ @widge = grp.tiles.where(:data_content.all => [@gid]).count
+ @count = @count + @widge
+ if @widge > 0
+ @sectionids << grp.section_id
+ end
+ end
+ end
+ if @count > 0
+ widget.status = "Installed"
+ widget.section = @sectionids
+ else
+ widget.status = "Downloaded"
+ end
+ end
render :json=>@widgets.to_json
end
-end
\ No newline at end of file
+ def widgets_settings
+ what = params["what"]
+ @widgetid = params["widget"]
+ @sectionid = params["section"]
+ @msg = Array.new
+ case what
+ when "remove"
+ @section = Section.find(@sectionid)
+ @groups = @section.groups
+ @groups.each do |group|
+ @tile = group.tiles.where(:data_content.all => [@widgetid])
+ if @tile.count > 0
+ @thistile = @tile
+ end
+ end
+ @t = Tile.find(@thistile.first.id)
+ @t.delete
+ @msg << {"success"=>true}
+ when "add"
+ @widget = current_user.desktop.desktop_widgets.find(@widgetid)
+ @section = Section.find(@sectionid)
+ @groups = @section.groups
+ @totalwidgets = 0
+ @groups.each do |group|
+ @tile = group.tiles.where(:data_content.all => [@widgetid]).count
+ if @tile > 0
+ @msg << {"success"=>false,"error"=>"Duplicate widget"}
+ else
+ no_of_widgets = group.tiles.where(:data_category.all => ["widget"]).count
+ @totalwidgets = @totalwidgets + no_of_widgets
+ end
+ end
+ if @totalwidgets >= 12
+ @msg << {"success"=>false,"error"=>"Section full"}
+ else
+ wshape = @widget.shape
+ wdata_content = @widgetid
+ wdata_category = "widget"
+ wname = @widget.name
+ if @groups.first.tiles.where(:data_category.all => ["widget"]).count >= 6
+ groupid = @groups.last.id
+ else
+ groupid = @groups.first.id
+ end
+ Tile.create(data_category: wdata_category,data_content: wdata_content, group_id: groupid, position: 10, title: wname, shape: wshape)
+ @msg << {"success"=>true}
+ end
+ end
+
+ render :json=>@msg.to_json
+ end
+
+end
+
diff --git a/app/models/desktop.rb b/app/models/desktop.rb
index e2918adc..e8c1e9c4 100644
--- a/app/models/desktop.rb
+++ b/app/models/desktop.rb
@@ -9,6 +9,7 @@ class Desktop
belongs_to :user
has_many :sections, :autosave => true, :dependent => :destroy
+ has_many :desktop_widgets, :autosave => true, :dependent => :destroy
before_create :initialize_section
diff --git a/app/models/desktop_widget.rb b/app/models/desktop_widget.rb
index b0c0699e..eb0446de 100644
--- a/app/models/desktop_widget.rb
+++ b/app/models/desktop_widget.rb
@@ -5,7 +5,9 @@ class DesktopWidget
field :name
field :author
field :shape
- field :user_id
+ field :desktop_id
+ field :status
+ field :section
- belongs_to :user
+ belongs_to :desktop
end
\ No newline at end of file
diff --git a/app/models/user/user.rb b/app/models/user/user.rb
index aca7959b..c33d64fc 100644
--- a/app/models/user/user.rb
+++ b/app/models/user/user.rb
@@ -19,7 +19,7 @@ class User
has_one :desktop, :autosave => true, :dependent => :destroy
has_many :other_accounts, :autosave => true, :dependent => :destroy
has_many :journals, :autosave => true, :dependent => :destroy
- has_many :desktop_widgets, :autosave => true, :dependent => :destroy
+
belongs_to :role
has_and_belongs_to_many :sub_roles
accepts_nested_attributes_for :attribute_values, :allow_destroy => true
diff --git a/app/views/desktop/appstore/widgets.html.erb b/app/views/desktop/appstore/widgets.html.erb
index 5cbb049b..4fd150c4 100644
--- a/app/views/desktop/appstore/widgets.html.erb
+++ b/app/views/desktop/appstore/widgets.html.erb
@@ -1,8 +1,8 @@
+Your Widgets
-
-
Your Widgets
+
diff --git a/config/routes.rb b/config/routes.rb
index 08320cd2..10a73b21 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -130,6 +130,8 @@ Orbit::Application.routes.draw do
match '/desktop_appstore/appstore'=>'desktop_appstore#appstore'
match '/desktop_appstore/widgets'=>'desktop_appstore#widgets'
match '/desktop_appstore/getuserwidgets'=>'desktop_appstore#getuserwidgets'
+ match '/desktop_appstore/widgets_settings'=>'desktop_appstore#widgets_settings'
+
match '/desktop/temp_func/'=>'desktop#temp_func'