Changeset 2588 in main for branches


Ignore:
Timestamp:
08/27/13 09:07:12 (6 years ago)
Author:
pcosquer
Message:

branch 2.0: merge commits [2576] to [2587]

Location:
branches/2.0
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • branches/2.0

  • branches/2.0/CHANGES

    r2576 r2588  
    1 Release 2.0.1 
    2 ============= 
     1Release 2.0.1 (Aug 27, 2013) 
     2============================ 
    33 
    44 * Apache configuration files: allow access to public thumbnails 
    5  * Document3D: fix download of a decomposed STEP file 
    6  * Document3D: fix 3D view of published Document3D (add a missing JavaScript file) 
    7  * Navigate: fix overlapping of fullscreen button and thumbnails list 
     5 * Document3D: 
     6    * fix download of a decomposed STEP file 
     7    * fix 3D view of published Document3D (add a missing JavaScript file) 
     8    * fix order of column headers in the decompose view 
     9 * Navigate: 
     10    * fix overlapping of fullscreen button and thumbnails list 
     11    * disable fullscreen button if full screen is not supported, fix #216 
     12    * fix buttons on Google Chrome on Windows (#217) 
     13 * Fix upload and check-in on Internet Explorer 10 (#215) 
     14 * Fix notification messages of the "create and attach" feature 
  • branches/2.0/docs/en/admin/ht_1_install_server.rst

    r2563 r2588  
    33=================================================== 
    44 
    5 This document describes how to install an openPLM server using the 1.2 version 
     5This document describes how to install an openPLM server using the 2.0 version 
    66tarball. 
    77 
     
    5757=================================== 
    5858 
    59     * `Download OpenPLM <http://wiki.openplm.org/trac/downloads/8>`_ 
     59    * `Download OpenPLM <http://wiki.openplm.org/trac/downloads/9>`_ 
    6060 
    6161Extract the code in /var and rename the directory to django 
  • branches/2.0/docs/en/devel/applications/document3D

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/2.0/openPLM

  • branches/2.0/openPLM/apps/document3D/assembly.py

    r2452 r2588  
    191191        if self._lock: 
    192192            doc.lock(df) 
     193        return df 
    193194 
    194195    def _checkin_step(self, doc, node): 
  • branches/2.0/openPLM/apps/document3D/templates/DisplayDecompose.htm

    r2400 r2588  
    3030                    <th>{% trans "Unit" %}</th> 
    3131                    <th>{% trans "Type" %}</th> 
     32                    <th>{% trans "Name" %}  </th> 
    3233                    <th>{% trans "Reference" %} </th> 
    3334                    <th>{% trans "Revision" %} </th> 
    34                     <th>{% trans "Name" %}  </th> 
    3535                    <th>&nbsp;</th> 
    3636                </thead> 
  • branches/2.0/openPLM/apps/document3D/templates/extra_attributes.html

    r948 r2588  
    11<table class="Content"> 
    2     {% for field in creation_form %}  
     2    {% for field in creation_form.visible_fields %}  
    33        {% if field.name != "reference" and field.name != "name" and field.name != "revision" %}  
    44            <tr> 
     
    1616        {% endif %} 
    1717    {% endfor %}  
     18    {% for field in creation_form.hidden_fields %} 
     19        {{ field }} 
     20    {% endfor %} 
    1821</table> 
  • branches/2.0/openPLM/apps/document3D/views.py

    r2412 r2588  
    55 
    66from django.conf import settings 
    7 from django.contrib.auth.decorators import login_required 
    87from django.contrib.auth.views import redirect_to_login 
    98from django.core.files.base import File 
     
    1413from openPLM.plmapp.views.base import (handle_errors, secure_required, 
    1514        get_generic_data, get_obj, get_obj_by_id, init_ctx) 
     15from openPLM.plmapp.views.ajax import ajax_login_required 
    1616from openPLM.apps.document3D import forms 
    1717from openPLM.apps.document3D import models 
     
    689689 
    690690@secure_required 
    691 @login_required 
     691@ajax_login_required 
    692692def ajax_part_creation_form(request, prefix): 
    693693    """ 
  • branches/2.0/openPLM/plmapp/models/history.py

    r2510 r2588  
    1414from .part import get_all_parts 
    1515from .document import get_all_documents 
     16 
     17def _prefetch_related(qs, *extra): 
     18    return qs.prefetch_related("plmobject", "user", "user__profile", *extra) 
    1619 
    1720# history stuff 
     
    6467        return "History<%s, %s, %s>" % (self.plmobject, self.date, self.action) 
    6568 
     69    def get_day_as_int(self): 
     70        return self.date.year * 10000 + self.date.month * 100 + self.date.day 
     71 
    6672    def get_day(self): 
    6773        return datetime.date(self.date.year, self.date.month, self.date.day) 
     
    6975    @classmethod 
    7076    def timeline_items(cls, user): 
    71         return cls.objects.all().order_by("-date").select_related("user", "plmobject") 
     77        return _prefetch_related(cls.objects.all().order_by("-date")) 
    7278 
    7379    @property 
     
    8995        q |= models.Q(plmobject__group__in=user.groups.all()) 
    9096        histories = History.objects.filter(q).order_by('-date') 
    91         return histories.select_related("user", "plmobject__type", "plmobject__reference", 
    92             "plmobject__revision") 
     97        return _prefetch_related(histories) 
    9398 
    9499class UserHistory(AbstractHistory): 
     
    106111    @classmethod 
    107112    def timeline_items(cls, user): 
    108         return cls.objects.all().order_by("-date").select_related("user", "plmobject") 
     113        return _prefetch_related(cls.objects.all().order_by("-date")) 
    109114 
    110115 
     
    119124    @classmethod 
    120125    def timeline_items(cls, user): 
    121         return cls.objects.all().order_by("-date").select_related("user", 
    122                 "plmobject", "plmobject__groupinfo") 
     126        return _prefetch_related(cls.objects.all().order_by("-date"), "plmobject__groupinfo") 
    123127 
    124128    @property 
     
    274278        if list_display["display_document"] or list_display["display_part"]: 
    275279            history_plmobject = History.timeline_items(user) 
    276             if list_display["display_document"]: 
     280            if list_display["display_document"] and not list_display["display_part"]: 
    277281                documents = get_all_documents().keys() 
    278                 history_document = history_plmobject.filter(plmobject__type__in = documents) 
    279             if list_display["display_part"]: 
     282                history_plmobject = history_plmobject.filter(plmobject__type__in = documents) 
     283            elif not list_display["display_document"]: 
    280284                parts = get_all_parts().keys() 
    281                 if list_display["display_document"]: 
    282                     history_plmobject =  history_document | history_plmobject.filter(plmobject__type__in = parts) 
    283                 else: 
    284                     history_plmobject = history_plmobject.filter(plmobject__type__in = parts) 
    285             else: 
    286                 history_plmobject = history_document 
     285                history_plmobject = history_plmobject.filter(plmobject__type__in = parts) 
    287286            history_plmobject = history_plmobject.filter(date__gte = date_end, date__lt = date_begin) 
    288             history_plmobject = history_plmobject.select_related("plmobject", "user__profile") 
    289287 
    290288            if done_by: 
     
    297295            history_group = GroupHistory.timeline_items(user) 
    298296            history_group = history_group.filter(date__gte = date_end, date__lt = date_begin) 
    299             history_group = history_group.select_related("plmobject", "user__profile") 
    300297 
    301298            if done_by != "": 
  • branches/2.0/openPLM/plmapp/models/plmobject.py

    r2559 r2588  
    215215            super(PLMObject, self).__init__(*args, **kwargs) 
    216216        self._promotion_errors = None 
     217        self._title = None 
     218        self._plmobject_url = None 
    217219 
    218220    def __unicode__(self): 
     
    222224    @property 
    223225    def title(self): 
    224         attrs = tuple(esc(x) for x in [self.name, self.type, self.reference, self.revision]) 
    225         return mark_safe(u'''<span class="name">%s</span> (<span class="type">%s</span> // <span class="reference">%s</span> 
     226        if self._title is None: 
     227            attrs = tuple(esc(x) for x in [self.name, self.type, self.reference, self.revision]) 
     228            self._title = mark_safe(u'''<span class="name">%s</span> (<span class="type">%s</span> // <span class="reference">%s</span> 
    226229 // <span class="revision">%s</span>)''' % attrs) 
     230        return self._title 
    227231 
    228232    def _is_promotable(self): 
     
    374378    @property 
    375379    def plmobject_url(self): 
    376         url = u"/object/%s/%s/%s/" % (self.type, self.reference, self.revision) 
    377         return iri_to_uri(url) 
    378  
     380        if self._plmobject_url is None: 
     381            url = u"/object/%s/%s/%s/" % (self.type, self.reference, self.revision) 
     382            self._plmobject_url = iri_to_uri(url) 
     383        return self._plmobject_url 
    379384 
    380385    @classmethod 
  • branches/2.0/openPLM/plmapp/static/js/file.js

    r2384 r2588  
    3838        $("span.warning").remove(); 
    3939    }); 
    40     if(($.browser.msie!=true)&&($.browser.opera!=true)&&(xhr!=null)){ 
     40    //if(($.browser.msie!=true)&&($.browser.opera!=true)&&(xhr!=null)){ 
    4141        input.attr("multiple","multiple"); 
    42     } 
     42    //} 
    4343    var td_input = $("<td></td>"); 
    4444    td_input.append(input); 
     
    191191        //create an object related to the file in the files_info array-like 
    192192        var f_id = gen_uuid(); 
    193         if(($.browser.opera!=true)&&($.browser.msie!=true)){ 
     193        if(FD_SUPPORTED){ 
    194194            files_info[key]={"field_name":" ", "f_name":f.name, "p_id":f_id, "size":size, "uploaded":0, "status":"waiting"}; 
    195195        }else{ 
     
    241241     
    242242    //input file's multiple selection is not enable for opera and IE 
    243     if(($.browser.opera)||($.browser.msie)||(input.files.length==1)){ 
     243    if(input.files.length==1){ 
    244244        $(input).remove(); 
    245245    } 
     
    462462     
    463463    var inputs_file = $(f_form).find("input[type='file']"); 
    464     if(($.browser.opera!=true)&&($.browser.msie!=true)){ 
     464    if(FD_SUPPORTED){ 
    465465        $.each(inputs_file, function(id, input){ 
    466466            files = input.files; 
     
    551551        t=window.setTimeout(update_progress_info, 1000); 
    552552         
    553         if(($.browser.opera)||($.browser.msie)){ 
     553        if(!FD_SUPPORTED){ 
    554554            var x=document.getElementById("hidden_frame"); 
    555555            var y=(x.contentWindow || x.contentDocument); 
     
    577577    t=window.setTimeout(update_progress_info, 1000); 
    578578     
    579     if(($.browser.opera!=true)&&($.browser.msie!=true)){ 
     579    if(FD_SUPPORTED){ 
    580580        xhr.onreadystatechange = function() { 
    581581            if(xhr.readyState == 4){ 
     
    641641//get the appropriate XmlHttpRequest object 
    642642function getXHR(){ 
    643     var xhr=null; 
    644          
    645     if (window.XMLHttpRequest || window.ActiveXObject) { 
    646             if (window.ActiveXObject) { 
    647                 try { 
    648                         xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
    649                 } catch(e) { 
    650                         xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
    651                 } 
    652             } else { 
    653                     xhr = new XMLHttpRequest();  
    654             } 
    655     } else { 
    656             return null; 
    657     } 
    658      
    659     return xhr; 
     643    return new XMLHttpRequest; 
     644 
    660645} 
    661646 
     
    665650//sets data according to the browser used 
    666651var data; 
    667 if(($.browser.opera!=true)&&($.browser.msie!=true)){ 
     652var FD_SUPPORTED = FormData !== undefined; 
     653if(FD_SUPPORTED){ 
    668654    data = new FormData($('form.hidden')[0]); 
    669655} 
     
    736722    //if the browser supports xmlhttprequest object 
    737723     
    738         if(($.browser.msie!=true)&&($.browser.opera!=true)){ 
     724        if(FD_SUPPORTED){ 
    739725            $("input[type='file']").attr('multiple','multiple'); 
    740726        } 
  • branches/2.0/openPLM/plmapp/static/js/navigate.js

    r2576 r2588  
    108108    $("#FilterNav, #RevisionsNav, #full-screen").css("right", "10px"); 
    109109} 
    110  
     110var escapeHTML = (function () { 
     111    'use strict'; 
     112    var chr = { '"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;' }; 
     113    return function (text) { 
     114        return text.replace(/[\"&<>]/g, function (a) { return chr[a]; }); 
     115    }; 
     116}()); 
    111117function display_thumbnails(node_id, ajax_url){ 
    112118    $("#thumbnailsList").empty(); 
     
    115121        success: function( data ) { 
    116122            var list = $("#thumbnailsList"); 
     123            var div, name, title; 
    117124            $.each(data["files"], function(index, value){ 
    118                 var url = value.url; 
    119                 var img = value.img; 
    120                 var title = "Download " + value["name"]; 
    121                 if (value.deprecated) { 
    122                     title += " ! deprecated !"; 
    123                 } 
     125                name = escapeHTML(value.name); 
    124126                if (value.deleted) { 
    125                     div = "<div><span>" + value.name + " - deleted" + "</span></div>"; 
     127                    div = "<div><span>" + name + " - deleted</span></div>"; 
    126128                } else { 
    127                     div = "<div><a href='"+ url +"'><div> <img src='" + img + "' title='" + title + "' /><span>" + value.name + "</span></div></a></div>"; 
     129                    title = "Download " + name; 
     130                    if (value.deprecated) { 
     131                        title += " ! deprecated !"; 
     132                    } 
     133                    div = "<div><a href='"+ value.url +"'><div> <img src='" + value.img + "' title='" + title + "' /><span>" + name + "</span></div></a></div>"; 
    128134                } 
    129135                list.append($(div)); 
     
    505511            var click_prevented = false; 
    506512            $document.bind('mousemove.drag', function(e) { 
     513                if (e.pageX - mouse.x == 0 && e.pageY - mouse.y == 0) 
     514                    return; 
    507515                if (! click_prevented ){ 
    508516                    links.bind("click.prevent", function(event) { event.preventDefault(); }); 
     
    621629        }); 
    622630 
    623         $("#full-screen").click(function() { 
    624             var main = document.getElementById("main_content"); 
    625             if (screenfull.enabled) { 
     631        if (screenfull.enabled) { 
     632            $("#full-screen").click(function() { 
     633                var main = document.getElementById("main_content"); 
    626634                screenfull.toggle(main); 
    627             } 
    628  
    629         }); 
     635            }); 
     636        } else { 
     637            $("#full-screen").hide(); 
     638        } 
    630639        var width = $("#main_content").width(); 
    631640        var height = $("#main_content").height(); 
  • branches/2.0/openPLM/plmapp/templatetags/plmapp_tags.py

    r2522 r2588  
    434434    return code.lower().replace("_", "-") 
    435435 
     436@register.filter 
     437def fix_rendered_result(rendered_text): 
     438    # ugly hack to fix invalid rendered content 
     439    # it replaces <a .."/><span ...</a> with <a .."<span .. </a> 
     440    return rendered_text.replace('"/><span', '"><span>') 
  • branches/2.0/openPLM/plmapp/views/main.py

    r2478 r2588  
    502502                try: 
    503503                    attach(ctrl) 
    504                     messages.info(request, _(u"Files has been attached")) 
     504                    message = _(u"The %(Object_type)s has been attached") % dict(Object_type = type_) 
     505                    messages.info(request, message) 
    505506                except (ControllerError, ValueError) as e: 
    506507                    # crtl cannot be attached (maybe the state of the 
  • branches/2.0/openPLM/templates/history.html

    r2528 r2588  
    3333 
    3434        {% if object_history%} 
    35             {% regroup object_history by get_day as histories %} 
     35            {% regroup object_history by get_day_as_int as histories %} 
    3636            {% for group in histories %} 
    3737                <div class="timeline" > 
    38                     <h3 class="hplm">{{ group.grouper|naturalday|capfirst}}</h3> 
     38                    <h3 class="hplm">{{ group.list.0.date|naturalday|capfirst}}</h3> 
    3939 
    4040                    <dl> 
     
    4242                            <dt class="changeset" id="{{histo.id}}"> 
    4343                            <img class="avatar" src="{% avatar_url histo.user %}"/> 
    44                             <span class="time"> 
    45                                 {{histo.date|date:"G:i"}} 
    46                             </span> 
    47                             {% spaceless %} 
    48                                 <a href="/user/{{histo.user|urlencode }}/"> 
    49                                     <span class="user">{{histo.user}}</span> 
    50                                 </a> 
    51                             {% endspaceless %} 
    52                             <span class="action"> 
    53                                 {{histo.action}} 
    54                             </span> 
     44                            <span class="time"> {{histo.date|date:"G:i"}} </span> 
     45                            <a href="/user/{{histo.user|urlencode }}/"><span class="user">{{histo.user}}</span></a> 
     46                            <span class="action"> {{ histo.action }} </span> 
    5547                            {% if show_identifiers %} 
    5648                                <a href="{{ histo.plmobject.plmobject_url}}">{{ histo.title }}</a>  
    5749                                <span>:</span> 
    58                             {% endif %} 
    59                             {% if show_revisions %} 
     50                            {% elif show_revisions %} 
    6051                                <span class="revision"> 
    6152                                    {%if obj.revision == histo.plmobject.revision%} 
     
    6960                            </dt> 
    7061                            <dd> 
    71                             <div class="details"> 
    72                                 {{ histo.details|linebreaksbr }} 
    73                             </div> 
     62                            <div class="details"> {{ histo.details|linebreaksbr }} </div> 
    7463                            </dd> 
    7564                        {% endfor %} 
  • branches/2.0/openPLM/templates/search/indexes_rendered.txt

    r1893 r2588  
    33    <span class="user_bullet">&nbsp;</span> 
    44    <span class="full_name"> {{ object.get_full_name}} </span> // 
    5     <a href="/user/{{object.username}}"/><span>{{ object.username}}</span></a> 
     5    <a href="/user/{{object.username}}"><span>{{ object.username}}</span></a> 
    66    <span class="email"> {{ object.email }} </span> 
    77 
     
    1111        <span class="{{object|main_type}}_bullet">&nbsp;</span> 
    1212        <span class="type"> {{object.type}} </span> // 
    13         <a href="{{object.plmobject_url}}"/><span class="reference">{{object.reference}}</span></a> // 
     13        <a href="{{object.plmobject_url}}"><span class="reference">{{object.reference}}</span></a> // 
    1414        <span class="revision">{{object.revision}}</span> 
    1515        <span class="name">{{object.name}} </span> 
     
    1717    {% else %} 
    1818        <span class="group_bullet">&nbsp;</span> 
    19         <a href="{{object.plmobject_url}}"/><span class="groupname">{{object.name}}</span></a> 
     19        <a href="{{object.plmobject_url}}"><span class="groupname">{{object.name}}</span></a> 
    2020    {% endif %} 
    2121{% endif %} 
  • branches/2.0/openPLM/templates/search/result.html

    r2520 r2588  
    2929        {% endif %} 
    3030        {% with is_readable|yesno:",a" as removed_tag %} 
    31             {{result.rendered|hide_emails|safe|removetags:removed_tag}} 
     31            {{result.rendered|fix_rendered_result|hide_emails|safe|removetags:removed_tag}} 
    3232        {% endwith %} 
    3333    </div> 
Note: See TracChangeset for help on using the changeset viewer.