2010-03-29 13:45:25 -05:00
|
|
|
<tal:comment replace="nothing">
|
|
|
|
This macro displays the content of the application portlet.
|
|
|
|
</tal:comment>
|
2011-09-18 08:00:05 -05:00
|
|
|
<metal:portlet define-macro="portlet"
|
2011-11-25 11:01:20 -06:00
|
|
|
tal:define="queryUrl python: '%s/ui/query' % tool.absolute_url();
|
2011-09-18 08:00:05 -05:00
|
|
|
toolUrl tool/absolute_url;
|
|
|
|
currentSearch req/search|nothing;
|
2011-11-25 11:01:20 -06:00
|
|
|
currentClass req/className|nothing;
|
2011-09-18 08:00:05 -05:00
|
|
|
contextObj tool/getPublishedObject;
|
|
|
|
rootClasses tool/getRootClasses">
|
2010-03-29 13:45:25 -05:00
|
|
|
|
2012-02-23 08:58:06 -06:00
|
|
|
<div class="portletContent" tal:condition="python: contextObj and contextObj.mayNavigate()">
|
|
|
|
<div class="portletTitle" tal:define="parent contextObj/getParent">
|
|
|
|
<span tal:replace="contextObj/Title"></span>
|
2012-05-05 10:04:19 -05:00
|
|
|
<a tal:condition="python: parent" tal:attributes="href parent/absolute_url">
|
2012-02-23 08:58:06 -06:00
|
|
|
<img tal:attributes="src string: $appUrl/ui/gotoSource.png"/>
|
|
|
|
</a>
|
|
|
|
</div>
|
2012-03-27 03:37:41 -05:00
|
|
|
<metal:phases use-macro="here/ui/portlet/macros/phases"/>
|
2012-02-23 08:58:06 -06:00
|
|
|
</div>
|
2011-09-18 08:00:05 -05:00
|
|
|
|
2012-02-23 08:58:06 -06:00
|
|
|
<tal:comment replace="nothing">One section for every searchable root class.</tal:comment>
|
|
|
|
<tal:section repeat="rootClass python: [rc for rc in rootClasses if tool.userMaySearch(rc)]">
|
|
|
|
|
|
|
|
<tal:comment replace="nothing">A separator if required</tal:comment>
|
|
|
|
<div class="portletSep" tal:define="nb repeat/rootClass/number"
|
|
|
|
tal:condition="python: (nb == 1 and contextObj) or (nb != 1)"></div>
|
|
|
|
|
[gen] Added param Search.default allowing to define a default Search. The default search, if present, will be triggered when clicking on the main link for a class, instead of the query that collects all instances of this class; appy.gen.Type: removed 3 obsolete params: 'index', 'editDefault' and 'optional'. For achieving the same result than using 'editDefault', one may define 'by hand' an attribute on the Tool for storing the editable default value, and define, on the appropriate field in param 'default', a method that returns the value of the tool attribute; Added Type.defaultForSearch, allowing, for some sub-types, to define a default value when displaying the corresponding widget on the search screen; added a default 'state' field allowing to include workflow state among search criteria in the search screens; removed obsolete test applications.
2012-10-31 07:20:25 -05:00
|
|
|
<div class="portletContent" tal:define="searchInfo python: tool.getSearches(rootClass)">
|
|
|
|
<tal:comment replace="nothing">Section title (link triggers the default search), with action icons</tal:comment>
|
|
|
|
<a tal:define="queryParam python: searchInfo['default'] and ('&search=%s' % searchInfo['default']['name']) or ''"
|
|
|
|
tal:attributes="href python: '%s?className=%s%s' % (queryUrl, rootClass, queryParam);
|
2012-02-23 08:58:06 -06:00
|
|
|
class python:test(not currentSearch and (currentClass==rootClass), 'portletCurrent', '')"
|
|
|
|
tal:content="structure python: _(rootClass + '_plural')">
|
|
|
|
</a>
|
2012-05-05 10:04:19 -05:00
|
|
|
<span tal:define="addPermission python: '%s: Add %s' % (appName, rootClass);
|
|
|
|
userMayAdd python: user.has_permission(addPermission, appFolder);
|
|
|
|
createMeans python: tool.getCreateMeans(rootClass)">
|
2012-02-23 08:58:06 -06:00
|
|
|
<tal:comment replace="nothing">Create a new object from a web form</tal:comment>
|
|
|
|
<a tal:condition="python: ('form' in createMeans) and userMayAdd"
|
|
|
|
tal:attributes="href python: '%s/do?action=Create&className=%s' % (toolUrl, rootClass);
|
|
|
|
title python: _('query_create')">
|
|
|
|
<img tal:attributes="src string: $appUrl/ui/plus.png"/>
|
|
|
|
</a>
|
|
|
|
<tal:comment replace="nothing">Create (a) new object(s) by importing data</tal:comment>
|
|
|
|
<a tal:condition="python: ('import' in createMeans) and userMayAdd"
|
|
|
|
tal:attributes="href python: '%s/ui/import?className=%s' % (toolUrl, rootClass);
|
|
|
|
title python: _('query_import')">
|
|
|
|
<img tal:attributes="src string: $appUrl/ui/import.png"/>
|
|
|
|
</a>
|
|
|
|
<tal:comment replace="nothing">Search objects of this type</tal:comment>
|
|
|
|
<a tal:define="showSearch python: tool.getAttr('enableAdvancedSearchFor%s' % rootClass)"
|
|
|
|
tal:condition="showSearch"
|
|
|
|
tal:attributes="href python: '%s/ui/search?className=%s' % (toolUrl, rootClass);
|
|
|
|
title python: _('search_objects')">
|
|
|
|
<img tal:attributes="src string: $appUrl/ui/search.gif"/>
|
|
|
|
</a>
|
2012-05-05 10:04:19 -05:00
|
|
|
</span>
|
2012-02-23 08:58:06 -06:00
|
|
|
<tal:comment replace="nothing">Searches for this content type.</tal:comment>
|
[gen] Added param Search.default allowing to define a default Search. The default search, if present, will be triggered when clicking on the main link for a class, instead of the query that collects all instances of this class; appy.gen.Type: removed 3 obsolete params: 'index', 'editDefault' and 'optional'. For achieving the same result than using 'editDefault', one may define 'by hand' an attribute on the Tool for storing the editable default value, and define, on the appropriate field in param 'default', a method that returns the value of the tool attribute; Added Type.defaultForSearch, allowing, for some sub-types, to define a default value when displaying the corresponding widget on the search screen; added a default 'state' field allowing to include workflow state among search criteria in the search screens; removed obsolete test applications.
2012-10-31 07:20:25 -05:00
|
|
|
<tal:searchOrGroup repeat="searchOrGroup searchInfo/searches">
|
|
|
|
<tal:group condition="searchOrGroup/isGroup">
|
|
|
|
<tal:expanded define="group searchOrGroup;
|
|
|
|
expanded python: request.get(group['labelId'], 'collapsed') == 'expanded'">
|
|
|
|
<tal:comment replace="nothing">Group name</tal:comment>
|
|
|
|
<div class="portletGroup">
|
|
|
|
<img style="cursor:pointer; margin-right: 3px"
|
|
|
|
tal:attributes="id python: '%s_img' % group['labelId'];
|
|
|
|
src python:test(expanded, 'ui/collapse.gif', 'ui/expand.gif');
|
|
|
|
onClick python:'toggleCookie(\'%s\')' % group['labelId'];
|
|
|
|
align dleft"/>
|
|
|
|
<span tal:replace="group/label"/>
|
|
|
|
</div>
|
|
|
|
<tal:comment replace="nothing">Group searches</tal:comment>
|
|
|
|
<div tal:attributes="id group/labelId;
|
|
|
|
style python:test(expanded, 'display:block', 'display:none')">
|
|
|
|
<div class="portletSearch" tal:repeat="search group/searches">
|
|
|
|
<a tal:attributes="href python: '%s?className=%s&search=%s' % (queryUrl, rootClass, search['name']);
|
|
|
|
title search/descr;
|
|
|
|
class python: test(search['name'] == currentSearch, 'portletCurrent', '');"
|
|
|
|
tal:content="structure search/label"></a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</tal:expanded>
|
|
|
|
</tal:group>
|
|
|
|
<dt tal:define="search searchOrGroup" tal:condition="not: searchOrGroup/isGroup"
|
|
|
|
class="portletAppyItem portletSearch">
|
|
|
|
<a tal:attributes="href python: '%s?className=%s&search=%s' % (queryUrl, rootClass, search['name']);
|
|
|
|
title search/descr;
|
|
|
|
class python: test(search['name'] == currentSearch, 'portletCurrent', '');"
|
|
|
|
tal:content="structure search/label"></a>
|
|
|
|
</dt>
|
2012-02-23 08:58:06 -06:00
|
|
|
</tal:searchOrGroup>
|
[gen] Added param Search.default allowing to define a default Search. The default search, if present, will be triggered when clicking on the main link for a class, instead of the query that collects all instances of this class; appy.gen.Type: removed 3 obsolete params: 'index', 'editDefault' and 'optional'. For achieving the same result than using 'editDefault', one may define 'by hand' an attribute on the Tool for storing the editable default value, and define, on the appropriate field in param 'default', a method that returns the value of the tool attribute; Added Type.defaultForSearch, allowing, for some sub-types, to define a default value when displaying the corresponding widget on the search screen; added a default 'state' field allowing to include workflow state among search criteria in the search screens; removed obsolete test applications.
2012-10-31 07:20:25 -05:00
|
|
|
</div>
|
|
|
|
</tal:section>
|
2011-09-18 08:00:05 -05:00
|
|
|
</metal:portlet>
|
2010-08-05 11:23:17 -05:00
|
|
|
|
|
|
|
<tal:comment replace="nothing">
|
|
|
|
This macro displays, within the portlet, the navigation tree for the
|
|
|
|
currently shown object, made of phases and contained pages.
|
|
|
|
</tal:comment>
|
2012-03-27 03:37:41 -05:00
|
|
|
<table metal:define-macro="phases"
|
2012-05-05 10:04:19 -05:00
|
|
|
tal:define="phases contextObj/getAppyPhases;
|
2011-10-06 09:27:58 -05:00
|
|
|
singlePhase python: len(phases) == 1;
|
2012-05-05 10:04:19 -05:00
|
|
|
page python: req.get('page', 'main')">
|
2010-08-05 11:23:17 -05:00
|
|
|
<tal:phase repeat="phase phases">
|
|
|
|
<tal:comment replace="nothing">The box containing phase-related information</tal:comment>
|
2012-03-27 08:49:41 -05:00
|
|
|
<tr tal:define="singlePage python: len(phase['pages']) == 1">
|
2010-08-05 11:23:17 -05:00
|
|
|
<td tal:define="label python:'%s_phase_%s' % (contextObj.meta_type, phase['name']);
|
2011-10-06 09:27:58 -05:00
|
|
|
status phase/phaseStatus;
|
2012-03-27 03:37:41 -05:00
|
|
|
phaseCss python: (status == 'Current') and ' phaseSelected' or '';"
|
2011-10-06 09:27:58 -05:00
|
|
|
tal:attributes="class python: not singlePhase and 'phase%s' % phaseCss or ''">
|
2012-03-27 03:37:41 -05:00
|
|
|
<tal:comment replace="nothing">The title of the phase</tal:comment>
|
2012-03-27 08:49:41 -05:00
|
|
|
<div class="portletGroup" tal:condition="python: not singlePhase and not singlePage"
|
2012-03-27 03:37:41 -05:00
|
|
|
tal:content="structure python: _(label)">
|
|
|
|
</div>
|
|
|
|
<tal:comment replace="nothing">The page(s) within the phase</tal:comment>
|
2012-05-05 10:04:19 -05:00
|
|
|
<tal:page repeat="aPage phase/pages">
|
|
|
|
<tal:comment replace="nothing">First line: page name and icons</tal:comment>
|
|
|
|
<div tal:condition="python: not (singlePhase and singlePage)"
|
|
|
|
tal:attributes="class python: test(aPage == page, 'portletCurrent portletPage', 'portletPage')">
|
|
|
|
<a tal:attributes="href python: contextObj.getUrl(page=aPage)"
|
2012-03-27 03:37:41 -05:00
|
|
|
tal:content="structure python: _('%s_page_%s' % (contextObj.meta_type, aPage))">
|
2012-05-05 10:04:19 -05:00
|
|
|
</a>
|
|
|
|
<a tal:condition="python: contextObj.allows('Modify portal content') and phase['pagesInfo'][aPage]['showOnEdit']"
|
|
|
|
tal:attributes="href python: contextObj.getUrl(mode='edit', page=aPage)">
|
|
|
|
<img title="Edit" tal:attributes="src string: $appUrl/ui/edit.gif"/>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<tal:comment replace="nothing">Next lines: links</tal:comment>
|
|
|
|
<tal:links define="links python: phase['pagesInfo'][aPage].get('links')" tal:condition="links">
|
|
|
|
<div tal:repeat="link links">
|
|
|
|
<a tal:content="link/title" tal:attributes="href link/url"></a>
|
|
|
|
</div>
|
|
|
|
</tal:links>
|
|
|
|
</tal:page>
|
2010-08-05 11:23:17 -05:00
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tal:comment replace="nothing">The down arrow pointing to the next phase (if any)</tal:comment>
|
|
|
|
<tr tal:condition="python: phase['name'] != phases[-1]['name']">
|
2011-11-25 11:01:20 -06:00
|
|
|
<td> <img tal:attributes="src string: $appUrl/ui/nextPhase.png"/></td>
|
2010-08-05 11:23:17 -05:00
|
|
|
</tr>
|
|
|
|
</tal:phase>
|
|
|
|
</table>
|