From a846a81ec2a6270ddac780bdfed82a9e609dc16f Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Fri, 14 Jun 2013 11:44:30 +0200 Subject: [PATCH 1/4] Remove unecessary slash --- templates/web/prod/WorkZone/Macros.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/web/prod/WorkZone/Macros.html.twig b/templates/web/prod/WorkZone/Macros.html.twig index 8cbfd685ec..563d6eaec6 100644 --- a/templates/web/prod/WorkZone/Macros.html.twig +++ b/templates/web/prod/WorkZone/Macros.html.twig @@ -310,7 +310,7 @@ href="{{ path('prod_stories_story_remove_element', { 'sbas_id' : container.get_sbas_id(), 'record_id' : container.get_record_id(), 'child_sbas_id' : record.get_sbas_id(), 'child_record_id' : record.get_record_id() }) }}" {% elseif wz_scope == 'basket' %} id="WZEL_{{ container.getId() }}_{{ record.get_sbas_id() }}_{{ record.get_record_id() }}" - href="{{ path('prod_baskets_basket_element_remove', { 'basket_id' : container.getId(), 'basket_element_id' : contained.getId()}) }}/" + href="{{ path('prod_baskets_basket_element_remove', { 'basket_id' : container.getId(), 'basket_element_id' : contained.getId()}) }}" {% elseif wz_scope == 'basket' %} href="#" {% endif %} From 8a8868798b56e5005a9b2416532a3d35d3341c9c Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Fri, 14 Jun 2013 11:45:01 +0200 Subject: [PATCH 2/4] Set humanejs info & error function --- www/skins/prod/jquery.Prod.js | 72 ++++++++++++++++------------------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/www/skins/prod/jquery.Prod.js b/www/skins/prod/jquery.Prod.js index 9d52ccc6ba..ff276a0fc3 100644 --- a/www/skins/prod/jquery.Prod.js +++ b/www/skins/prod/jquery.Prod.js @@ -1,45 +1,37 @@ -(function(){ - - $(document).ready(function(){ - - $('a.dialog').live('click', function(event){ +(function() { + $(document).ready(function() { + humane.info = humane.spawn({addnCls: 'humane-libnotify-info', timeout: 1000}); + humane.error = humane.spawn({addnCls: 'humane-libnotify-error', timeout: 1000}); - var $this = $(this), size = 'Medium'; - - if($this.hasClass('small-dialog')) - { - size = 'Small'; - } - else if($this.hasClass('full-dialog')) - { - size = 'Full'; - } - - var options = { - size : size, - loading : true, - title : $this.attr('title'), - closeOnEscape : true - }; + $('a.dialog').live('click', function(event) { + var $this = $(this), size = 'Medium'; - $dialog = p4.Dialog.Create(options); - - $.ajax({ - type: "GET", - url: $this.attr('href'), - dataType: 'html', - beforeSend:function(){ + if ($this.hasClass('small-dialog')) { + size = 'Small'; + } else if ($this.hasClass('full-dialog')) { + size = 'Full'; + } - }, - success: function(data){ - $dialog.setContent(data); - return; - } - }); + var options = { + size: size, + loading: true, + title: $this.attr('title'), + closeOnEscape: true + }; - return false; + $dialog = p4.Dialog.Create(options); + + $.ajax({ + type: "GET", + url: $this.attr('href'), + dataType: 'html', + success: function(data) { + $dialog.setContent(data); + return; + } + }); + + return false; + }); }); - - }); - -}()) \ No newline at end of file +}()); \ No newline at end of file From 9be2194485ea3dbde9f999fa17aec7112da80084 Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Fri, 14 Jun 2013 11:46:30 +0200 Subject: [PATCH 3/4] Fix #878 Add delete from basket button in detailled view --- lib/Doctrine/Entities/Basket.php | 16 +- .../web/prod/preview/basket_train.html.twig | 2 +- templates/web/prod/preview/tools.html.twig | 12 + www/skins/prod/000000/prodcolor.css | 9 +- www/skins/prod/959595/prodcolor.css | 7 +- www/skins/prod/jquery.Prod.js | 2 +- www/skins/prod/jquery.WorkZone.js | 1170 ++++++++--------- www/skins/prod/jquery.main-prod.js | 6 + 8 files changed, 611 insertions(+), 613 deletions(-) diff --git a/lib/Doctrine/Entities/Basket.php b/lib/Doctrine/Entities/Basket.php index d1e3d519bf..accaa670ca 100644 --- a/lib/Doctrine/Entities/Basket.php +++ b/lib/Doctrine/Entities/Basket.php @@ -405,6 +405,20 @@ class Basket return false; } + public function getBasketElementFromRecord(Application $app, \record_adapter $record) + { + foreach ($this->getElements() as $basket_element) { + $bask_record = $basket_element->getRecord($app); + + if ($bask_record->get_record_id() == $record->get_record_id() + && $bask_record->get_sbas_id() == $record->get_sbas_id()) { + return $basket_element; + } + } + + return null; + } + public function getSize(Application $app) { $totSize = 0; @@ -433,7 +447,7 @@ class Basket public function addElement(\Entities\BasketElement $elements) { $this->elements[] = $elements; - + return $this; } diff --git a/templates/web/prod/preview/basket_train.html.twig b/templates/web/prod/preview/basket_train.html.twig index b7a834218d..5ac250418d 100644 --- a/templates/web/prod/preview/basket_train.html.twig +++ b/templates/web/prod/preview/basket_train.html.twig @@ -40,4 +40,4 @@
{% include 'prod/preview/tools.html.twig' %} -
\ No newline at end of file + diff --git a/templates/web/prod/preview/tools.html.twig b/templates/web/prod/preview/tools.html.twig index 53d59e2bc2..1cdc0c1f3e 100644 --- a/templates/web/prod/preview/tools.html.twig +++ b/templates/web/prod/preview/tools.html.twig @@ -5,6 +5,18 @@ onclick="evt_add_in_chutier('{{record.get_sbas_id()}}','{{record.get_record_id()}}',false,this);return(false);"> {% endif %} +{% if record.is_from_basket() and app['authentication'].getUser().ACL().has_right_on_base(record.get_base_id(), 'canputinalbum') %} + {% set basketElement = record.get_container().getBasketElementFromRecord(app, record) %} + {% if basketElement is not none %} + + + {% endif %} +{% endif %} +
diff --git a/www/skins/prod/000000/prodcolor.css b/www/skins/prod/000000/prodcolor.css index 08d4f38943..326839d511 100644 --- a/www/skins/prod/000000/prodcolor.css +++ b/www/skins/prod/000000/prodcolor.css @@ -517,7 +517,7 @@ span.ww_winTitle { /******* PRESENTATION DE MINIATURES *******************************************/ .captionRolloverTips, .previewTips, .infoTips, -.baskAdder, .printer, .downloader { +.baskAdder, .printer, .downloader, .baskDeleter { background-image: url('../../icons/zoom.gif'); background-repeat: no-repeat; background-position: center center; @@ -539,6 +539,10 @@ span.ww_winTitle { background-image: url('../../icons/basket.gif'); } +.baskDeleter { + background-image: url('../../icons/delete.gif'); +} + .printer { background-image: url('../../icons/print.gif'); } @@ -731,8 +735,9 @@ div.diapo { background-color: transparent; border: none; width: 16px; - height: 16px; + height: 22px; cursor: pointer; + padding: 0px; } #idFrameC #baskets .alert_datas_changed { diff --git a/www/skins/prod/959595/prodcolor.css b/www/skins/prod/959595/prodcolor.css index f7652b5b0c..5c057d036f 100644 --- a/www/skins/prod/959595/prodcolor.css +++ b/www/skins/prod/959595/prodcolor.css @@ -565,6 +565,10 @@ span.ww_winTitle { background-image: url('../../icons/basket.gif'); } +.baskDeleter { + background-image: url('../../icons/delete.gif'); +} + .printer { background-image: url('../../icons/print.gif'); } @@ -761,8 +765,9 @@ div.diapo { background-color: transparent; border: none; width: 16px; - height: 16px; + height: 22px; cursor: pointer; + padding: 0px; } #idFrameC #baskets .alert_datas_changed { diff --git a/www/skins/prod/jquery.Prod.js b/www/skins/prod/jquery.Prod.js index ff276a0fc3..a92976cb91 100644 --- a/www/skins/prod/jquery.Prod.js +++ b/www/skins/prod/jquery.Prod.js @@ -34,4 +34,4 @@ return false; }); }); -}()); \ No newline at end of file +}()); diff --git a/www/skins/prod/jquery.WorkZone.js b/www/skins/prod/jquery.WorkZone.js index 867aa6341f..92877b62aa 100644 --- a/www/skins/prod/jquery.WorkZone.js +++ b/www/skins/prod/jquery.WorkZone.js @@ -1,644 +1,600 @@ var p4 = p4 || {}; -(function(p4){ - - - - - - function refreshBaskets(baskId, sort, scrolltobottom, type) - { - - type = typeof type == 'undefined' ? 'basket' : type; - - var active = $('#baskets .SSTT.ui-state-active'); - if(baskId == 'current' && active.length>0) - baskId = active.attr('id').split('_').slice(1,2).pop(); - sort = ($.inArray(sort, ['date', 'name'])>=0) ? sort : ''; - - scrolltobottom = typeof scrolltobottom == 'undefined' ? false : scrolltobottom; - - $.ajax({ - type: "GET", - url: "/prod/WorkZone/", - data: { - type:'basket', - id:baskId, - sort:sort, - type:type - }, - beforeSend:function(){ - $('#basketcontextwrap').remove(); - }, - success: function(data){ - - var cache = $("#idFrameC #baskets"); - $(".SSTT",cache).droppable('destroy'); - - $('.bloc',cache).droppable('destroy'); - - cache.accordion('destroy') - .empty() - .append(data); - - activeBaskets(); - $('.basketTips').tooltip({ - delay: 200 - }); - cache.disableSelection(); - - if(!scrolltobottom) - return; - - p4.next_bask_scroll = true; - return; - } - }); - } - - - - function setTemporaryPref(name,value) - { - - $.ajax({ - type: "POST", - url: "/user/preferences/temporary/", - data: { - prop:name, - value:value - }, - success: function(data){ - return; - } - }); - } - - $("#baskets div.content select[name=valid_ord]").live('change',function(){ - - var active = $('#baskets .SSTT.ui-state-active'); - if(active.length==0) +(function(p4) { + function refreshBaskets(baskId, sort, scrolltobottom, type) { - return; - } + type = typeof type === 'undefined' ? 'basket' : type; - var order = $(this).val(); + var active = $('#baskets .SSTT.ui-state-active'); + if (baskId == 'current' && active.length > 0) + baskId = active.attr('id').split('_').slice(1, 2).pop(); + sort = ($.inArray(sort, ['date', 'name']) >= 0) ? sort : ''; - getContent(active, order); - }); + scrolltobottom = typeof scrolltobottom == 'undefined' ? false : scrolltobottom; + $.ajax({ + type: "GET", + url: "/prod/WorkZone/", + data: { + type: 'basket', + id: baskId, + sort: sort, + type:type + }, + beforeSend: function() { + $('#basketcontextwrap').remove(); + }, + success: function(data) { + var cache = $("#idFrameC #baskets"); + $(".SSTT", cache).droppable('destroy'); - function WorkZoneElementRemover(el, confirm) - { + $('.bloc', cache).droppable('destroy'); - if(confirm !== true && $(el).hasClass('groupings') && p4.reg_delete == true) - { - var buttons = {}; + cache.accordion('destroy') + .empty() + .append(data); + activeBaskets(); + $('.basketTips').tooltip({ + delay: 200 + }); + cache.disableSelection(); - buttons[language.valider] = function() { - $("#DIALOG-baskets").dialog('close').remove(); - WorkZoneElementRemover(el,true); - }; + if (!scrolltobottom) + return; - buttons[language.annuler] = function(){ - $("#DIALOG-baskets").dialog('close').remove(); - }; - - var texte = '

'+language.confirmRemoveReg+'

'+language.hideMessage+'
'; - $('body').append('
'); - $("#DIALOG-baskets").attr('title',language.removeTitle) - .empty() - .append(texte) - .dialog({ - - autoOpen:false, - closeOnEscape:true, - resizable:false, - draggable:false, - modal:true, - buttons:buttons, - draggable:false, - overlay: { - backgroundColor: '#000', - opacity: 0.7 - } - }).dialog('open'); - return; - } - - var id = $(el).attr('id').split('_').slice(2,4).join('_'); - - $.ajax({ - type: "POST", - url: $(el).attr('href'), - dataType:'json', - beforeSend : function(){ - $('.wrapCHIM_'+id).find('.CHIM').fadeOut(); - }, - success: function(data){ - - if(data.success) - { - humane.info(data.message); - p4.WorkZone.Selection.remove(id); - - $('.wrapCHIM_'+id).find('.CHIM').draggable('destroy'); - $('.wrapCHIM_'+id).remove(); - } - else - { - humane.error(data.message); - $('.wrapCHIM_'+id).find('.CHIM').fadeIn(); - } - return; - } - }); - return false; - } - - - function activeBaskets() - { - var cache = $("#idFrameC #baskets"); - - cache.accordion({ - active:'active', - autoHeight: false, - collapsible:true, - header:'div.header', - change:function(event,ui){ - - var b_active = $('#baskets .SSTT.active'); - if(p4.next_bask_scroll) - { - p4.next_bask_scroll = false; - - - if(!b_active.next().is(':visible')) - return; - - var t = $('#baskets .SSTT.active').position().top + b_active.next().height() -200; - - t = t < 0 ? 0 : t; - - $('#baskets .bloc').stop().animate({ - scrollTop:t - }); - } - - - var uiactive = $(this).find('.ui-state-active'); - b_active.not('.ui-state-active').removeClass('active'); - - if(uiactive.length === 0) - { - return; /* everything is closed */ - } - - var clicked = uiactive.attr('id').split('_').pop(); - var href = $('a', uiactive).attr('href'); - - uiactive.addClass('ui-state-focus active'); - - p4.WorkZone.Selection.empty(); - - getContent(uiactive); - - }, - changestart:function(event,ui){ - ui.newHeader.addClass('active'); - $('#basketcontextwrap .basketcontextmenu').hide(); - } - }); - $('.bloc',cache).droppable({ - accept:function(elem){ - if($(elem).hasClass('grouping') && !$(elem).hasClass('SSTT')) - return true; - return false; - }, - scope:'objects', - hoverClass:'groupDrop', - tolerance:'pointer', - drop:function(){ - fix(); - } - }); - - if($('.SSTT.active',cache).length>0) - { - var el = $('.SSTT.active',cache)[0]; - $(el).trigger('click'); - } - - - $(".SSTT, .content",cache) - .droppable({ - scope:'objects', - hoverClass:'baskDrop', - tolerance:'pointer', - accept:function(elem){ - if($(elem).hasClass('CHIM')) - { - if($(elem).closest('.content').prev()[0] == $(this)[0]) - { - return false; - } - } - if($(elem).hasClass('grouping') || $(elem).parent()[0]==$(this)[0]) - return false; - return true; - }, - drop:function(event,ui){ - dropOnBask(event,ui.draggable,$(this)); - } - }); - - if($('#basketcontextwrap').length === 0) - $('body').append('
'); - - $('.context-menu-item',cache).hover(function(){ - $(this).addClass('context-menu-item-hover'); - },function(){ - $(this).removeClass('context-menu-item-hover'); - }); - $.each($(".SSTT",cache),function(){ - var el = $(this); - $(this).find('.contextMenuTrigger').contextMenu('#'+$(this).attr('id')+' .contextMenu',{ - 'appendTo':'#basketcontextwrap', - openEvt:'click', - theme:'vista', - dropDown:true, - showTransition:'slideDown', - hideTransition:'hide', - shadow:false - }); - }); - - } - - - - function getContent(header, order) - { - if(window.console) - { - console.log('Reload content for ', header); - } - - var url = $('a', header).attr('href'); - - if(typeof order !== 'undefined') - { - url += '?order=' + order; - } - - $.ajax({ - type: "GET", - url: url, - dataType:'html', - beforeSend:function(){ - $('#tooltip').hide(); - header.next().addClass('loading'); - }, - success: function(data){ - header.removeClass('unread'); - - var dest = header.next(); - - dest.droppable('destroy').empty().removeClass('loading'); - - dest.append(data) - - $('a.WorkZoneElementRemover', dest) - .bind('mousedown', function(event){return false;}) - .bind('click', function(event){ - return WorkZoneElementRemover($(this), false); - }); - - dest.droppable({ - accept:function(elem){ - if($(elem).hasClass('CHIM')) - { - if($(elem).closest('.content')[0] == $(this)[0]) - { - return false; - } + p4.next_bask_scroll = true; + return; + } + }); + } + + function setTemporaryPref(name, value) + { + $.ajax({ + type: "POST", + url: "/user/preferences/temporary/", + data: { + prop: name, + value: value + }, + success: function(data) { + return; + } + }); + } + + $("#baskets div.content select[name=valid_ord]").live('change', function() { + var active = $('#baskets .SSTT.ui-state-active'); + if (active.length === 0) { + return; + } + + var order = $(this).val(); + + getContent(active, order); + }); + + function WorkZoneElementRemover(el, confirm) + { + var context = el.data('context'); + + if (confirm !== true && $(el).hasClass('groupings') && p4.reg_delete) { + var buttons = {}; + + buttons[language.valider] = function() { + $("#DIALOG-baskets").dialog('close').remove(); + WorkZoneElementRemover(el, true); + }; + + buttons[language.annuler] = function() { + $("#DIALOG-baskets").dialog('close').remove(); + }; + + var texte = '

' + language.confirmRemoveReg + '

' + language.hideMessage + '
'; + $('body').append('
'); + $("#DIALOG-baskets").attr('title', language.removeTitle) + .empty() + .append(texte) + .dialog({ + autoOpen: false, + closeOnEscape: true, + resizable: false, + draggable: false, + modal: true, + buttons: buttons, + draggable:false, + overlay: { + backgroundColor: '#000', + opacity: 0.7 + } + }).dialog('open'); + return; + } + + var id = $(el).attr('id').split('_').slice(2, 4).join('_'); + + $.ajax({ + type: "POST", + url: $(el).attr('href'), + dataType: 'json', + beforeSend: function() { + $('.wrapCHIM_' + id).find('.CHIM').fadeOut(); + }, + success: function(data) { + if (data.success) { + humane.info(data.message); + p4.WorkZone.Selection.remove(id); + + $('.wrapCHIM_' + id).find('.CHIM').draggable('destroy'); + $('.wrapCHIM_' + id).remove(); + + if (context === "reg_train_basket") { + var carousel = $("#PREVIEWCURRENTCONT"); + var carouselItemLength = $('li', carousel).length; + var selectedItem = $("li.prevTrainCurrent.selected", carousel); + var selectedItemIndex = $('li', carousel).index(selectedItem); + + // item is first and list has at least 2 items + if (selectedItemIndex === 0 && carouselItemLength > 1) { + // click next item + selectedItem.next().find("img").trigger("click"); + // item is last item and list has at least 2 items + } else if (carouselItemLength > 1 && selectedItemIndex === (carouselItemLength - 1)) { + // click previous item + selectedItem.prev().find("img").trigger("click"); + // Basket is empty + } else if (carouselItemLength > 1) { + // click next item + selectedItem.next().find("img").trigger("click"); + } else { + closePreview(); + } + + selectedItem.remove(); + } + } else { + humane.error(data.message); + $('.wrapCHIM_' + id).find('.CHIM').fadeIn(); + } + return; + } + }); + return false; + } + + + function activeBaskets() + { + var cache = $("#idFrameC #baskets"); + + cache.accordion({ + active: 'active', + autoHeight: false, + collapsible: true, + header: 'div.header', + change: function(event, ui) { + var b_active = $('#baskets .SSTT.active'); + if (p4.next_bask_scroll) { + p4.next_bask_scroll = false; + + if (!b_active.next().is(':visible')) + return; + + var t = $('#baskets .SSTT.active').position().top + b_active.next().height() - 200; + + t = t < 0 ? 0 : t; + + $('#baskets .bloc').stop().animate({ + scrollTop: t + }); + } + + var uiactive = $(this).find('.ui-state-active'); + b_active.not('.ui-state-active').removeClass('active'); + + if (uiactive.length === 0) { + return; /* everything is closed */ + } + + var clicked = uiactive.attr('id').split('_').pop(); + var href = $('a', uiactive).attr('href'); + + uiactive.addClass('ui-state-focus active'); + + p4.WorkZone.Selection.empty(); + + getContent(uiactive); + + }, + changestart: function(event, ui) { + ui.newHeader.addClass('active'); + $('#basketcontextwrap .basketcontextmenu').hide(); } - if($(elem).hasClass('grouping') || $(elem).parent()[0]==$(this)[0]) - return false; - return true; - }, - hoverClass:'baskDrop', - scope:'objects', - drop:function(event, ui){ - dropOnBask(event,ui.draggable,$(this).prev()); - }, - tolerance:'pointer' }); - $('.noteTips, .captionRolloverTips', dest).tooltip(); - - dest.find('.CHIM').draggable({ - helper : function(){ - $('body').append('
'+ - '
'+ - p4.WorkZone.Selection.length() + '
'); - return $('#dragDropCursor'); - }, - scope:"objects", - distance : 20, - scroll : false, - refreshPositions:true, - cursorAt: { - top:10, - left:-20 - }, - start:function(event, ui){ - var baskets = $('#baskets'); - baskets.append('
'+ - '
'); - $('.bottom-scroller',baskets).bind('mousemove',function(){ - $('#baskets .bloc').scrollTop($('#baskets .bloc').scrollTop()+30); - }); - $('.top-scroller',baskets).bind('mousemove',function(){ - $('#baskets .bloc').scrollTop($('#baskets .bloc').scrollTop()-30); - }); - }, - stop:function(){ - $('#baskets').find('.top-scroller, .bottom-scroller') - .unbind() - .remove(); - }, - drag:function(event,ui){ - if(is_ctrl_key(event) || $(this).closest('.content').hasClass('grouping')) - $('#dragDropCursor div').empty().append('+ '+p4.WorkZone.Selection.length()); - else - $('#dragDropCursor div').empty().append(p4.WorkZone.Selection.length()); - - } + $('.bloc', cache).droppable({ + accept: function(elem) { + if ($(elem).hasClass('grouping') && !$(elem).hasClass('SSTT')) + return true; + return false; + }, + scope: 'objects', + hoverClass: 'groupDrop', + tolerance: 'pointer', + drop: function() { + fix(); + } }); - answerSizer(); - return; - } - }); - } - - function dropOnBask(event,from,destKey, singleSelection) - { - var action = "", - from = $(from), dest_uri = '', lstbr = [], - sselcont = [], act = "ADD"; - - if(from.hasClass("CHIM")) - { - /* Element(s) come from an open object in the workzone */ - action = $(' #baskets .ui-state-active').hasClass('grouping') ? 'REG2' : 'CHU2'; - } - else - { - /* Element(s) come from result */ - action = 'IMGT2'; - } - - action += destKey.hasClass('grouping') ? 'REG' : 'CHU'; - - if(destKey.hasClass('content')) - { - /* I dropped on content */ - dest_uri = $('a', destKey.prev()).attr('href'); - } - else - { - /* I dropped on Title */ - dest_uri = $('a', destKey).attr('href'); - } - - if(window.console) - { - window.console.log('Requested action is ', action, ' and act on ', dest_uri); - } - - if(action=="IMGT2CHU" || action=="IMGT2REG") - { - if($(from).hasClass('.baskAdder') ) - { - lstbr = [$(from).attr('id').split('_').slice(2,4).join('_')]; - } - else if(singleSelection) - { - if(from.length == 1) { - lstbr = [$(from).attr('id').split('_').slice(1,3).join('_') ]; - } else { - lstbr = [$(from).selector.split('_').slice(1,3).join('_') ] - } - } - else - { - lstbr = p4.Results.Selection.get(); - } - } - else - { - sselcont = $.map(p4.WorkZone.Selection.get(), function(n,i){ - return $('.CHIM_'+n, $('#baskets .content:visible')).attr('id').split('_').slice(1,2).pop(); - }); - lstbr = p4.WorkZone.Selection.get(); - } - - switch(action) - { - case "CHU2CHU" : - if(!is_ctrl_key(event)) - act = "MOV"; - break; - - case "IMGT2REG": - case "CHU2REG" : - case "REG2REG": - var sameSbas = true, - sbas_reg = destKey.attr('sbas'); - - for (var i=0; i 0) { + var el = $('.SSTT.active', cache)[0]; + $(el).trigger('click'); } - if(sameSbas === false) - { - return p4.Alerts('', language.reg_wrong_sbas); - } + $(".SSTT, .content", cache) + .droppable({ + scope: 'objects', + hoverClass: 'baskDrop', + tolerance: 'pointer', + accept: function(elem) { + if ($(elem).hasClass('CHIM')) { + if ($(elem).closest('.content').prev()[0] == $(this)[0]) { + return false; + } + } + if ($(elem).hasClass('grouping') || $(elem).parent()[0] == $(this)[0]) + return false; + return true; + }, + drop: function(event, ui) { + dropOnBask(event, ui.draggable, $(this)); + } + }); + + if ($('#basketcontextwrap').length === 0) + $('body').append('
'); + + $('.context-menu-item', cache).hover(function() { + $(this).addClass('context-menu-item-hover'); + }, function() { + $(this).removeClass('context-menu-item-hover'); + }); + $.each($(".SSTT", cache), function() { + var el = $(this); + $(this).find('.contextMenuTrigger').contextMenu('#' + $(this).attr('id') + ' .contextMenu', { + 'appendTo': '#basketcontextwrap', + openEvt: 'click', + theme: 'vista', + dropDown: true, + showTransition: 'slideDown', + hideTransition: 'hide', + shadow: false + }); + }); - break; } - switch(act+action) + function getContent(header, order) { - case 'MOVCHU2CHU': - var url = dest_uri + "stealElements/"; - var data = { - elements:sselcont - }; - break; - case 'ADDCHU2REG': - case 'ADDREG2REG': - case 'ADDIMGT2REG': - case 'ADDCHU2CHU': - case 'ADDREG2CHU': - case 'ADDIMGT2CHU': - var url = dest_uri + "addElements/"; - var data = { - lst:lstbr.join(';') - }; - break; - default: - if(window.console) - { - console.log('Should not happen'); - } - return; - break; + if (window.console) { + console.log('Reload content for ', header); + } + + var url = $('a', header).attr('href'); + + if (typeof order !== 'undefined') { + url += '?order=' + order; + } + + $.ajax({ + type: "GET", + url: url, + dataType: 'html', + beforeSend: function() { + $('#tooltip').hide(); + header.next().addClass('loading'); + }, + success: function(data) { + header.removeClass('unread'); + + var dest = header.next(); + + dest.droppable('destroy').empty().removeClass('loading'); + + dest.append(data); + + $('a.WorkZoneElementRemover', dest).bind('mousedown', function(event) { + return false; + }).bind('click', function(event) { + return WorkZoneElementRemover($(this), false); + }); + + dest.droppable({ + accept: function(elem) { + if ($(elem).hasClass('CHIM')) { + if ($(elem).closest('.content')[0] == $(this)[0]) { + return false; + } + } + if ($(elem).hasClass('grouping') || $(elem).parent()[0] == $(this)[0]) + return false; + return true; + }, + hoverClass: 'baskDrop', + scope: 'objects', + drop: function(event, ui) { + dropOnBask(event, ui.draggable, $(this).prev()); + }, + tolerance: 'pointer' + }); + + $('.noteTips, .captionRolloverTips', dest).tooltip(); + + dest.find('.CHIM').draggable({ + helper: function() { + $('body').append('
' + + '
' + + p4.WorkZone.Selection.length() + '
'); + return $('#dragDropCursor'); + }, + scope: "objects", + distance: 20, + scroll: false, + refreshPositions: true, + cursorAt: { + top: 10, + left: -20 + }, + start: function(event, ui) { + var baskets = $('#baskets'); + baskets.append('
' + + '
'); + $('.bottom-scroller', baskets).bind('mousemove', function() { + $('#baskets .bloc').scrollTop($('#baskets .bloc').scrollTop() + 30); + }); + $('.top-scroller', baskets).bind('mousemove', function() { + $('#baskets .bloc').scrollTop($('#baskets .bloc').scrollTop() - 30); + }); + }, + stop: function() { + $('#baskets').find('.top-scroller, .bottom-scroller') + .unbind() + .remove(); + }, + drag: function(event, ui) { + if (is_ctrl_key(event) || $(this).closest('.content').hasClass('grouping')) + $('#dragDropCursor div').empty().append('+ ' + p4.WorkZone.Selection.length()); + else + $('#dragDropCursor div').empty().append(p4.WorkZone.Selection.length()); + + } + }); + answerSizer(); + return; + } + }); } - if(window.console) + function dropOnBask(event, from, destKey, singleSelection) { - window.console.log('About to execute ajax POST on ',url,' with datas ', data ); - } + var action = "", from = $(from), dest_uri = '', lstbr = [], sselcont = [], act = "ADD"; - $.ajax({ - type: "POST", - url: url, - data: data, - dataType:'json', - beforeSend:function(){ - - }, - success: function(data){ - if(!data.success) - { - humane.error(data.message); - } - else - { - humane.info(data.message); - } - if(act == 'MOV' || $(destKey).next().is(':visible') === true || $(destKey).hasClass('content') === true) - { - $('.CHIM.selected:visible').fadeOut(); - p4.WorkZone.Selection.empty(); - return p4.WorkZone.reloadCurrent(); - } - - return; - } - }); - } - - - - function fix() - { - $.ajax({ - type: "POST", - url: "/prod/WorkZone/attachStories/", - data:{stories:p4.Results.Selection.get()}, - dataType: "json", - success: function(data){ - humane.info(data.message); - p4.WorkZone.refresh(); - } - }); - } - - function unfix(link) - { - $.ajax({ - type: "POST", - url: link, - dataType: "json", - success: function(data){ - humane.info(data.message); - p4.WorkZone.refresh(); - } - }); - } - - $(document).ready(function(){ - activeBaskets(); - - $('a.story_unfix').live('click', function(){ - unfix($(this).attr('href')); - - return false; - }); - - p4.WorkZone = { - 'Selection':new Selectable($('#baskets'), {selector : '.CHIM'}), - 'refresh':refreshBaskets, - 'addElementToBasket': function(sbas_id, record_id, event , singleSelection) { - singleSelection = !!singleSelection || false; - - if($('#baskets .SSTT.active').length == 1) { - return dropOnBask(event, $('#IMGT_'+ sbas_id +'_'+ record_id), $('#baskets .SSTT.active'), singleSelection); + if (from.hasClass("CHIM")) { + /* Element(s) come from an open object in the workzone */ + action = $(' #baskets .ui-state-active').hasClass('grouping') ? 'REG2' : 'CHU2'; } else { - humane.info(language.noActiveBasket); + /* Element(s) come from result */ + action = 'IMGT2'; } - }, - 'reloadCurrent':function(){ - var sstt = $('#baskets .content:visible'); - if(sstt.length === 0) - return; - getContent(sstt.prev()); - }, - 'close':function(){ - var frame = $('#idFrameC'), - that = this; + action += destKey.hasClass('grouping') ? 'REG' : 'CHU'; - if(!frame.hasClass('closed')) - { - frame.data('openwidth', frame.width()); - frame.animate({width:100}, - 300, - 'linear', - function(){ - answerSizer(); - linearize(); - $('#answers').trigger('resize'); + if (destKey.hasClass('content')) { + /* I dropped on content */ + dest_uri = $('a', destKey.prev()).attr('href'); + } else { + /* I dropped on Title */ + dest_uri = $('a', destKey).attr('href'); + } + + if (window.console) { + window.console.log('Requested action is ', action, ' and act on ', dest_uri); + } + + if (action === "IMGT2CHU" || action === "IMGT2REG") { + if ($(from).hasClass('.baskAdder')) { + lstbr = [$(from).attr('id').split('_').slice(2, 4).join('_')]; + } else if (singleSelection) { + if (from.length === 1) { + lstbr = [$(from).attr('id').split('_').slice(1, 3).join('_')]; + } else { + lstbr = [$(from).selector.split('_').slice(1, 3).join('_')]; + } + } else { + lstbr = p4.Results.Selection.get(); + } + } else { + sselcont = $.map(p4.WorkZone.Selection.get(), function(n, i) { + return $('.CHIM_' + n, $('#baskets .content:visible')).attr('id').split('_').slice(1, 2).pop(); }); - frame.addClass('closed'); - $('.escamote', frame).hide(); - $('li.ui-tabs-selected', frame).removeClass('ui-tabs-selected'); - frame.unbind('click.escamote').bind('click.escamote', function(){ - that.open(); - }) + lstbr = p4.WorkZone.Selection.get(); } - }, - 'open':function(){ - var frame = $('#idFrameC'); + switch (action) { + case "CHU2CHU" : + if (!is_ctrl_key(event)) act = "MOV"; + break; + case "IMGT2REG": + case "CHU2REG" : + case "REG2REG": + var sameSbas = true, sbas_reg = destKey.attr('sbas'); - if(frame.hasClass('closed')) - { - var width = frame.data('openwidth') ? frame.data('openwidth') : 300; - frame.css({width:width}); - answerSizer(); - linearize(); - frame.removeClass('closed'); - $('.escamote', frame).show(); - frame.unbind('click.escamote'); + for (var i = 0; i < lstbr.length && sameSbas; i++) { + if (lstbr[i].split('_').shift() != sbas_reg) { + sameSbas = false; + break; + } + } + + if (sameSbas === false) { + return p4.Alerts('', language.reg_wrong_sbas); + } + + break; } - } - }; - }); - return; -}(p4)) + switch (act + action) { + case 'MOVCHU2CHU': + var url = dest_uri + "stealElements/"; + var data = { + elements: sselcont + }; + break; + case 'ADDCHU2REG': + case 'ADDREG2REG': + case 'ADDIMGT2REG': + case 'ADDCHU2CHU': + case 'ADDREG2CHU': + case 'ADDIMGT2CHU': + var url = dest_uri + "addElements/"; + var data = { + lst: lstbr.join(';') + }; + break; + default: + if (window.console) { + console.log('Should not happen'); + } + return; + break; + } + + if (window.console) { + window.console.log('About to execute ajax POST on ', url, ' with datas ', data); + } + + $.ajax({ + type: "POST", + url: url, + data: data, + dataType: 'json', + beforeSend: function() { + + }, + success: function(data) { + if (!data.success) { + humane.error(data.message); + } else { + humane.info(data.message); + } + if (act == 'MOV' || $(destKey).next().is(':visible') === true || $(destKey).hasClass('content') === true) { + $('.CHIM.selected:visible').fadeOut(); + p4.WorkZone.Selection.empty(); + return p4.WorkZone.reloadCurrent(); + } + + return; + } + }); + } + + function fix() + { + $.ajax({ + type: "POST", + url: "/prod/WorkZone/attachStories/", + data: {stories: p4.Results.Selection.get()}, + dataType: "json", + success: function(data) { + humane.info(data.message); + p4.WorkZone.refresh(); + } + }); + } + + function unfix(link) + { + $.ajax({ + type: "POST", + url: link, + dataType: "json", + success: function(data) { + humane.info(data.message); + p4.WorkZone.refresh(); + } + }); + } + + $(document).ready(function() { + activeBaskets(); + + $('a.story_unfix').live('click', function() { + unfix($(this).attr('href')); + + return false; + }); + + p4.WorkZone = { + 'Selection': new Selectable($('#baskets'), {selector: '.CHIM'}), + 'refresh': refreshBaskets, + 'addElementToBasket': function(sbas_id, record_id, event, singleSelection) { + singleSelection = !!singleSelection || false; + + if ($('#baskets .SSTT.active').length === 1) { + return dropOnBask(event, $('#IMGT_' + sbas_id + '_' + record_id), $('#baskets .SSTT.active'), singleSelection); + } else { + humane.info(language.noActiveBasket); + } + }, + "removeElementFromBasket": WorkZoneElementRemover, + 'reloadCurrent': function() { + var sstt = $('#baskets .content:visible'); + if (sstt.length === 0) + return; + getContent(sstt.prev()); + }, + 'close': function() { + var frame = $('#idFrameC'), that = this; + + if (!frame.hasClass('closed')) + { + frame.data('openwidth', frame.width()); + frame.animate({width: 100}, + 300, + 'linear', + function() { + answerSizer(); + linearize(); + $('#answers').trigger('resize'); + }); + frame.addClass('closed'); + $('.escamote', frame).hide(); + $('li.ui-tabs-selected', frame).removeClass('ui-tabs-selected'); + frame.unbind('click.escamote').bind('click.escamote', function() { + that.open(); + }) + } + }, + 'open': function() { + var frame = $('#idFrameC'); + + if (frame.hasClass('closed')) + { + var width = frame.data('openwidth') ? frame.data('openwidth') : 300; + frame.css({width: width}); + answerSizer(); + linearize(); + frame.removeClass('closed'); + $('.escamote', frame).show(); + frame.unbind('click.escamote'); + } + } + }; + }); + + return; +}(p4)); diff --git a/www/skins/prod/jquery.main-prod.js b/www/skins/prod/jquery.main-prod.js index 1ee74571c5..1d9a3144a1 100644 --- a/www/skins/prod/jquery.main-prod.js +++ b/www/skins/prod/jquery.main-prod.js @@ -2502,6 +2502,12 @@ function evt_add_in_chutier(sbas_id, record_id,event, singleSelection) p4.WorkZone.addElementToBasket(sbas_id, record_id, event, singleSelection); } +function remove_from_basket(el, confirm) +{ + var confirm = confirm || false; + p4.WorkZone.removeElementFromBasket(el, confirm); +} + function doSpecialSearch(qry, allbase){ if (allbase) { From 28658aaf98d4691baaa36f6dead052893d383a79 Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Mon, 17 Jun 2013 12:35:21 +0200 Subject: [PATCH 4/4] Adress PR's comments --- lib/Doctrine/Entities/Basket.php | 14 -------------- lib/classes/record/preview.php | 16 +++++++++++++++- templates/web/prod/preview/tools.html.twig | 17 +++++++---------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/lib/Doctrine/Entities/Basket.php b/lib/Doctrine/Entities/Basket.php index accaa670ca..263c92ccfe 100644 --- a/lib/Doctrine/Entities/Basket.php +++ b/lib/Doctrine/Entities/Basket.php @@ -405,20 +405,6 @@ class Basket return false; } - public function getBasketElementFromRecord(Application $app, \record_adapter $record) - { - foreach ($this->getElements() as $basket_element) { - $bask_record = $basket_element->getRecord($app); - - if ($bask_record->get_record_id() == $record->get_record_id() - && $bask_record->get_sbas_id() == $record->get_sbas_id()) { - return $basket_element; - } - } - - return null; - } - public function getSize(Application $app) { $totSize = 0; diff --git a/lib/classes/record/preview.php b/lib/classes/record/preview.php index 8e2f106183..23e82c86c2 100644 --- a/lib/classes/record/preview.php +++ b/lib/classes/record/preview.php @@ -80,6 +80,8 @@ class record_preview extends record_adapter */ protected $download_popularity; + protected $original_item; + /** * * @param Application $app @@ -110,6 +112,7 @@ class record_preview extends record_adapter } foreach ($results->getResults() as $record) { $number = $pos; + $this->original_item = $record; $sbas_id = $record->get_sbas_id(); $record_id = $record->get_record_id(); break; @@ -121,6 +124,7 @@ class record_preview extends record_adapter $record_id = $contId[1]; $this->container = new record_adapter($app, $sbas_id, $record_id); + $this->original_item = $this->container; if ($pos == 0) { $number = 0; $title = _('preview:: regroupement '); @@ -128,6 +132,7 @@ class record_preview extends record_adapter $children = $this->container->get_children(); foreach ($children as $child) { $sbas_id = $child->get_sbas_id(); + $this->original_item = $child; $record_id = $child->get_record_id(); if ($child->get_number() == $pos) break; @@ -153,6 +158,7 @@ class record_preview extends record_adapter /* @var $element \Entities\BasketElement */ $i ++; if ($first) { + $this->original_item = $element; $sbas_id = $element->getRecord($this->app)->get_sbas_id(); $record_id = $element->getRecord($this->app)->get_record_id(); $this->name = $Basket->getName(); @@ -161,6 +167,7 @@ class record_preview extends record_adapter $first = false; if ($element->getOrd() == $pos) { + $this->original_item = $element; $sbas_id = $element->getRecord($this->app)->get_sbas_id(); $record_id = $element->getRecord($this->app)->get_record_id(); $this->name = $Basket->getName(); @@ -181,6 +188,7 @@ class record_preview extends record_adapter if ($first) { $sbas_id = $element->get_record()->get_sbas_id(); $record_id = $element->get_record()->get_record_id(); + $this->original_item = $element; $this->name = $entry->get_title(); $number = $element->get_ord(); } @@ -189,6 +197,7 @@ class record_preview extends record_adapter if ($element->get_ord() == $pos) { $sbas_id = $element->get_record()->get_sbas_id(); $record_id = $element->get_record()->get_record_id(); + $this->original_item = $element; $this->name = $entry->get_title(); $number = $element->get_ord(); } @@ -258,6 +267,11 @@ class record_preview extends record_adapter return $this->env == 'REG'; } + public function get_original_item() + { + return $this->original_item; + } + /** * * @return String @@ -638,4 +652,4 @@ class record_preview extends record_adapter return $this->download_popularity; } -} +} \ No newline at end of file diff --git a/templates/web/prod/preview/tools.html.twig b/templates/web/prod/preview/tools.html.twig index 1cdc0c1f3e..a21019ea89 100644 --- a/templates/web/prod/preview/tools.html.twig +++ b/templates/web/prod/preview/tools.html.twig @@ -5,16 +5,13 @@ onclick="evt_add_in_chutier('{{record.get_sbas_id()}}','{{record.get_record_id()}}',false,this);return(false);"> {% endif %} -{% if record.is_from_basket() and app['authentication'].getUser().ACL().has_right_on_base(record.get_base_id(), 'canputinalbum') %} - {% set basketElement = record.get_container().getBasketElementFromRecord(app, record) %} - {% if basketElement is not none %} - - - {% endif %} +{% if record.is_from_basket() %} + + {% endif %}