diff --git a/src/components/com_tjdashboard/administrator/views/widget/tmpl/edit.php b/src/components/com_tjdashboard/administrator/views/widget/tmpl/edit.php index b82f0e07..3159e279 100644 --- a/src/components/com_tjdashboard/administrator/views/widget/tmpl/edit.php +++ b/src/components/com_tjdashboard/administrator/views/widget/tmpl/edit.php @@ -17,6 +17,8 @@ JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); +JHtml::_('formbehavior.chosen', 'select'); + $app = JFactory::getApplication(); $input = $app->input; $document = JFactory::getDocument(); diff --git a/src/components/com_tjdashboard/site/assets/css/dashboard.css b/src/components/com_tjdashboard/site/assets/css/dashboard.css index 9de0a1c9..5ee216e4 100644 --- a/src/components/com_tjdashboard/site/assets/css/dashboard.css +++ b/src/components/com_tjdashboard/site/assets/css/dashboard.css @@ -7,4 +7,107 @@ font-size: 1.4em; font-weight: bold; line-height: 25px; -} \ No newline at end of file +} +.widget-boxes{ + .filter-widget{ + min-height: 100px; + } + .widget-label { + margin-left: -15px !important; + font-size: 30px; + } + .widget-label-title{ + @extend .widget-label; + margin-left: -30px; + margin-top: 0 !important; + } + .panel{ + width: 100%; + height: 100%; + border: solid 1px $primary-blue-400; + .panel-heading{ + color: $primary-white-600; + background-color: $primary-blue-400; + border-color: $primary-blue-400; + } + .panel-body{ + min-height: 100px; + } + } +} +.dashboard-filter{ + .col-sm-12{ + padding: 0 !important; + } + .widget-title{ + display: none; + } + .panel{ + border: none; + box-shadow: none; + .panel-body{ + padding: 0; + } + .panel-heading{ + border: none; + background: none; + } + } +} +.dashboard-widget-row-1{ + .panel-body{ + min-height: 0 !important; + } +} +@include respond-above(sm) { + .widget-boxes{ + display: flex; + padding: 15px 5px; + clear: both; + .col-sm-3{ + padding-left: 0px; + } + .panel{ + margin-bottom: 7px; + } + } + .dashboard-widget-row-1{ + .panel-body{ + padding-right: 0 !important; + } + } +} +.dashboard-widget-label{ + padding:0 10px !important; + display: inline-block; + clear: inherit; + .widget-title{ + display: none; + } + .panel{ + border: none; + box-shadow: none; + .panel-heading{ + border: none; + background: none; + } + } +} +.loader-spin-blue{ + border:5px solid #22b8f0; + border-radius:50%; + border-top:5px solid #ccc; + width:35px; + height:35px; + -webkit-animation:spin 2s linear infinite; + animation:spin 2s linear infinite; + position:absolute;left:50%;top:50% +} +@-webkit-keyframes spin{ + 0%{-webkit-transform:rotate(0deg)} + 100%{-webkit-transform:rotate(360deg)} +} +@keyframes spin{ + 0%{transform:rotate(0deg)} + 100%{transform:rotate(360deg)} +} diff --git a/src/components/com_tjdashboard/site/assets/js/tjDashboardService.js b/src/components/com_tjdashboard/site/assets/js/tjDashboardService.js index 263d07f8..2270d9cf 100644 --- a/src/components/com_tjdashboard/site/assets/js/tjDashboardService.js +++ b/src/components/com_tjdashboard/site/assets/js/tjDashboardService.js @@ -32,11 +32,11 @@ var TJDashboardService = { return this.postData(root_url + this.api_dashboard_url + id, params); }, - getWidget: function(id) { + getWidget: function(id, extraParams=null) { var params = {}; params.method = 'GET'; - /** global: root_url */ - return this.postData(root_url + this.api_widget_url + id, params); + /** global: root_url ; extraParams: to send extra parameters in URLs*/ + return this.postData(root_url + this.api_widget_url + id, params, extraParams); }, getRenderers: function(selectedDataPlugin) { @@ -52,6 +52,6 @@ var TJDashboardService = { var params = {}; formData.pluginName = selectedDataPlugin; /** global: root_url */ - return this.postData(root_url + this.get_widget_params, params, formData); + return this.postData(root_url + this.get_widget_params, params, formData); } } diff --git a/src/components/com_tjdashboard/site/assets/js/tjDashboardService.min.js b/src/components/com_tjdashboard/site/assets/js/tjDashboardService.min.js index bcc641fe..a1f334a8 100644 --- a/src/components/com_tjdashboard/site/assets/js/tjDashboardService.min.js +++ b/src/components/com_tjdashboard/site/assets/js/tjDashboardService.min.js @@ -1 +1 @@ -var TJDashboardService={api_dashboard_url:"index.php?option=com_api&app=tjdashboard&resource=dashboard&id=",api_widget_url:"index.php?option=com_api&app=tjdashboard&resource=widget&id=",get_renderers_url:"index.php?option=com_tjdashboard&task=widget.getSupportedRenderers",get_widget_params:"index.php?option=com_tjdashboard&task=widget.getWidgetParams",postData:function(t,a,e){return a.url=t,a.data=e,a.headers={"x-auth":"session"},a.type=void 0!==a.type?a.type:"POST",a.dataType=void 0!==a.datatype?a.datatype:"json",jQuery.ajax(a)},getDashboard:function(t){var a={method:"GET"};return this.postData(root_url+this.api_dashboard_url+t,a)},getWidget:function(t){var a={method:"GET"};return this.postData(root_url+this.api_widget_url+t,a)},getRenderers:function(t){var a={};return a.pluginName=t,this.postData(root_url+this.get_renderers_url,{},a)},getWidgetParams:function(t){var a={};return a.pluginName=t,this.postData(root_url+this.get_widget_params,{},a)}}; \ No newline at end of file +var TJDashboardService={api_dashboard_url:"index.php?option=com_api&app=tjdashboard&resource=dashboard&id=",api_widget_url:"index.php?option=com_api&app=tjdashboard&resource=widget&id=",get_renderers_url:"index.php?option=com_tjdashboard&task=widget.getSupportedRenderers",get_widget_params:"index.php?option=com_tjdashboard&task=widget.getWidgetParams",postData:function(t,a,e){return a.url=t,a.data=e,a.headers={"x-auth":"session"},a.type=void 0!==a.type?a.type:"POST",a.dataType=void 0!==a.datatype?a.datatype:"json",jQuery.ajax(a)},getDashboard:function(t){var a={method:"GET"};return this.postData(root_url+this.api_dashboard_url+t,a)},getWidget:function(t,a=null){var e={method:"GET"};return this.postData(root_url+this.api_widget_url+t,e,a)},getRenderers:function(t){var a={};return a.pluginName=t,this.postData(root_url+this.get_renderers_url,{},a)},getWidgetParams:function(t){var a={};return a.pluginName=t,this.postData(root_url+this.get_widget_params,{},a)}}; diff --git a/src/components/com_tjdashboard/site/assets/js/tjDashboardUI.js b/src/components/com_tjdashboard/site/assets/js/tjDashboardUI.js index 735bfb81..9444a1a2 100644 --- a/src/components/com_tjdashboard/site/assets/js/tjDashboardUI.js +++ b/src/components/com_tjdashboard/site/assets/js/tjDashboardUI.js @@ -14,6 +14,7 @@ var TJDashboardUI = { var promise = TJDashboardService.getDashboard(id); promise.done(function(response) { + if(!response.data.dashboard_id) { return false; @@ -29,42 +30,86 @@ var TJDashboardUI = { var i = 0; var j = 1; - jQuery('
').appendTo('.tjdashboard'); + jQuery('
').appendTo('.tjdashboard'); jQuery.each (response.data.widget_data, function(index, value) { var colorClass = "panel-default"; var icon = ""; + var filterClass = ""; + var groupHeadClass = ""; + var titleLink = ""; if(value.params) { try { - value.params = JSON.parse(value.params); - - if(value.params.color){ - colorClass=value.params.color; - } - - if(value.params.icon){ - icon = value.params.icon; - } - } - catch(e) - { - value.params = {}; - } + value.params = JSON.parse(value.params); + + if(value.params.color){ + colorClass=value.params.color; + } + + if(value.params.icon){ + icon = value.params.icon; + } + + if(value.params.filter!=undefined && (value.params.filter == true)) + { + filterClass = " filter-widget"; + } + + if(value.params.grouping!=undefined && (value.params.grouping == true)) + { + groupHeadClass = " dashboard-widget-label"; + } + + if(value.params.titlelink!=undefined && (value.params.titlelink !== '')) + { + titleLink = value.params.titlelink; + } + } + catch(e) + { + value.params = {}; + } + } + + if (parseInt(value.size) === 12 && j > 1) + { + j++; + jQuery('
').appendTo('.tjdashboard'); + divSpan = 0; } - jQuery('
'+value.title+'
').appendTo('.dashboard-widget-row-'+j); + var widgetPanel = '
'; + + if (jQuery.trim(titleLink) !='') + { + widgetPanel += ''; + } + + widgetPanel += '' + value.title + ''; + + if (jQuery.trim(titleLink) !='') + { + widgetPanel += ''; + } + + widgetPanel += '
'; + + jQuery(widgetPanel).appendTo('.dashboard-widget-row-'+j); + + // To display loader + jQuery('#dashboard-widget-'+value.dashboard_widget_id).html(''); TJDashboardUI.initWidget(value); i++; divSpan = parseInt(divSpan) + parseInt(value.size); - if (divSpan === 12 && response.data.widget_data.length !== i) + if (divSpan >= 12 && response.data.widget_data.length !== i) { j++; - jQuery('
').appendTo('.tjdashboard'); + jQuery('
').appendTo('.tjdashboard'); divSpan = 0; } @@ -78,10 +123,10 @@ var TJDashboardUI = { }); }, - initWidget : function(widgetData){ + initWidget : function(widgetData, extraParams = null){ /** global: TJDashboardService */ - var promise = TJDashboardService.getWidget(widgetData.dashboard_widget_id); + var promise = TJDashboardService.getWidget(widgetData.dashboard_widget_id, extraParams); promise.done(function(response) { if(!response.data.dashboard_widget_id) @@ -114,7 +159,7 @@ var TJDashboardUI = { var linkArrayCount = 0; var renderData = JSON.parse(sourceData['data']); var showLinks =''; - + if (renderData.links) { linkArrayCount = renderData.links.length; @@ -153,7 +198,7 @@ var TJDashboardUI = { _addJsFiles: function(jsObj,method,sourceData,libraryClassName){ jQuery.each(jsObj,function(index,value){ jQuery.getScript(value, function() { - window[libraryClassName].renderData(method,sourceData); + window[libraryClassName].renderData(method,sourceData); }); }); }, @@ -190,7 +235,7 @@ var TJDashboardUI = { }); jQuery('#jform_renderer_plugin').val(defaultValue); }); - + var promiseParams = TJDashboardService.getWidgetParams(selectedDataPlugin); promiseParams.done(function(response) { jQuery('#jform_params').val(response.data); @@ -201,6 +246,27 @@ var TJDashboardUI = { var defaultValue = jQuery('#jform_size').val(); jQuery('#jform_size').replaceWith(''); jQuery('#jform_size').val(defaultValue); - } + }, + widgetListener: function(){ + var widgetData = {'dashboard_widget_id':0,'params':''}; + var formData = jQuery(".widget-filters").serialize(); + var widgetIds = []; + var id = ''; + jQuery(".filter-widget").each(function() { + id = jQuery(this).data('dashboard-widget-id'); + if (jQuery.inArray(id, widgetIds) == -1) + { + jQuery('#dashboard-widget-'+id).html(''); + + widgetIds.push(id); + widgetData.dashboard_widget_id = id; + TJDashboardUI.initWidget(widgetData, formData); + } + }); + } } + +jQuery(document).on("change", ".widget-filters", function () { + TJDashboardUI.widgetListener(); +}); diff --git a/src/components/com_tjdashboard/site/assets/js/tjDashboardUI.min.js b/src/components/com_tjdashboard/site/assets/js/tjDashboardUI.min.js index ba8822d4..e4b6da56 100644 --- a/src/components/com_tjdashboard/site/assets/js/tjDashboardUI.min.js +++ b/src/components/com_tjdashboard/site/assets/js/tjDashboardUI.min.js @@ -1 +1 @@ -var TJDashboardUI={initDashboard:function(a){TJDashboardService.getDashboard(a).done(function(a){if(!a.data.dashboard_id)return!1;if(a.data.widget_data.length<=0)return jQuery('
'+Joomla.JText._("COM_TJDASHBOARD_WIDGETS_NOTSHOW_ERROR_MESSAGE")+"
").appendTo(".tjdashboard"),!1;var e=0,r=0,d=1;return jQuery('
').appendTo(".tjdashboard"),jQuery.each(a.data.widget_data,function(i,t){var o="panel-default",n="";if(t.params)try{t.params=JSON.parse(t.params),t.params.color&&(o=t.params.color),t.params.icon&&(n=t.params.icon)}catch(a){t.params={}}jQuery('
'+t.title+'
').appendTo(".dashboard-widget-row-"+d),TJDashboardUI.initWidget(t),r++,12===(e=parseInt(e)+parseInt(t.size))&&a.data.widget_data.length!==r&&(d++,jQuery('
').appendTo(".tjdashboard"),e=0),a.data.widget_data.length===r&&jQuery("
").appendTo(".tjdashboard")}),!0})},initWidget:function(a){TJDashboardService.getWidget(a.dashboard_widget_id).done(function(e){if(!e.data.dashboard_widget_id)return jQuery('
'+Joomla.JText._("COM_TJDASHBOARD_NO_DATA_AVAILABLE_MESSAGE")+"
").appendTo("#dashboard-widget-"+a.dashboard_widget_id),!1;if(!TJDashboardUI._validWidget(e.data.widget_render_data)||0==e.data.widget_render_data.length)return jQuery('
'+Joomla.JText._("COM_TJDASHBOARD_NO_DATA_AVAILABLE_MESSAGE")+"
").appendTo("#dashboard-widget-"+e.data.dashboard_widget_id),!1;jQuery(window).trigger("resize");var r=[];r.element="dashboard-widget-"+e.data.dashboard_widget_id,r.data=e.data.widget_render_data,r.params=a.params;var d=e.data.renderer_plugin.split("."),i=d[0],t=d[1];if(!r&&!e.data.renderer_plugin)return!1;var o=[],n=0,s=JSON.parse(r.data),_="";if(s.links){n=s.links.length,o=s.links;for(var l=0;l'+o[l].title+" ";jQuery("#view-all-"+e.data.dashboard_widget_id).replaceWith(''+_+"")}var u="TJDashboard"+TJDashboardUI._jsUcFirst(i);return TJDashboardUI._addCssFiles(e.data.widget_css),TJDashboardUI._addJsFiles(e.data.widget_js,t,r,u),!0})},_addCssFiles:function(a){jQuery.each(a,function(a,e){var r=document.createElement("link");r.href=e,r.type="text/css",r.rel="stylesheet",0==jQuery.find("link [href='"+e+"']").length&&jQuery("head").append(r)})},_addJsFiles:function(a,e,r,d){jQuery.each(a,function(a,i){jQuery.getScript(i,function(){window[d].renderData(e,r)})})},_validWidget:function(a){try{JSON.parse(a)}catch(a){return!1}return!0},_jsUcFirst:function(a){return a.charAt(0).toUpperCase()+a.slice(1)},_setRenderers:function(){var a=jQuery("#jform_data_plugin").val(),e=jQuery("#jform_renderer_plugin").val(),r=TJDashboardService.getRenderers(a);jQuery("#jform_renderer_plugin").replaceWith('"),jQuery("#jform_renderer_plugin").find("option").not(":first").remove(),r.done(function(a){var r=jQuery("#jform_renderer_plugin");jQuery.each(a.data,function(a,e){r.append(new Option(e,a))}),jQuery("#jform_renderer_plugin").val(e)}),TJDashboardService.getWidgetParams(a).done(function(a){jQuery("#jform_params").val(a.data)})},_setSize:function(){var a=jQuery("#jform_size").val();jQuery("#jform_size").replaceWith('"),jQuery("#jform_size").val(a)}}; \ No newline at end of file +var TJDashboardUI={initDashboard:function(a){TJDashboardService.getDashboard(a).done(function(a){if(!a.data.dashboard_id)return!1;if(a.data.widget_data.length<=0)return jQuery('
'+Joomla.JText._("COM_TJDASHBOARD_WIDGETS_NOTSHOW_ERROR_MESSAGE")+"
").appendTo(".tjdashboard"),!1;var e=0,r=0,d=1;return jQuery('
').appendTo(".tjdashboard"),jQuery.each(a.data.widget_data,function(i,t){var s="panel-default",n="",o="",l="",_="";if(t.params)try{t.params=JSON.parse(t.params),t.params.color&&(s=t.params.color),t.params.icon&&(n=t.params.icon),null!=t.params.filter&&1==t.params.filter&&(o=" filter-widget"),null!=t.params.grouping&&1==t.params.grouping&&(l=" dashboard-widget-label"),null!=t.params.titlelink&&""!==t.params.titlelink&&(_=t.params.titlelink)}catch(a){t.params={}}12===parseInt(t.size)&&d>1&&(d++,jQuery('
').appendTo(".tjdashboard"),e=0);var u='
';""!=jQuery.trim(_)&&(u+=''),u+=''+t.title+"",""!=jQuery.trim(_)&&(u+=""),u+='
',jQuery(u).appendTo(".dashboard-widget-row-"+d),jQuery("#dashboard-widget-"+t.dashboard_widget_id).html(''),TJDashboardUI.initWidget(t),r++,(e=parseInt(e)+parseInt(t.size))>=12&&a.data.widget_data.length!==r&&(d++,jQuery('
').appendTo(".tjdashboard"),e=0),a.data.widget_data.length===r&&jQuery("
").appendTo(".tjdashboard")}),!0})},initWidget:function(a,e=null){TJDashboardService.getWidget(a.dashboard_widget_id,e).done(function(e){if(!e.data.dashboard_widget_id)return jQuery('
'+Joomla.JText._("COM_TJDASHBOARD_NO_DATA_AVAILABLE_MESSAGE")+"
").appendTo("#dashboard-widget-"+a.dashboard_widget_id),!1;if(!TJDashboardUI._validWidget(e.data.widget_render_data)||0==e.data.widget_render_data.length)return jQuery('
'+Joomla.JText._("COM_TJDASHBOARD_NO_DATA_AVAILABLE_MESSAGE")+"
").appendTo("#dashboard-widget-"+e.data.dashboard_widget_id),!1;jQuery(window).trigger("resize");var r=[];r.element="dashboard-widget-"+e.data.dashboard_widget_id,r.data=e.data.widget_render_data,r.params=a.params;var d=e.data.renderer_plugin.split("."),i=d[0],t=d[1];if(!r&&!e.data.renderer_plugin)return!1;var s=[],n=0,o=JSON.parse(r.data),l="";if(o.links){n=o.links.length,s=o.links;for(var _=0;_'+s[_].title+" ";jQuery("#view-all-"+e.data.dashboard_widget_id).replaceWith(''+l+"")}var u="TJDashboard"+TJDashboardUI._jsUcFirst(i);return TJDashboardUI._addCssFiles(e.data.widget_css),TJDashboardUI._addJsFiles(e.data.widget_js,t,r,u),!0})},_addCssFiles:function(a){jQuery.each(a,function(a,e){var r=document.createElement("link");r.href=e,r.type="text/css",r.rel="stylesheet",0==jQuery.find("link [href='"+e+"']").length&&jQuery("head").append(r)})},_addJsFiles:function(a,e,r,d){jQuery.each(a,function(a,i){jQuery.getScript(i,function(){window[d].renderData(e,r)})})},_validWidget:function(a){try{JSON.parse(a)}catch(a){return!1}return!0},_jsUcFirst:function(a){return a.charAt(0).toUpperCase()+a.slice(1)},_setRenderers:function(){var a=jQuery("#jform_data_plugin").val(),e=jQuery("#jform_renderer_plugin").val(),r=TJDashboardService.getRenderers(a);jQuery("#jform_renderer_plugin").replaceWith('"),jQuery("#jform_renderer_plugin").find("option").not(":first").remove(),r.done(function(a){var r=jQuery("#jform_renderer_plugin");jQuery.each(a.data,function(a,e){r.append(new Option(e,a))}),jQuery("#jform_renderer_plugin").val(e)}),TJDashboardService.getWidgetParams(a).done(function(a){jQuery("#jform_params").val(a.data)})},_setSize:function(){var a=jQuery("#jform_size").val();jQuery("#jform_size").replaceWith('"),jQuery("#jform_size").val(a)},widgetListener:function(){var a={dashboard_widget_id:0,params:""},e=jQuery(".widget-filters").serialize(),r=[],d="";jQuery(".filter-widget").each(function(){d=jQuery(this).data("dashboard-widget-id"),-1==jQuery.inArray(d,r)&&(jQuery("#dashboard-widget-"+d).html(''),r.push(d),a.dashboard_widget_id=d,TJDashboardUI.initWidget(a,e))})}};jQuery(document).on("change",".widget-filters",function(){TJDashboardUI.widgetListener()}); diff --git a/src/components/com_tjdashboard/site/views/dashboard/tmpl/default.php b/src/components/com_tjdashboard/site/views/dashboard/tmpl/default.php index 79e5de9a..b2f8a481 100644 --- a/src/components/com_tjdashboard/site/views/dashboard/tmpl/default.php +++ b/src/components/com_tjdashboard/site/views/dashboard/tmpl/default.php @@ -10,11 +10,12 @@ // No direct access defined('_JEXEC') or die; +use Joomla\CMS\Factory; +use Joomla\CMS\HTML\HTMLHelper; +HTMLHelper::_('behavior.modal'); +HTMLHelper::_('formbehavior.chosen', 'select'); -JHTML::_('behavior.modal'); - - -$document = JFactory::getDocument(); +$document = Factory::getDocument(); $document->addStylesheet('components/com_tjdashboard/assets/css/dashboard.css'); $document->addStylesheet('media/techjoomla_strapper/css/bootstrap.j3.min.css'); @@ -33,9 +34,7 @@
-

-
item->title);?>
-

+

item->title);?>

diff --git a/src/plugins/tjdashboardrenderer/filterbox/assets/js/renderer.js b/src/plugins/tjdashboardrenderer/filterbox/assets/js/renderer.js new file mode 100644 index 00000000..4f9df7fa --- /dev/null +++ b/src/plugins/tjdashboardrenderer/filterbox/assets/js/renderer.js @@ -0,0 +1,76 @@ +var TJDashboardFilterbox = { + renderData: function(method,sourceData) + { + this[method](sourceData); + }, + tjdashfilter: function(sourceData) + { + var content = '
'; + + content += '
'; + + var renderData = JSON.parse(sourceData.data); + + var filters = renderData.data.filters; + var filterName = ''; + + var widgetTitle = jQuery("#"+sourceData.element).prev().closest('.widget-title').text(); + + var content = '

'; + + var renderData = JSON.parse(sourceData.data); + + if (widgetTitle != '' && widgetTitle != undefined) + { + content += widgetTitle ; + } + else + { + content += renderData.data.widgetlabel; + } + + content += "

"; + + if (typeof filters === "object" && filters !== null) + { + jQuery.each(filters, function(index, item) { + content += '
'; + jQuery.each(item, function(key, optionval) { + + if(key != filterName){ + content += ''; + } + }); + content += '
'; + }); + } + + content += "
"; + + jQuery("#"+sourceData.element).html(content); + + /* IMP : to add chz-done into selects*/ + jQuery(".widget-filters").chosen({disable_search_threshold: 8}); + } +} + +/* Code written for remove empty div */ +jQuery(document).ready(function() { + var divRow = 1; + jQuery(".widget-boxes").each(function() { + if (jQuery('.dashboard-widget-row-'+divRow).html() == '') + { + jQuery('.dashboard-widget-row-'+divRow).remove(); + } + divRow++; + }); +}); diff --git a/src/plugins/tjdashboardrenderer/filterbox/assets/js/renderer.min.js b/src/plugins/tjdashboardrenderer/filterbox/assets/js/renderer.min.js new file mode 100644 index 00000000..a941a7e7 --- /dev/null +++ b/src/plugins/tjdashboardrenderer/filterbox/assets/js/renderer.min.js @@ -0,0 +1 @@ +var TJDashboardFilterbox={renderData:function(e,t){this[e](t)},tjdashfilter:function(e){var t='
';t+='
';var a=(l=JSON.parse(e.data)).data.filters,r="",i=jQuery("#"+e.element).prev().closest(".widget-title").text(),l=(t='

',JSON.parse(e.data));t+=""!=i&&null!=i?i:l.data.widgetlabel,t+="

","object"==typeof a&&null!==a&&jQuery.each(a,function(e,a){t+='
',jQuery.each(a,function(e,a){e!=r&&(t+='")}),t+="
"}),t+="
",jQuery("#"+e.element).html(t),jQuery(".widget-filters").chosen({disable_search_threshold:8})}};jQuery(document).ready(function(){var e=1;jQuery(".widget-boxes").each(function(){""==jQuery(".dashboard-widget-row-"+e).html()&&jQuery(".dashboard-widget-row-"+e).remove(),e++})}); diff --git a/src/plugins/tjdashboardrenderer/filterbox/filterbox.php b/src/plugins/tjdashboardrenderer/filterbox/filterbox.php new file mode 100644 index 00000000..78222225 --- /dev/null +++ b/src/plugins/tjdashboardrenderer/filterbox/filterbox.php @@ -0,0 +1,47 @@ + + * @copyright Copyright (C) 2009 - 2019 Techjoomla. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die('Restricted access'); + +use Joomla\CMS\Uri\Uri; + +/** + * plugin of TJDashboardRendererFilterbox + * + * @since __DEPLOY_VERSION__ + */ +class PlgTjdashboardRendererFilterbox +{ + /** + * Get the widget JS files + * + * @return Array JS files paths + * + * @since __DEPLOY_VERSION__ + **/ + public function getJS() + { + $JS1 = Uri::root() . 'plugins/tjdashboardrenderer/filterbox/assets/js/renderer.min.js'; + + return array($JS1); + } + + /** + * Get the widget CSS files + * + * @return Array CSS files paths + * + * @since __DEPLOY_VERSION__ + **/ + public function getCSS() + { + return array(); + } +} diff --git a/src/plugins/tjdashboardrenderer/filterbox/filterbox.xml b/src/plugins/tjdashboardrenderer/filterbox/filterbox.xml new file mode 100644 index 00000000..8bbf6c7a --- /dev/null +++ b/src/plugins/tjdashboardrenderer/filterbox/filterbox.xml @@ -0,0 +1,25 @@ + + + PLG_TJDASHBOARDRENDERER_FILTERBOX + Techjoomla + https://techjoomla.com + Copyright (C) 2009 - 2019 Techjoomla. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + extensions@techjoomla.com + https://techjoomla.com + 9th Oct 2019 + 1.0.0 + PLG_TJDASHBOARDRENDERER_FILTERBOX_DESC + + + filterbox.php + index.html + assets + + + + en-GB/en-GB.plg_tjdashboardrenderer_filterbox.ini + en-GB/en-GB.plg_tjdashboardrenderer_filterbox.sys.ini + + + diff --git a/src/plugins/tjdashboardrenderer/filterbox/index.html b/src/plugins/tjdashboardrenderer/filterbox/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/src/plugins/tjdashboardrenderer/filterbox/index.html @@ -0,0 +1 @@ + diff --git a/src/plugins/tjdashboardrenderer/filterbox/language/en-GB/en-GB.plg_tjdashboardrenderer_filterbox.ini b/src/plugins/tjdashboardrenderer/filterbox/language/en-GB/en-GB.plg_tjdashboardrenderer_filterbox.ini new file mode 100644 index 00000000..29955f79 --- /dev/null +++ b/src/plugins/tjdashboardrenderer/filterbox/language/en-GB/en-GB.plg_tjdashboardrenderer_filterbox.ini @@ -0,0 +1,2 @@ +PLG_TJDASHBOARDRENDERER_FILTERBOX="Dashboard Filter Box" +PLG_TJDASHBOARDRENDERER_FILTERBOX_DESC="Dashboard Filter Box renderer plugin" diff --git a/src/plugins/tjdashboardrenderer/filterbox/language/en-GB/en-GB.plg_tjdashboardrenderer_filterbox.sys.ini b/src/plugins/tjdashboardrenderer/filterbox/language/en-GB/en-GB.plg_tjdashboardrenderer_filterbox.sys.ini new file mode 100644 index 00000000..29955f79 --- /dev/null +++ b/src/plugins/tjdashboardrenderer/filterbox/language/en-GB/en-GB.plg_tjdashboardrenderer_filterbox.sys.ini @@ -0,0 +1,2 @@ +PLG_TJDASHBOARDRENDERER_FILTERBOX="Dashboard Filter Box" +PLG_TJDASHBOARDRENDERER_FILTERBOX_DESC="Dashboard Filter Box renderer plugin" diff --git a/src/plugins/tjdashboardsource/dashboard/dashboard.php b/src/plugins/tjdashboardsource/dashboard/dashboard.php new file mode 100644 index 00000000..bdf303ce --- /dev/null +++ b/src/plugins/tjdashboardsource/dashboard/dashboard.php @@ -0,0 +1,22 @@ + + * @copyright Copyright (C) 2009 - 2019 Techjoomla. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// No direct access +defined('_JEXEC') or die('Restricted access'); +use Joomla\CMS\Plugin\CMSPlugin; + +/** + * plugin of PlgTjdashboardDashboard + * + * @since __DEPLOY_VERSION__ + */ +class PlgTjdashboardDashboard extends CMSPlugin +{ +} diff --git a/src/plugins/tjdashboardsource/dashboard/dashboard.xml b/src/plugins/tjdashboardsource/dashboard/dashboard.xml new file mode 100644 index 00000000..bb95081d --- /dev/null +++ b/src/plugins/tjdashboardsource/dashboard/dashboard.xml @@ -0,0 +1,23 @@ + + + PLG_TJDASHBOARDSOURCE_DASHBOARD + Techjoomla + 9th Oct 2019 + Copyright (C) 2009 - 2019 Techjoomla. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + extensions@techjoomla.com + https://techjoomla.com + 1.0.0 + PLG_TJDASHBOARDSOURCE_DASHBOARD + + + dashboard.php + dashboard + + + + en-GB/en-GB.plg_tjdashboardsource_dashboard.ini + en-GB/en-GB.plg_tjdashboardsource_dashboard.sys.ini + + + diff --git a/src/plugins/tjdashboardsource/dashboard/dashboard/widgetfilters.php b/src/plugins/tjdashboardsource/dashboard/dashboard/widgetfilters.php new file mode 100644 index 00000000..3cc01972 --- /dev/null +++ b/src/plugins/tjdashboardsource/dashboard/dashboard/widgetfilters.php @@ -0,0 +1,133 @@ + + * @copyright Copyright (C) 2009 - 2019 Techjoomla. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// No direct access +defined('_JEXEC') or die('Restricted access'); +use Joomla\CMS\Factory; +use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Router\Route; +use Joomla\CMS\HTML\HTMLHelper; + +$lang = Factory::getLanguage(); +$lang->load('plg_tjdashboardsource_dashboard', JPATH_ADMINISTRATOR); + +JLoader::import("/components/com_cluster/includes/cluster", JPATH_ADMINISTRATOR); + +/** + * Plugin for tjdashboardsource to get dashboard filters + * + * @since __DEPLOY_VERSION__ + */ + +class DashboardWidgetFiltersDatasource +{ + public $dataSourceName = "PLG_TJDASHBOARDSOURCE_DASHBOARD_WIDGET_FILTERS"; + + /** + * Function to get data of the whole block + * + * @return Array data. + * + * @since __DEPLOY_VERSION__ + */ + public function getData() + { + try + { + $clusterList = array(); + + // Check if com_cluster component is installed + if (ComponentHelper::getComponent('com_cluster', true)->enabled) + { + $user = Factory::getUser(); + $clusterUserModel = ClusterFactory::model('ClusterUser', array('ignore_request' => true)); + $clusters = $clusterUserModel->getUsersClusters($user->id); + + if (count($clusters) > 1) + { + $clusterList['cluster_id'][] = HTMLHelper::_('select.option', "", Text::_('PLG_TJDASHBOARDSOURCE_DASHBOARD_SELECT_CLUSTER')); + } + + // Get com_subusers component status + $subUserExist = ComponentHelper::getComponent('com_subusers', true)->enabled; + + if ($subUserExist) + { + JLoader::import("/components/com_subusers/includes/rbacl", JPATH_ADMINISTRATOR); + } + + // Create oprion for each cluster + foreach ($clusters as $cluster) + { + // DPE - Hack to check its manager + if ($subUserExist) + { + // Check user have permission to manage all clusters + if (!$user->authorise('core.manageall', 'com_cluster')) + { + // Check user having permission to add staff + if (RBACL::authorise($user->id, 'com_multiagency', 'core.adduser', $cluster->client_id)) + { + $clusterList['cluster_id'][] = HTMLHelper::_('select.option', $cluster->cluster_id, trim($cluster->name)); + } + } + else + { + $clusterList['cluster_id'][] = HTMLHelper::_('select.option', $cluster->cluster_id, trim($cluster->name)); + } + } + else + { + $clusterList['cluster_id'][] = HTMLHelper::_('select.option', $cluster->cluster_id, trim($cluster->name)); + } + } + } + } + catch (Exception $e) + { + throw new Exception($e->getMessage()); + } + + $recordInfo = array(Text::_('PLG_TJDASHBOARDSOURCE_DASHBOARD_CLUSTER_FILTER') => ''); + $recordInfo[Text::_('PLG_TJDASHBOARDSOURCE_DASHBOARD_CLUSTER_FILTER')] = $clusterList; + + return $recordInfo; + } + + /** + * Get Data for Filter + * + * @return string dataArray + * + * @since __DEPLOY_VERSION__ + * */ + public function getDataFilterboxTjdashfilter() + { + $items = []; + $items['data'] = ['filters' => $this->getData(), + 'title' => '' + ]; + + return json_encode($items); + } + + /** + * Get supported Renderers List + * + * @return array supported renderes for this data source + * + * @since __DEPLOY_VERSION__ + * */ + public function getSupportedRenderers() + { + return array('filterbox.tjdashfilter' => "PLG_TJDASHBOARDRENDERER_FILTERBOX"); + } +} diff --git a/src/plugins/tjdashboardsource/dashboard/language/en-GB/en-GB.plg_tjdashboardsource_dashboard.ini b/src/plugins/tjdashboardsource/dashboard/language/en-GB/en-GB.plg_tjdashboardsource_dashboard.ini new file mode 100644 index 00000000..bd4a62f4 --- /dev/null +++ b/src/plugins/tjdashboardsource/dashboard/language/en-GB/en-GB.plg_tjdashboardsource_dashboard.ini @@ -0,0 +1,2 @@ +PLG_TJDASHBOARDSOURCE_DASHBOARD="Data Source Dashboard" +PLG_TJDASHBOARDSOURCE_DASHBOARD_WIDGET_FILTERS="Widget Filters" diff --git a/src/plugins/tjdashboardsource/dashboard/language/en-GB/en-GB.plg_tjdashboardsource_dashboard.sys.ini b/src/plugins/tjdashboardsource/dashboard/language/en-GB/en-GB.plg_tjdashboardsource_dashboard.sys.ini new file mode 100644 index 00000000..cd28ed4c --- /dev/null +++ b/src/plugins/tjdashboardsource/dashboard/language/en-GB/en-GB.plg_tjdashboardsource_dashboard.sys.ini @@ -0,0 +1 @@ +PLG_TJDASHBOARDSOURCE_DASHBOARD="Data Source Dashboard"