From 8849591e493df42f8d57bf7105bcfade5397ff2a Mon Sep 17 00:00:00 2001 From: pollen8 Date: Fri, 22 Nov 2013 19:18:26 +0100 Subject: [PATCH] fixes for rating element in j3 --- .../fabrik_element/rating/list-rating-min.js | 2 +- plugins/fabrik_element/rating/list-rating.js | 51 ++++++++++++---- plugins/fabrik_element/rating/rating-min.js | 2 +- plugins/fabrik_element/rating/rating.js | 11 +++- plugins/fabrik_element/rating/rating.php | 59 ++++++++++++------- 5 files changed, 91 insertions(+), 34 deletions(-) diff --git a/plugins/fabrik_element/rating/list-rating-min.js b/plugins/fabrik_element/rating/list-rating-min.js index dc08a285229..ac9dd969463 100644 --- a/plugins/fabrik_element/rating/list-rating-min.js +++ b/plugins/fabrik_element/rating/list-rating-min.js @@ -1 +1 @@ -var FbRatingList=new Class({options:{userid:0,mode:""},Implements:[Events,Options],initialize:function(b,a){a.element=b;this.setOptions(a);if(this.options.mode==="creator-rating"){return}this.col=$$("."+b);this.origRating={};this.col.each(function(d){var c=d.getElements(".starRating");c.each(function(e){e.addEvent("mouseover",function(f){this.origRating[d.id]=e.getParent(".fabrik_element").getElement(".ratingMessage").innerHTML.toInt();c.each(function(g){if(this._getRating(e)>=this._getRating(g)){g.src=this.options.insrc}else{g.src=this.options.outsrc}}.bind(this));e.getParent(".fabrik_element").getElement(".ratingMessage").innerHTML=e.alt}.bind(this));e.addEvent("mouseout",function(f){c.each(function(g){if(this.origRating[d.id]>=this._getRating(g)){g.src=this.options.insrc}else{g.src=this.options.outsrc}}.bind(this));e.getParent(".fabrik_element").getElement(".ratingMessage").innerHTML=this.origRating[d.id]}.bind(this))}.bind(this));c.each(function(e){e.addEvent("click",function(f){this.doAjax(f,e)}.bind(this))}.bind(this))}.bind(this))},_getRating:function(a){r=a.className.replace("rate_","").replace("starRating ","");return r.toInt()},doAjax:function(f,d){f.stop();this.rating=this._getRating(d);var h=d.getParent(".fabrik_element").getElement(".ratingMessage");Fabrik.loader.start(h);var i=new Element("div",{id:"starRatingCover",styles:{bottom:0,top:0,right:0,left:0,position:"absolute",cursor:"progress"}});var a=d.getParent(".fabrik_element").getElement("div");a.grab(i,"top");var g=document.id(d).getParent(".fabrik_row");var b=g.id.replace("list_"+this.options.listRef+"_row_","");var c={option:"com_fabrik",format:"raw",task:"plugin.pluginAjax",plugin:"rating",g:"element",method:"ajax_rate",element_id:this.options.elid,row_id:b,elementname:this.options.elid,userid:this.options.userid,rating:this.rating,mode:this.options.mode};new Request({url:"",data:c,onComplete:function(e){e=e.toInt();this.rating=e;h.set("html",this.rating);Fabrik.loader.stop(h);d.getParent(".fabrik_element").getElements("img").each(function(k,j){k.src=(j=this._getRating(g)){if(Fabrik.bootstrapped){g.removeClass("icon-star-empty").addClass("icon-star")}else{g.src=this.options.insrc}}else{if(Fabrik.bootstrapped){g.addClass("icon-star-empty").removeClass("icon-star")}else{g.src=this.options.insrc}}}.bind(this));e.getParent(".fabrik_element").getElement(".ratingMessage").innerHTML=e.get("data-fabrik-rating")}.bind(this));e.addEvent("mouseout",function(f){c.each(function(g){if(this.origRating[d.id]>=this._getRating(g)){if(Fabrik.bootstrapped){g.removeClass("icon-star-empty").addClass("icon-star")}else{g.src=this.options.insrc}}else{if(Fabrik.bootstrapped){g.addClass("icon-star-empty").removeClass("icon-star")}else{g.src=this.options.insrc}}}.bind(this));e.getParent(".fabrik_element").getElement(".ratingMessage").innerHTML=this.origRating[d.id]}.bind(this))}.bind(this));c.each(function(e){e.addEvent("click",function(f){this.doAjax(f,e)}.bind(this))}.bind(this))}.bind(this))},_getRating:function(a){var b=a.get("data-fabrik-rating");return b.toInt()},doAjax:function(f,d){f.stop();this.rating=this._getRating(d);var h=d.getParent(".fabrik_element").getElement(".ratingMessage");Fabrik.loader.start(h);var i=new Element("div",{id:"starRatingCover",styles:{bottom:0,top:0,right:0,left:0,position:"absolute",cursor:"progress"}});var a=d.getParent(".fabrik_element").getElement("div");a.grab(i,"top");var g=document.id(d).getParent(".fabrik_row");var b=g.id.replace("list_"+this.options.listRef+"_row_","");var c={option:"com_fabrik",format:"raw",task:"plugin.pluginAjax",plugin:"rating",g:"element",method:"ajax_rate",formid:this.options.formid,element_id:this.options.elid,row_id:b,elementname:this.options.elid,userid:this.options.userid,rating:this.rating,mode:this.options.mode};new Request({url:"",data:c,onComplete:function(j){j=j.toInt();this.rating=j;h.set("html",this.rating);Fabrik.loader.stop(h);var e=Fabrik.bootstrapped?"i":"img";d.getParent(".fabrik_element").getElements(e).each(function(l,k){if(k= this._getRating(ii)) { - ii.src = this.options.insrc; + if (Fabrik.bootstrapped) { + ii.removeClass('icon-star-empty').addClass('icon-star'); + } else { + ii.src = this.options.insrc; + } } else { - ii.src = this.options.outsrc; + if (Fabrik.bootstrapped) { + ii.addClass('icon-star-empty').removeClass('icon-star'); + } else { + ii.src = this.options.insrc; + } } }.bind(this)); - star.getParent('.fabrik_element').getElement('.ratingMessage').innerHTML = star.alt; + star.getParent('.fabrik_element').getElement('.ratingMessage').innerHTML = star.get('data-fabrik-rating'); }.bind(this)); star.addEvent('mouseout', function (e) { stars.each(function (ii) { if (this.origRating[tr.id] >= this._getRating(ii)) { - ii.src = this.options.insrc; + if (Fabrik.bootstrapped) { + ii.removeClass('icon-star-empty').addClass('icon-star'); + } else { + ii.src = this.options.insrc; + } } else { - ii.src = this.options.outsrc; + if (Fabrik.bootstrapped) { + ii.addClass('icon-star-empty').removeClass('icon-star'); + } else { + ii.src = this.options.insrc; + } } }.bind(this)); star.getParent('.fabrik_element').getElement('.ratingMessage').innerHTML = this.origRating[tr.id]; @@ -60,8 +77,8 @@ var FbRatingList = new Class({ }, - _getRating : function (i) { - r = i.className.replace("rate_", "").replace("starRating ", ""); + _getRating: function (i) { + var r = i.get('data-fabrik-rating'); return r.toInt(); }, @@ -84,6 +101,7 @@ var FbRatingList = new Class({ 'plugin': 'rating', 'g': 'element', 'method': 'ajax_rate', + 'formid': this.options.formid, 'element_id': this.options.elid, 'row_id' : rowid, 'elementname' : this.options.elid, @@ -98,8 +116,21 @@ var FbRatingList = new Class({ this.rating = r; ratingmsg.set('html', this.rating); Fabrik.loader.stop(ratingmsg); - star.getParent('.fabrik_element').getElements('img').each(function (i, x) { - i.src = (x < r) ? this.options.insrc : this.options.outsrc; + var tag = Fabrik.bootstrapped ? 'i' : 'img'; + star.getParent('.fabrik_element').getElements(tag).each(function (i, x) { + if (x < r) { + if (Fabrik.bootstrapped) { + i.removeClass('icon-star-empty').addClass('icon-star'); + } else { + i.src = this.options.insrc; + } + } else { + if (Fabrik.bootstrapped) { + i.addClass('icon-star-empty').removeClass('icon-star'); + } else { + i.src = this.options.insrc; + } + } }.bind(this)); document.id('starRatingCover').destroy(); }.bind(this) diff --git a/plugins/fabrik_element/rating/rating-min.js b/plugins/fabrik_element/rating/rating-min.js index 4bca18c2728..18e2fb3abfe 100644 --- a/plugins/fabrik_element/rating/rating-min.js +++ b/plugins/fabrik_element/rating/rating-min.js @@ -1 +1 @@ -var FbRating=new Class({Extends:FbElement,initialize:function(b,a){this.field=document.id(b);this.parent(b,a);if(this.options.canRate===false){return}if(this.options.mode==="creator-rating"&&this.options.view==="details"){return}this.rating=this.options.rating;Fabrik.addEvent("fabrik.form.refresh",function(c){this.setup(c)}.bind(this));this.setup(this.options.row_id);this.setStars()},setup:function(a){this.options.row_id=a;this.element=document.id(this.options.element+"_div");this.spinner=new Asset.image(Fabrik.liveSite+"media/com_fabrik/images/ajax-loader.gif",{alt:"loading","class":"ajax-loader"});this.stars=this.element.getElements(".starRating");this.ratingMessage=this.element.getElement(".ratingMessage");this.stars.each(function(c){c.addEvent("mouseover",function(d){this.stars.each(function(e){if(this._getRating(c)>=this._getRating(e)){if(Fabrik.bootstrapped){e.removeClass("icon-star-empty").addClass("icon-star")}else{e.src=this.options.insrc}}}.bind(this));this.ratingMessage.innerHTML=c.get("data-rating")}.bind(this))}.bind(this));this.stars.each(function(c){c.addEvent("mouseout",function(d){this.stars.each(function(e){if(Fabrik.bootstrapped){e.removeClass("icon-star").addClass("icon-star-empty")}else{e.src=this.options.outsrc}}.bind(this))}.bind(this))}.bind(this));this.stars.each(function(c){c.addEvent("click",function(d){this.rating=this._getRating(c);this.field.value=this.rating;this.doAjax();this.setStars()}.bind(this))}.bind(this));var b=this.getClearButton();this.element.addEvent("mouseout",function(c){this.setStars()}.bind(this));this.element.addEvent("mouseover",function(c){if(typeOf(b)!=="null"){b.setStyles({visibility:"visible"})}}.bind(this));if(typeOf(b)!=="null"){b.addEvent("mouseover",function(c){if(Fabrik.bootstrapped){}else{c.target.src=this.options.clearinsrc}this.ratingMessage.set("html",Joomla.JText._("PLG_ELEMENT_RATING_NO_RATING"))}.bind(this));b.addEvent("mouseout",function(c){if(this.rating!==-1){c.target.src=this.options.clearoutsrc}}.bind(this));b.addEvent("click",function(c){this.rating=-1;this.field.value="";this.stars.each(function(d){if(Fabrik.bootstrapped){d.removeClass("icon-star").addClass("icon-star-empty")}else{d.src=this.options.outsrc}}.bind(this));if(!Fabrik.bootstrapped){this.getClearButton().src=this.options.clearinsrc}this.doAjax()}.bind(this))}this.setStars()},doAjax:function(){if(this.options.canRate===false){return}if(this.options.editable===false){this.spinner.inject(this.ratingMessage);var a={option:"com_fabrik",format:"raw",task:"plugin.pluginAjax",plugin:"rating",method:"ajax_rate",g:"element",element_id:this.options.elid,row_id:this.options.row_id,elementname:this.options.elid,userid:this.options.userid,rating:this.rating};var b=new Request({url:"",data:a,onComplete:function(){this.spinner.dispose()}.bind(this)}).send()}},_getRating:function(a){r=a.get("data-rating");return r.toInt()},setStars:function(){if(typeOf(this.stars)==="null"){return}this.stars.each(function(b){var c=this._getRating(b);if(Fabrik.bootstrapped){if(c<=this.rating){b.removeClass("icon-star-empty").addClass("icon-star")}else{b.removeClass("icon-star").addClass("icon-star-empty")}}else{b.src=c<=this.rating?this.options.insrc:this.options.outsrc}}.bind(this));var a=this.getClearButton();if(typeOf(a)!=="null"){a.src=this.rating!==-1?this.options.clearoutsrc:this.options.clearinsrc}},getClearButton:function(){return this.element.getElement("i[data-rating=-1]")},update:function(b){this.rating=b.toInt().round();this.field.value=this.rating;var a=this.element.getElement(".ratingScore");if(typeOf(a)!=="null"){a.set("text",b)}this.setStars()}}); \ No newline at end of file +var FbRating=new Class({Extends:FbElement,initialize:function(b,a){this.field=document.id(b);this.parent(b,a);if(this.options.canRate===false){return}if(this.options.mode==="creator-rating"&&this.options.view==="details"){return}this.rating=this.options.rating;Fabrik.addEvent("fabrik.form.refresh",function(c){this.setup(c)}.bind(this));this.setup(this.options.row_id);this.setStars()},setup:function(a){this.options.row_id=a;this.element=document.id(this.options.element+"_div");this.spinner=new Asset.image(Fabrik.liveSite+"media/com_fabrik/images/ajax-loader.gif",{alt:"loading","class":"ajax-loader"});this.stars=this.element.getElements(".starRating");this.ratingMessage=this.element.getElement(".ratingMessage");this.stars.each(function(c){c.addEvent("mouseover",function(d){this.stars.each(function(e){if(this._getRating(c)>=this._getRating(e)){if(Fabrik.bootstrapped){e.removeClass("icon-star-empty").addClass("icon-star")}else{e.src=this.options.insrc}}else{if(Fabrik.bootstrapped){e.addClass("icon-star-empty").removeClass("icon-star")}else{e.src=this.options.insrc}}}.bind(this));this.ratingMessage.innerHTML=c.get("data-rating")}.bind(this))}.bind(this));this.stars.each(function(c){c.addEvent("mouseout",function(d){this.stars.each(function(e){if(Fabrik.bootstrapped){e.removeClass("icon-star").addClass("icon-star-empty")}else{e.src=this.options.outsrc}}.bind(this))}.bind(this))}.bind(this));this.stars.each(function(c){c.addEvent("click",function(d){this.rating=this._getRating(c);this.field.value=this.rating;this.doAjax();this.setStars()}.bind(this))}.bind(this));var b=this.getClearButton();this.element.addEvent("mouseout",function(c){this.setStars()}.bind(this));this.element.addEvent("mouseover",function(c){if(typeOf(b)!=="null"){b.setStyles({visibility:"visible"})}}.bind(this));if(typeOf(b)!=="null"){b.addEvent("mouseover",function(c){if(Fabrik.bootstrapped){}else{c.target.src=this.options.clearinsrc}this.ratingMessage.set("html",Joomla.JText._("PLG_ELEMENT_RATING_NO_RATING"))}.bind(this));b.addEvent("mouseout",function(c){if(this.rating!==-1){c.target.src=this.options.clearoutsrc}}.bind(this));b.addEvent("click",function(c){this.rating=-1;this.field.value="";this.stars.each(function(d){if(Fabrik.bootstrapped){d.removeClass("icon-star").addClass("icon-star-empty")}else{d.src=this.options.outsrc}}.bind(this));if(!Fabrik.bootstrapped){this.getClearButton().src=this.options.clearinsrc}this.doAjax()}.bind(this))}this.setStars()},doAjax:function(){if(this.options.canRate===false){return}if(this.options.editable===false){this.spinner.inject(this.ratingMessage);var a={option:"com_fabrik",format:"raw",task:"plugin.pluginAjax",plugin:"rating",method:"ajax_rate",g:"element",element_id:this.options.elid,formid:this.options.formid,row_id:this.options.row_id,elementname:this.options.elid,userid:this.options.userid,rating:this.rating,listid:this.options.listid};var b=new Request({url:"",data:a,onComplete:function(){this.spinner.dispose()}.bind(this)}).send()}},_getRating:function(a){r=a.get("data-rating");return r.toInt()},setStars:function(){if(typeOf(this.stars)==="null"){return}this.stars.each(function(b){var c=this._getRating(b);if(Fabrik.bootstrapped){if(c<=this.rating){b.removeClass("icon-star-empty").addClass("icon-star")}else{b.removeClass("icon-star").addClass("icon-star-empty")}}else{b.src=c<=this.rating?this.options.insrc:this.options.outsrc}}.bind(this));var a=this.getClearButton();if(typeOf(a)!=="null"){a.src=this.rating!==-1?this.options.clearoutsrc:this.options.clearinsrc}},getClearButton:function(){return this.element.getElement("i[data-rating=-1]")},update:function(b){this.rating=b.toInt().round();this.field.value=this.rating;var a=this.element.getElement(".ratingScore");if(typeOf(a)!=="null"){a.set("text",b)}this.setStars()}}); \ No newline at end of file diff --git a/plugins/fabrik_element/rating/rating.js b/plugins/fabrik_element/rating/rating.js index 96119d93380..9311a8b5947 100644 --- a/plugins/fabrik_element/rating/rating.js +++ b/plugins/fabrik_element/rating/rating.js @@ -44,7 +44,12 @@ var FbRating = new Class({ } else { ii.src = this.options.insrc; } - + } else { + if (Fabrik.bootstrapped) { + ii.addClass('icon-star-empty').removeClass('icon-star'); + } else { + ii.src = this.options.insrc; + } } }.bind(this)); this.ratingMessage.innerHTML = i.get('data-rating'); @@ -134,10 +139,12 @@ var FbRating = new Class({ 'method': 'ajax_rate', 'g': 'element', 'element_id': this.options.elid, + 'formid': this.options.formid, 'row_id': this.options.row_id, 'elementname': this.options.elid, 'userid': this.options.userid, - 'rating': this.rating + 'rating': this.rating, + 'listid': this.options.listid }; var closeFn = new Request({ diff --git a/plugins/fabrik_element/rating/rating.php b/plugins/fabrik_element/rating/rating.php index 63a432f344e..32fa7c35502 100644 --- a/plugins/fabrik_element/rating/rating.php +++ b/plugins/fabrik_element/rating/rating.php @@ -111,6 +111,7 @@ public function renderListData($data, stdClass &$thisRow) $r = $s + 1; $a = str_replace('{r}', $r, $atpl); $imgOpts = array('icon-class' => 'starRating rate_' . $r); + $imgOpts['data-fabrik-rating'] = $r; $img = FabrikHelperHTML::image("star.png", 'list', @$this->tmpl, $imgOpts); $str[] = $a . $img . $a2; } @@ -120,6 +121,7 @@ public function renderListData($data, stdClass &$thisRow) $r = $s + 1; $a = str_replace('{r}', $r, $atpl); $imgOpts = array('icon-class' => 'starRating rate_' . $r); + $imgOpts['data-fabrik-rating'] = $r; $img = FabrikHelperHTML::image("star-empty.png", 'list', @$this->tmpl, $imgOpts); $str[] = $a . $img . $a2; @@ -161,7 +163,8 @@ private function _renderListData($data, $thisRow) $list = $this->getlistModel()->getTable(); $listid = $list->id; $formid = $list->form_id; - $ids = JArrayHelper::getColumn($this->getListModel()->getData(), '__pk_val'); + $d = $this->getListModel()->getData(); + $ids = JArrayHelper::getColumn($d, '__pk_val'); $row_id = isset($thisRow->__pk_val) ? $thisRow->__pk_val : $thisRow->id; list($avg, $total) = $this->getRatingAverage($data, $listid, $formid, $row_id, $ids); @@ -518,6 +521,7 @@ private function doRating($listid, $formid, $row_id, $rating) values ($userid, $listid, $formid, $row_id, $rating, $strDate, $elementid) ON DUPLICATE KEY UPDATE date_created = $strDate, rating = $rating" ); + $db->execute(); } @@ -571,8 +575,9 @@ public function elementJavascript($repeatCounter) $id = $this->getHTMLId($repeatCounter); $element = $this->getElement(); $data = $this->getFormModel()->data; - $listid = $this->getlistModel()->getTable()->id; - $formid = $input->getInt('formid'); + $listModel = $this->getlistModel(); + $listid = $listModel->getTable()->id; + $formid = $listModel->getFormModel()->getId(); $row_id = $input->get('rowid', '', 'string'); $value = $this->getValue($data, $repeatCounter); @@ -582,18 +587,26 @@ public function elementJavascript($repeatCounter) } $opts = new stdClass; - $ext = $params->get('rating-pngorgif', '.png'); - $opts->insrc = FabrikHelperHTML::image("star.png", 'form', @$this->tmpl, array(), true); - $opts->outsrc = FabrikHelperHTML::image("star-empty.png", 'form', @$this->tmpl, array(), true); - $opts->clearoutsrc = $clearsrc = FabrikHelperHTML::image("remove-sign-out.png", 'form', @$this->tmpl, array(), true); - $opts->clearinsrc = $clearsrc = FabrikHelperHTML::image("remove-sign.png", 'form', @$this->tmpl, array(), true); + + if (!FabrikWorker::j3()) + { + $ext = $params->get('rating-pngorgif', '.png'); + $opts->insrc = FabrikHelperHTML::image("star.png", 'form', @$this->tmpl, array(), true); + $opts->outsrc = FabrikHelperHTML::image("star-empty.png", 'form', @$this->tmpl, array(), true); + $opts->clearoutsrc = $clearsrc = FabrikHelperHTML::image("remove-sign-out.png", 'form', @$this->tmpl, array(), true); + $opts->clearinsrc = $clearsrc = FabrikHelperHTML::image("remove-sign.png", 'form', @$this->tmpl, array(), true); + } + $opts->row_id = $row_id; $opts->elid = $this->getElement()->id; $opts->userid = (int) $user->get('id'); + $opts->formid = $formid; $opts->canRate = (bool) $this->canRate(); $opts->mode = $params->get('rating-mode'); $opts->view = $input->get('view'); $opts->rating = $value; + $opts->listid = $listid; + JText::script('PLG_ELEMENT_RATING_NO_RATING'); return array('FbRating', $id, $opts); @@ -618,10 +631,16 @@ public function elementListJavascript() $imagepath = JUri::root() . '/plugins/fabrik_element/rating/images/'; $opts->imagepath = $imagepath; $opts->elid = $this->getElement()->id; - $opts->insrc = FabrikHelperHTML::image("star.png", 'list', @$this->tmpl, array(), true); - $opts->outsrc = FabrikHelperHTML::image("star-empty.png", 'list', @$this->tmpl, array(), true); + + if (!FabrikWorker::j3()) + { + $opts->insrc = FabrikHelperHTML::image("star.png", 'list', @$this->tmpl, array(), true); + $opts->outsrc = FabrikHelperHTML::image("star-empty.png", 'list', @$this->tmpl, array(), true); + } + $opts->ajaxloader = FabrikHelperHTML::image("ajax-loader.gif", 'list', @$this->tmpl, array(), true); $opts->listRef = $listModel->getRenderContext(); + $opts->formid = $listModel->getFormModel()->getId(); $opts->userid = (int) $user->get('id'); $opts->mode = $params->get('rating-mode'); $opts = json_encode($opts); @@ -633,11 +652,11 @@ public function elementListJavascript() * Used by radio and dropdown elements to get a dropdown list of their unique * unique values OR all options - basedon filter_build_method * - * @param bool $normal do we render as a normal filter or as an advanced search filter - * @param string $tableName table name to use - defaults to element's current table - * @param string $label field to use, defaults to element name - * @param string $id field to use, defaults to element name - * @param bool $incjoin include join + * @param bool $normal Do we render as a normal filter or as an advanced search filter + * @param string $tableName Table name to use - defaults to element's current table + * @param string $label Field to use, defaults to element name + * @param string $id Field to use, defaults to element name + * @param bool $incjoin Include join * * @return array text/value objects */ @@ -667,11 +686,11 @@ public function filterValueList($normal, $tableName = '', $label = '', $id = '', * Create an array of label/values which will be used to populate the elements filter dropdown * returns all possible options * - * @param bool $normal do we render as a normal filter or as an advanced search filter - * @param string $tableName table name to use - defaults to element's current table - * @param string $label field to use, defaults to element name - * @param string $id field to use, defaults to element name - * @param bool $incjoin include join + * @param bool $normal Do we render as a normal filter or as an advanced search filter + * @param string $tableName Table name to use - defaults to element's current table + * @param string $label Field to use, defaults to element name + * @param string $id Field to use, defaults to element name + * @param bool $incjoin Include join * * @return array filter value and labels */