[CMF-checkins] CVS: CMF/CMFDefault/skins/zpt_generic - actions_box.pt:1.2 breadcrumbs.py:1.2 content_byline.pt:1.2 discussion_reply_form.pt:1.2 discussion_reply_preview.pt:1.2 expanded_title.py:1.2 folder_add.pt:1.2 folder_contents.pt:1.2 folder_factories.pt:1.2 folder_filter_form.pt:1.2 folder_localrole_form.pt:1.2 folder_rename_form.pt:1.2 index_html.pt:1.2 join_form.pt:1.2 logged_in.pt:1.2 logged_out.pt:1.2 login_form.pt:1.2 mail_password_form.pt:1.2 mail_password_response.pt:1.2 main_template.pt:1.2 metadata_help.pt:1.2 news_box.pt:1.2 password_form.pt:1.2 personalize_form.pt:1.2 recent_news.pt:1.2 reconfig_form.pt:1.2 registered.pt:1.2 review.pt:1.2 roster.pt:1.2 rssDisabled.pt:1.2 search.pt:1.2 search_form.pt:1.2 setup_talkback_tree.py:1.2 standard_error_message.pt:1.2 stxmethod_view.pt:1.2 talkback_tree.pt:1.2 unauthRedirect.py:1.2 undo_form.pt:1.2 viewThreadsAtBottom.pt:1.2 zpt_stylesheet.css:1.2
Tres Seaver
tseaver@zope.com
Thu, 6 Dec 2001 17:43:44 -0500
Update of /cvs-repository/CMF/CMFDefault/skins/zpt_generic
In directory cvs.zope.org:/tmp/cvs-serv13447/CMFDefault/skins/zpt_generic
Added Files:
actions_box.pt breadcrumbs.py content_byline.pt
discussion_reply_form.pt discussion_reply_preview.pt
expanded_title.py folder_add.pt folder_contents.pt
folder_factories.pt folder_filter_form.pt
folder_localrole_form.pt folder_rename_form.pt index_html.pt
join_form.pt logged_in.pt logged_out.pt login_form.pt
mail_password_form.pt mail_password_response.pt
main_template.pt metadata_help.pt news_box.pt password_form.pt
personalize_form.pt recent_news.pt reconfig_form.pt
registered.pt review.pt roster.pt rssDisabled.pt search.pt
search_form.pt setup_talkback_tree.py
standard_error_message.pt stxmethod_view.pt talkback_tree.pt
unauthRedirect.py undo_form.pt viewThreadsAtBottom.pt
zpt_stylesheet.css
Log Message:
- Recover from CVS weirdness in moving ZPT skins to CMFDefault.
=== CMF/CMFDefault/skins/zpt_generic/actions_box.pt 1.1 => 1.2 ===
+<div tal:define="isAnon python:here.portal_membership.isAnonymousUser();
+ AuthClass python:isAnon and 'GuestActions' or 'MemberActions';
+ uname python: isAnon and 'Guest' or here.portal_membership.getAuthenticatedMember().getUserName();
+ actions python:here.portal_actions.listFilteredActionsFor(here);
+ user_actions python:actions['user'];
+ folder_actions python:actions['folder'];
+ object_actions python:(actions['object'] + actions['workflow']);
+ global_actions python:actions['global']">
+<table class="ActionBox" width="100%">
+ <tbody tal:condition="object_actions">
+ <tr class=""
+ tal:attributes="class AuthClass">
+ <td class="ActionTitle"
+ tal:define="getIcon python:hasattr(here, 'getIcon') and here.getIcon();
+ icon python:getIcon or getattr(here, 'icon', '');
+ typ python:getattr(here, 'Type', '');
+ objID python:here.getId()">
+ <img src=""
+ tal:condition="icon" align="left" alt="Type"
+ tal:attributes="src python:'%s/%s' % (here.portal_url(), icon); alt typ" />
+ <span tal:replace="structure python: here.truncID(objID, size=15)">ObjectID</span>
+ </td>
+ </tr>
+ <tr class=""
+ tal:attributes="class AuthClass">
+ <td tal:define="review_state python:here.portal_workflow.getInfoFor(here, 'review_state', '')">
+ <span tal:condition="review_state">Status: <span tal:replace="review_state">Private</span><br></span>
+ <span tal:repeat="action object_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span>
+ </td>
+ </tr>
+</tbody>
+<tr class=""
+ tal:attributes="class AuthClass"
+ tal:condition="folder_actions">
+ <td>
+ <span tal:repeat="action folder_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span>
+ </td>
+ </tr>
+ <tr class=""
+ tal:attributes="class AuthClass"
+ tal:condition="global_actions">
+ <td>
+ <span tal:repeat="action global_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span>
+
+ </td>
+ </tr>
+</table>
+</div>
+</div>
+
=== CMF/CMFDefault/skins/zpt_generic/breadcrumbs.py 1.1 => 1.2 ===
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=include_root=1
+##title=Return breadcrumbs
+##
+from string import join
+
+result = []
+portal_url = context.portal_url()
+
+if include_root:
+ result.append( { 'id' : 'root'
+ , 'title' : context.portal_properties.title()
+ , 'url' : portal_url
+ }
+ )
+
+relative = context.portal_url.getRelativeContentPath( context )
+portal = context.portal_url.getPortalObject()
+
+for i in range( len( relative ) ):
+ now = relative[ :i+1 ]
+ obj = portal.restrictedTraverse( now )
+ if not now[ -1 ] == 'talkback':
+ result.append( { 'id' : now[ -1 ]
+ , 'title' : obj.Title()
+ , 'url' : portal_url + '/' + join( now, '/' )
+ }
+ )
+
+return result
=== CMF/CMFDefault/skins/zpt_generic/content_byline.pt 1.1 => 1.2 ===
+ metal:define-macro="byline"
+ tal:define="creator here/Creator;
+ home_url python: here.portal_membership.getHomeUrl(creator);
+ "
+>
+
+<p>
+ Created by <span tal:condition="home_url"
+ ><a href="." title="Here"
+ tal:attributes="href home_url;
+ title creator;
+ "
+ tal:content="creator">Creator</a>
+ </span><span tal:condition="not: home_url"
+ tal:content="creator">Creator</span
+ >. Last modified <span tal:content="here/ModificationDate"
+ >Today</span>.
+</p>
+
+</div>
=== CMF/CMFDefault/skins/zpt_generic/discussion_reply_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div tal:define="dummy python:here.portal_discussion.getDiscussionFor(here)">This is evaluated.</div>
+
+<form method="POST" action=""
+ tal:attributes="action python: here.absolute_url() + '/talkback'">
+<input type="hidden" name="Creator" value=""
+ tal:attributes="value python: here.portal_membership.getAuthenticatedMember()">
+
+<table class="FormLayout">
+ <tr>
+ <th align="left">Subject (Title)</th>
+ <td><input name="title" value=""
+ tal:attributes="value here/title_override|here/title">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <b>Reply body</b><br>
+ <textarea name="text" cols="70" rows="10" wrap="soft" style="width: 100%"
+ tal:content="here/text_override | nothing"></textarea>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>
+ <input type="submit" value="Preview" name=""
+ tal:define="hId here/getId"
+ tal:attributes="name python: hId + '/discussion_reply_preview:method'">
+ <input type="submit" value="Reply" name=""
+ tal:attributes="name string:discussion_reply:method">
+ </td>
+ </tr>
+</table>
+</form>
+</div>
+</body>
+</html>
+
+
=== CMF/CMFDefault/skins/zpt_generic/discussion_reply_preview.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+
+<h3 tal:content="python: request.form['title']"></h3>
+
+<div tal:define="pss modules/Products.PythonScripts.standard"
+ tal:replace="structure python: pss.structured_text(request.form['text'])">Text Body</div>
+
+<form method="POST" action=""
+ tal:attributes="action python: here.absolute_url() + '/talkback'">
+ <input type="hidden" name="title" value=""
+ tal:attributes="value python: request.form['title']">
+ <input type="hidden" name="text" value=""
+ tal:attributes="value python: request.form['text']">
+ <input type="hidden" name="title_override" value=""
+ tal:attributes="value python: request.form['title']">
+ <input type="hidden" name="text_override" value=""
+ tal:attributes="value python: request.form['text']">
+ <input type="hidden" name="Creator" value=""
+ tal:attributes="value python: here.portal_membership.getAuthenticatedMember()">
+ <table><tr>
+ <td width="15%"></td>
+ <td>
+ <input type="submit" value="Edit" name=""
+ tal:define="hId here/getId"
+ tal:attributes="name python: hId + '/discussion_reply_form:method'">
+ <input type="submit" value="Reply" name="discussion_reply:method">
+ </td>
+ </tr></table>
+</form>
+</div>
+</body>
+</html>
+
+
=== CMF/CMFDefault/skins/zpt_generic/expanded_title.py 1.1 => 1.2 ===
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=Build title which includes site title
+##
+site_title = context.portal_url.getPortalObject().Title()
+page_title = context.Title()
+
+if page_title != site_title:
+ page_title = site_title + ": " + page_title
+
+return page_title
=== CMF/CMFDefault/skins/zpt_generic/folder_add.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+<H1>Add Folder</H1>
+
+<P> A Folder contains other objects. Use Folders to organize your
+ web objects in to logical groups.</P>
+
+<FORM ACTION="manage_addPortalFolder" METHOD="POST">
+<TABLE class="FormLayout">
+ <TR>
+ <TD>
+ <STRONG>Id</STRONG>
+ </TD>
+ <TD ALIGN="LEFT" VALIGN="TOP">
+ <INPUT TYPE="TEXT" NAME="id" SIZE="40">
+ </TD>
+ </TR>
+ <TR>
+ <TD>
+ <EM><STRONG>Title</STRONG></EM>
+ </TD>
+ <TD ALIGN="LEFT" VALIGN="TOP">
+ <INPUT TYPE="TEXT" NAME="title" SIZE="40">
+ </TD>
+ </TR>
+ <TR><TD COLSPAN="2"><BR></TD></TR>
+ <TR>
+ <TD><br></TD>
+ <TD>
+ <BR><INPUT TYPE="SUBMIT" VALUE=" Add ">
+ </TD>
+ </TR>
+</TABLE>
+</form>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/folder_contents.pt 1.1 => 1.2 ===
+
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+ <div tal:condition="python: not(here.portal_membership.checkPermission('List folder contents', here))">
+ <span tal:define="redirect python: request.RESPONSE.redirect(here.absolute_url())"></span>
+ </div>
+
+<!-- This is the desktop area -->
+<div class="Desktop">
+
+<h1> Desktop </h1>
+
+<form action="" METHOD="POST"
+ tal:attributes="action here/absolute_url">
+ <table class="FormLayout">
+ <tr>
+ <td valign="top">
+ <table class="ContentsList">
+ <tbody tal:condition="python: here.portal_membership.checkPermission('List folder contents', here, 'aq_parent')">
+ <tr valign="top"
+ tal:define="upNav python: hasattr(here.aq_parent, 'portal_url');
+ upID python: here.aq_parent.getId()">
+ <td colspan="3" align="left">
+ <span tal:condition="upNav|nothing"><a href="../folder_contents"><img src="" alt="[Link]" border="0"
+ tal:attributes="src python: here.portal_url() + '/UpFolder_icon.gif'"></a>
+ </span>
+ <span tal:condition="upNav">Up to <a href="../folder_contents" tal:content="upID">Up ID</a></span>
+ <span tal:condition="python: not(upNav)"><span class="mild">Root</span></span>
+ </td>
+ </tr>
+ </tbody>
+ <tr><td colspan="1" align="left" width="49%">
+ <table>
+ <tbody tal:define="global b_start string:0;b_start request/b_start | b_start;
+ filterString python: request.get('folderfilter', '');
+ filter python: here.decodeFolderFilter(filterString);
+ items python: here.listFolderContents(contentFilter=filter);
+ Batch python:modules['ZTUtils'].Batch;
+ global batch python:Batch(items, 8, int(b_start), orphan=0);
+ global batch1 batch/next">
+ <tr align="top"
+ tal:repeat="items batch">
+ <td align="left" width="5" NOWRAP
+ tal:define="folderish items/isPrincipiaFolderish;
+ portalish items/isPortalContent|nothing;
+ global methodID python: folderish and 'folder_contents' or (portalish and 'view' or '');
+ global icon items/getIcon|items/icon|nothing">
+ <input type="checkbox" name="ids:list" value="" id=""
+ tal:attributes="value items/getId; id python: 'cb_' + items.getId()" />
+ </td>
+ <td>
+ <span tal:condition="icon">
+ <a href=""
+ tal:attributes="href python: items.getId() + '/' + methodID">
+ <img src="" alt="" border="0"
+ tal:attributes="src python: here.portal_url() + '/' + icon;
+ alt items/Type|nothing"></a>
+ </span>
+ </td>
+ <td>
+ <a href=""
+ tal:attributes="href python: items.getId() + '/' + methodID"><span tal:replace="items/getId">ID</span>
+ <span tal:condition="items/Title"
+ tal:replace="python: '(' + items.Title() + ')'">(Title)</span></a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td width="2%"> </td>
+ <td colspan="1" width="49%">
+ <table>
+ <tr align="top"
+ tal:repeat="items batch1">
+ <td align="left" width="5" NOWRAP
+ tal:define="folderish items/isPrincipiaFolderish;
+ portalish items/isPortalContent|nothing;
+ global methodID python: folderish and 'folder_contents' or (portalish and 'view' or '');
+ global icon items/getIcon|items/icon|nothing">
+ <input type="checkbox" name="ids:list" value="" id=""
+ tal:attributes="value items/getId; id python: 'cb_' + items.getId()" />
+ </td>
+ <td>
+ <span tal:condition="icon">
+ <a href=""
+ tal:attributes="href python: items.getId() + '/' + methodID">
+ <img src="" alt="" border="0"
+ tal:attributes="src python: here.portal_url() + '/' + icon;
+ alt items/Type|nothing"></a>
+ </span>
+ </td>
+ <td>
+ <a href=""
+ tal:attributes="href python: items.getId() + '/' + methodID"><span tal:replace="items/getId">ID</span>
+ <span tal:condition="items/Title"
+ tal:replace="python: '(' + items.Title() + ')'">(Title)</span></a>
+ </td>
+ </tr>
+ </table>
+
+ </tr>
+
+
+
+ <tr>
+ <td align="left">
+ <span tal:define="p batch/previous" tal:condition="p">
+ <a href=""
+ tal:attributes="href string:folder_contents?b_start=${p/previous/first}">Previous Items</a>
+ </span>
+ </td>
+<td> </td>
+ <td align="left">
+ <span tal:define="n batch1/next|nothing" tal:condition="n">
+ <a href=""
+ tal:attributes="href string:folder_contents?b_start=${batch1/end}">Next Items</a>
+ </span>
+ </td>
+ </tr>
+<!-- end cotentList -->
+</table>
+
+<TABLE BORDER="0" CELLSPACING="0" CELLPADDING=2>
+<TR>
+ <TD ALIGN="LEFT" VALIGN="TOP" WIDTH="16"></TD>
+ <TD ALIGN="LEFT" VALIGN="TOP">
+ <span tal:condition="python: here.portal_membership.checkPermission('Add portal content', here)">
+ <INPUT TYPE="SUBMIT" NAME="folder_factories:method" VALUE="New...">
+ </span>
+ <span tal:condition="python: here.portal_membership.checkPermission('View management screens', here)">
+ <INPUT TYPE="SUBMIT" NAME="folder_rename_form:method" VALUE="Rename">
+ <INPUT TYPE="SUBMIT" NAME="folder_cut:method" VALUE="Cut">
+ <INPUT TYPE="SUBMIT" NAME="folder_copy:method" VALUE="Copy">
+ <span tal:condition="here/cb_dataValid">
+ <INPUT TYPE="SUBMIT" NAME="folder_paste:method" VALUE="Paste">
+ </span>
+ </span>
+ <span tal:condition="python: here.portal_membership.checkPermission('Delete objects', here)">
+ <INPUT TYPE="SUBMIT" NAME="folder_delete:method" VALUE="Delete">
+ </span>
+ </TD>
+</TR>
+</TABLE>
+</table>
+</form>
+<span tal:replace="structure here/folder_filter_form">Filter Form Here</span>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/folder_factories.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master"
+ tal:define="dummy python: here.request.set('isDesktop', 1)">
+<body>
+<div metal:fill-slot="main">
+<div tal:condition="python: not(here.portal_membership.checkPermission('Access contents information', here))">
+ <span tal:define="dummy here/unauthRedirect"></span>
+</div>
+<div class="Desktop">
+<h1> Add Content </h1>
+<form action="invokeFactory" method="POST">
+<table class="FormLayout">
+<tr>
+<td>
+<table width="100%" class="FormLayout" tal:repeat="item here/allowedContentTypes">
+<tr valign="top">
+ <td align="left" width="2%" NOWRAP><input type="radio" name="type_name" value="" id="" tal:attributes="value item/getId; id string:cb_${repeat/item/number}"/>
+ </td>
+ <td align="left" colspan="2" class="ListName"><label for=""
+ tal:attributes="for string:cb_${repeat/item/number}"
+ tal:content="item/Type"></label>
+ </td>
+</tr>
+ <tr valign="top">
+ <td colspan="2"> <br> </td>
+ <td align="left" class="ListDefinition" tal:content="item/Description"></td>
+ </tr>
+ </table>
+ </td></tr></table>
+
+<table class="FormLayout">
+ <tr valign="top">
+ <td> <br> </td>
+ <td colspan="2" class="TextField"> <strong> ID: </strong>
+ <input type="text" name="id" size="20">
+ <input type="submit" value="Add"> </td>
+ </tr>
+</table>
+</form>
+
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/folder_filter_form.pt 1.1 => 1.2 ===
+ <span tal:define="
+ dummy1 python:request.RESPONSE.expireCookie('show_filter_form', path='/');
+ dummy2 python:request.RESPONSE.setCookie('show_filter_form', '');
+ dummy3 python:request.set('show_filter_form', '')
+ " />
+</span>
+<span tal:condition="python:request.get('open_filter_form', 0)">
+ <span tal:define="
+ dummy1 python:request.RESPONSE.setCookie('show_filter_form', path='/', expires='Wed, 19 Feb 2020 14:28:00 GMT', value='1');
+ dummy2 python:request.set('show_filter_form', '1')
+ " />
+</span>
+<form action="" method="POST"
+ tal:define="showfilter request/show_filter_form|nothing; hidefilter python:not showfilter; formaction python:here.absolute_url() + '/folder_contents'"
+ tal:attributes="action formaction"
+ >
+<table class="FormLayout"
+ tal:condition="showfilter"
+ tal:define="Type python:(); Subject python:'';filter python:here.decodeFolderFilter(request.get('folderfilter', ''))">
+<tr>
+ <td colspan="2" align="left" valign="top">
+ Contents View Filter
+ </td>
+</tr>
+<tr>
+ <td align="left" valign="top" width="*">Subject:</td>
+ <td align="left" valign="top">
+ <input type="text" name="filter_by_Subject:tokens"
+ value="" tal:attributes="value python:modules['string'].join(Subject, ' ')" />
+ </td>
+</tr>
+<tr>
+ <td align="left" valign="top" width="*">Content Type:</td>
+ <td align="left" valign="top">
+ <select name="filter_by_Type:list" multiple size="3"
+ tal:define="types python:here.portal_types.listContentTypes( container=container )">
+ <option value="&dtml-sequence-item;"
+ tal:repeat="type types"
+ tal:attributes="value type"
+ >
+ <span tal:replace="type" /></option>
+ </select>
+ </td>
+</tr>
+<tr>
+ <td colspan="1" align="left">
+ <input type="submit" name="set_view_filter" value="Set Filter">
+ </td>
+ <td colspan="1" align="left">
+ <input type="submit" name="close_filter_form" value="Close View Filter">
+ </td>
+ <td colspan="1" align="left">
+ <input type="submit" name="clear_view_filter" value="Clear View Filter">
+ </td>
+</tr>
+</table>
+<span tal:condition="hidefilter">
+ <input type="submit" name="open_filter_form" value="Set View Filter">
+</span>
+</form>
=== CMF/CMFDefault/skins/zpt_generic/folder_localrole_form.pt 1.1 => 1.2 ===
+<body>
+
+<div class="Desktop"
+ metal:fill-slot="main"
+ tal:define="searching python: request.get('role_submit', None );
+ mtool here/portal_membership;
+ "
+>
+
+<div tal:condition="python: not searching">
+<!-- Search -->
+
+<h2>Assign local roles: Search Members</h2>
+
+<form method="post" action="folder_localrole_form">
+
+<table class="FormLayout">
+ <tr>
+ <th>Search by</th>
+ <td>
+ <select name="search_param">
+ <option value="username">User Name</option>
+ <option value="email">Email Address</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <th>Search Term</th>
+ <td><input type="text" name="search_term" size="30"></td>
+ </tr>
+ <tr>
+ <td><br /></td>
+ <td><input type="submit" name="role_submit" value=" Search "></td>
+ </tr>
+</table>
+
+</form>
+
+
+<!-- End search -->
+</div>
+
+<div tal:condition="searching"
+ tal:define="search_param python: request.get( 'search_param', '' );
+ search_term python: request.get( 'search_term', '' );
+ found python:mtool.searchMembers( search_param=search_param
+ , search_term=search_term
+ );
+ "
+>
+<!-- Assignment -->
+
+<h2>Assign local roles: Search Results</h2>
+
+<div tal:condition="found">
+
+ <p>Select Member(s) and a role to assign:</p>
+
+ <form method="post" action="folder_localrole_edit">
+ <input type="hidden" name="change_type" value="add">
+
+ <table class="FormLayout">
+
+ <tr>
+ <td width="16"><br></td>
+ <th style="text-align:left;">User</th>
+ <th style="text-align:left;">Email address</th>
+ </tr>
+
+ <tr tal:repeat="member found">
+ <td width="16">
+ <input type="checkbox" name="member_ids:list"
+ value=""
+ tal:attributes="value member/username">
+ </td>
+ <td tal:content="member/username"> Username 1 </td>
+ <td tal:content="member/email"> Email 1 </td>
+ </tr>
+
+ <tr tal:condition="nothing">
+ <td width="16">
+ <input type="checkbox" name="member_ids:list" value="">
+ </td>
+ <td> Username 2 </td>
+ <td> Email 2 </td>
+ </tr>
+
+ <tr>
+ <td colspan="3"><br></td>
+ </tr>
+
+ <tr>
+ <th colspan="2">Role to assign:</th>
+ <td>
+ <select name="member_role"
+ tal:define="roles python: mtool.getCandidateLocalRoles( here )">
+ <option tal:repeat="role roles"
+ tal:content="role"> Role1 </option>
+ <option tal:condition="nothing"> Role2 </option>
+ <option tal:condition="nothing"> Role3 </option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="3"><br></td>
+ </tr>
+
+ <tr>
+ <td width="16"><br></td>
+ <td colspan="2"><input type="submit" value=" Assign Roles "></td>
+ </tr>
+
+ </table>
+ </form>
+
+</div>
+
+<div tal:condition="python: not found">
+
+ <p> Sorry, no members matched your search. </p>
+
+</div>
+
+<!-- End assignment -->
+</div>
+
+<hr>
+
+<h2>Currently assigned local roles</h2>
+
+<p>These users currently have local roles assigned in this folder:</p>
+
+<form method="post" action="folder_localrole_edit">
+<input type="hidden" name="change_type" value="delete">
+<input type="hidden" name="member_role" value="">
+
+<table class="FormLayout" tal:define="lroles here/get_local_roles">
+ <tr>
+ <td width="16"><br></td>
+ <th style="text-align:left;">User</th>
+ <th style="text-align:left;">Role(s)</th>
+ </tr>
+
+ <tbody tal:repeat="role_tuple lroles">
+ <tr tal:define="user_name python: role_tuple[0];
+ roles python: role_tuple[1];
+ auth mtool/getAuthenticatedMember;
+ auth_name auth/getUserName;
+ "
+ >
+ <td width="16">
+ <input type="checkbox" name="member_ids:list"
+ value="id"
+ tal:attributes="value user_name"
+ tal:condition="python: user_name != auth_name"
+ >
+ <br tal:condition="python: user_name == auth_name">
+ </td>
+ <td tal:content="user_name"> Username 1 </td>
+ <td tal:content="python: modules['string'].join( roles, ', ' )">
+ Role1, Role2
+ </td>
+ </tr>
+ </tbody>
+
+ <tr tal:condition="nothing">
+ <td width="16">
+ <input type="checkbox" name="member_ids:list" value="id">
+ </td>
+ <td> Username 2 </td>
+ <td> Role3 </td>
+ </tr>
+
+ <tr tal:condition="nothing">
+ <td width="16">
+ <br>
+ </td>
+ <td> Auth username </td>
+ <td> Role1, Role2, Role3 </td>
+ </tr>
+
+ <tr>
+ <td colspan="3"><br></td>
+ </tr>
+
+ <tr>
+ <td><br></td>
+ <td colspan="2"><input type="submit" value=" Delete "></td>
+ </tr>
+
+</table>
+</form>
+
+</div>
+
+</body>
+</html>
=== CMF/CMFDefault/skins/zpt_generic/folder_rename_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+<h3> Rename Items </h3>
+<TABLE class="FormLayout"
+ tal:condition="here/folder_rename_items">
+ <FORM ACTION="folder_rename" METHOD="POST">
+ <TR tal:repeat="item here/folder_rename_items">
+ <TD ALIGN="LEFT" VALIGN="TOP" width="8%">
+ <span tal:replace="structure item/iconHTML">Type Image</span>
+ </TD>
+ <TD ALIGN="LEFT" VALIGN="TOP" width="20%" NOWRAP>
+ <span tal:replace="item/getId">ID</span>
+ <INPUT TYPE="HIDDEN" NAME="ids:list" VALUE=""
+ tal:attributes="value item/getId">
+ </TD>
+ <TD ALIGN="LEFT" VALIGN="TOP" width="5%">
+ <STRONG>to</STRONG>
+ </TD>
+ <TD ALIGN="LEFT" VALIGN="TOP">
+ <INPUT TYPE="TEXT" NAME="new_ids:list" value=""
+ tal:attributes="value item/getId" SIZE="20">
+ </TD>
+ </TR>
+
+ <TR>
+ <TD COLSPAN=4>
+ <INPUT TYPE="submit" VALUE=" Ok ">
+ </TD>
+ </TR>
+ </FORM>
+</TABLE>
+
+
+
+<div tal:condition="python: not(here.folder_rename_items())">
+ <FORM ACTION="folder_contents" METHOD="GET">
+ <p>You must select one or more items to rename.</p>
+ <INPUT TYPE="submit" VALUE=" Ok ">
+ </FORM>
+</div>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/index_html.pt 1.1 => 1.2 ===
+>
+<body>
+
+ <div metal:fill-slot="header"
+ tal:define="global has_local python: 'local_html' in here.objectIds()"
+ >
+
+ <div tal:condition="not: has_local">
+
+ <h1 id="DesktopTitle"
+ tal:content="here/Title">Document Title</h1>
+
+ <div id="DesktopDescription" tal:content="here/Description">
+ Document Description goes here.
+ </div>
+
+ </div>
+
+ <div tal:condition="has_local">
+
+ <div metal:use-macro="here/local_html/macros/header|default">
+ 'local_html' body goes here.
+ </div>
+
+ </div>
+
+ </div><!-- header slot -->
+
+ <div metal:fill-slot="main"
+ >
+
+ <div tal:condition="not: has_local"
+ tal:define="auth_filter nocall: modules/ZTUtils/LazyFilter"
+ >
+
+ <div tal:define="raw_items python: here.contentValues(
+ filter={'Type':( 'Document'
+ , 'Image'
+ , 'File'
+ , 'News Item'
+ ) } );
+ items python: auth_filter( raw_items, skip='' );
+ ">
+ <div tal:condition="items">
+
+ <h4> Documents, Images, Files, and News Items </h4>
+
+ <ul>
+ <li tal:repeat="item items">
+ <a href="item_url" tal:attributes="href item/absolute_url"><img
+ align="middle" border="0"
+ tal:attributes="src string:${item/portal_url}/${item/getIcon};
+ alt string:${item/Type};
+ title string:${item/Type}"></a>
+ <a href="item_url" tal:attributes="href item/absolute_url"
+ tal:content="item/Title"> Title </a>
+ <blockquote tal:condition="exists: item/Description"
+ tal:content="item/Description">
+ Description <!--fmt="structured-text'-->
+ </blockquote>
+ </li>
+ </ul>
+
+ </div>
+ </div>
+
+
+ <div tal:define="raw_items python: here.contentValues(
+ filter={'Type':( 'Link'
+ , 'Favorite'
+ , 'Topic'
+ ) } );
+ items python: auth_filter( raw_items, skip='' );
+ ">
+ <div tal:condition="items">
+ <h4> Related Resources </h4>
+
+ <ul>
+ <li tal:repeat="item items">
+ <a href="item_url" tal:attributes="href item/absolute_url"><img
+ align="middle" border="0"
+ tal:attributes="src string:${item/portal_url}/${item/getIcon};
+ alt string:${item/Type};
+ title string:${item/Type}"></a>
+ <a href="item_url" tal:attributes="href item/absolute_url"
+ tal:content="item/Title"> Title </a>
+ <blockquote tal:condition="exists: item/Description"
+ tal:content="item/Description">
+ Description <!--fmt="structured-text'-->
+ </blockquote>
+ </li>
+ </ul>
+
+ </div>
+ </div>
+
+
+ <div tal:define="items python: here.contentValues(
+ filter={'Type':( 'Folder', 'CMF Collector') } );
+ ">
+ <div tal:condition="items">
+ <h4> Collectors and Folders </h4>
+
+ <ul>
+ <li tal:repeat="item items">
+ <a href="item_url" tal:attributes="href item/absolute_url"><img
+ align="middle" border="0"
+ tal:attributes="src string:${item/portal_url}/${item/getIcon};
+ alt string:${item/Type};
+ title string:${item/Type}"></a>
+ <a href="item_url" tal:attributes="href item/absolute_url"
+ tal:content="item/TitleOrId"> Title </a>
+ <blockquote tal:condition="exists: item/Description"
+ tal:content="item/Description">
+ Description <!--fmt="structured-text'-->
+ </blockquote>
+ </li>
+ </ul>
+
+ </div>
+ </div>
+
+ </div><!-- not: has_local -->
+
+
+ <div tal:condition="has_local">
+
+ <div metal:use-macro="here/local_html/macros/body|default">
+ 'local_html' body goes here.
+ </div>
+
+ </div>
+ </div><!-- main slot -->
+
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/join_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+
+<h1>Become a member</h1>
+
+<div tal:define="registered python: here.portal_membership.getAuthenticatedMember().has_role('Member')">
+ <div tal:condition="python: here.portal_membership.getAuthenticatedMember().has_role('Member')">
+ <p>You are already a member. You may use the <a href="personalize_form">personalization form</a>
+ to change your membership information. </p>
+ </div>
+ <div tal:condition="python: not(registered)">
+ <p> Becoming a member gives you the ability to personalize the site and participate in the community.</p>
+ <p> It does not cost any money to become a member and your email and other personal information will remain private.</p>
+ <span tal:condition="python: here.portal_properties.validate_email">
+ <p> You must submit a valid email address. This address will be used to send you your randomly-generated password.
+ Once you have logged in with this password, you may change it to anything you like.</p>
+ </span>
+<div class="DesktopStatusBar"
+ tal:content="request/error|nothing">
+ <hr>
+</div>
+<form action="register" method="POST">
+
+<input type="hidden" name="last_visit:date" value=""
+ tal:attributes="value here/ZopeTime">
+<input type="hidden" name="prev_visit:date" value=""
+ tal:attributes="value here/ZopeTime">
+
+<table class="FormLayout">
+ <tr>
+ <th> Login Name
+ </th>
+ <td>
+ <input type="text"
+ name="username" size="30"
+ value=""
+ tal:attributes="value request/username|nothing">
+ </td>
+ </tr>
+ <tr>
+ <th> Email Address
+ </th>
+ <td align="left" valign="top">
+ <input type="text" name="email" size="30"
+ value=""
+ tal:attributes="value request/email|nothing">
+ </td>
+ </tr>
+
+<div tal:condition="python: not(here.portal_properties.validate_email)">
+ <tr>
+ <th> Password
+ </th>
+ <td align="left" valign="top">
+ <input type="password" name="password" size="30">
+ </td>
+ </tr>
+ <tr>
+ <th> Password (confirm)
+ </th>
+ <td align="left" valign="top">
+ <input type="password" name="confirm" size="30">
+ </td>
+ </tr>
+ <tr>
+ <th> Mail Password?
+ </th>
+ <td>
+ <input type="checkbox" name="mail_me" size="30" id="cb_mailme" />
+ <em><label for="cb_mailme">Check this box to have your password
+ mailed to you.</label></em>
+ </td>
+ </tr>
+</div>
+
+ <tr>
+ <td><br></td>
+ <td>
+ <input type="submit" name="submit" value="Register">
+ </td>
+ </tr>
+</table>
+</form>
+
+</div>
+</div>
+</div>
+</div>
+
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/logged_in.pt 1.1 => 1.2 ===
+ <div tal:condition="here/portal_skins/updateSkinCookie | nothing"
+ tal:define="dummy here/setupCurrentSkin">
+ </div>
+</div>
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+ <div tal:define="p_props here/portal_properties">
+ <div tal:condition="here/portal_membership/isAnonymousUser | nothing">
+ <span tal:define="dummy python: request['RESPONSE'].expireCookie('__ac', path='/')"></span>
+ <h1 class="DesktopTitle">Login failure</h1>
+ <p class="Desktop">You are not currently logged in. Your username and or password may be incorrect.
+ Your browser may also not be configured to accept HTTP cookies. If you need help please contact
+ <a href="mailto:admin@here.com" title="Email Admin"
+ tal:attributes="href string:mailto:${p_props/email_from_address}"
+ tal:content="p_props/email_from_address">Email Admin</a>.
+ </p>
+ </div>
+ <div tal:condition="python: not(here.portal_membership.isAnonymousUser())"
+ tal:define="member python: here.portal_membership.getAuthenticatedMember()">
+ <div tal:condition="python: member.login_time == here.ZopeTime('2000/01/01') and p_props.validate_email">
+ <div tal:define="dum_reg python: here.portal_registration.setProperties(last_login_time=here.ZopeTime(),login_time=here.ZopeTime())" />
+ <h1 class="DesktopTitle">Welcome!</h1>
+ <p class="Desktop">This is the first time that you've logged in to <span replace="p_props/title">Here</span>.
+ Before you start exploring you need to change your original password.
+ This will ensure that the password we sent you via email cannot be used in a malicious manner.</p>
+ <p class="Desktop">Please use the form below to change your password.</p>
+ <form action="change_password" method="post">
+ <input type="hidden" name="user" value=""
+ tal:attributes="value member">
+ <input type="hidden" name="domains:tokens" value="">
+ <input type="hidden" name="redirect" value=""
+ tal:attributes="value p_props/portal_url">
+ <table>
+ <tr valign="top" align="left">
+ <th>Username</th>
+ <td><span tal:replace="member">You</span></td>
+ </tr>
+ <tr valign="top" align="left">
+ <th>New password</th>
+ <td><input type="password" name="password"></td>
+ </tr>
+ <tr valign="top" align="left">
+ <th>Confirm new password</th>
+ <td><input type="password" name="confirm"></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td><input type="submit" value="Change password"></td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ <div tal:condition="python: not(member.login_time == here.ZopeTime('2000/01/01') and here.validate_email)">
+ <div tal:define="d_reg python: here.portal_registration.setProperties(last_login_time=member.login_time); ereg python: here.portal_registration.setProperties(login_time=here.ZopeTime())">
+ </div>
+ <div tal:condition="request/came_from | nothing ">
+ <div tal:define="dredirect python: request.RESPONSE.redirect(request.get('came_from'))"></div>
+ </div>
+ <h1 class="DesktopTitle">Login success</h1>
+ <p class="Desktop">Welcome. You are currently logged in.
+ </p>
+ </div>
+ </div>
+</div>
+</div>
+</body>
+</html>
+
+
=== CMF/CMFDefault/skins/zpt_generic/logged_out.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<p tal:condition="python: here.portal_membership.isAnonymousUser()"
+ tal:content="string:You have been logged out."></p>
+<p tal:condition="python: not(here.portal_membership.isAnonymousUser())">
+You are logged in outside the portal. You may need to
+<a href="/manage_zmi_logout">log out of the Zope management interface</a>.
+</p>
+</div>
+</body>
+</html>
=== CMF/CMFDefault/skins/zpt_generic/login_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+<h1 class="Desktop">Log in</h1>
+
+<form action="" method="post" tal:attributes="action python: here.portal_url() + '/logged_in'">
+
+<!-- ****** Enable the automatic redirect ***** -->
+<span tal:condition="exists: request/came_from">
+ <input type="hidden" name="came_from" value="" tal:attributes="value request/came_from">
+</span>
+<!-- ****** Enable the automatic redirect ***** -->
+
+<table class="FormLayout">
+<tr>
+ <td align="left" valign="top">
+ <strong>Name</strong>
+ </td>
+ <td align="left" valign="top">
+ <input type="TEXT" name="__ac_name" size="20" value="" tal:attributes="value python: request.get('__ac_name') or ''">
+ </td>
+</tr>
+<tr>
+ <td align="left" valign="top">
+ <strong>Password</strong>
+ </td>
+ <td align="left" valign="top">
+ <input type="PASSWORD" name="__ac_password" size="20">
+ </td>
+</tr>
+
+<tr valign="top" align="left">
+<td></td>
+<td><input type="checkbox" name="__ac_persistent" value="1" checked
+ id="cb_remember" />
+<label for="cb_remember">Remember my name.</label>
+</td></tr>
+
+<tr>
+ <td align="left" valign="top">
+ </td>
+ <td align="left" valign="top">
+ <input type="submit" name="submit" value=" Login ">
+ </td>
+</tr>
+
+</table>
+</form>
+
+<p><a href="" tal:attributes="href python: here.portal_url() + '/mail_password_form'">I forgot my password!</a></p>
+
+<p>
+Having trouble logging in? Make sure to enable cookies in your web browser.
+</p>
+
+<p>Don't forget to logout or exit your browser when you're done.
+</p>
+
+<p>
+Setting the 'Remember my name' option will set a cookie with your username,
+so that when you next log in, your user name will already be filled in for you.
+</p>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/mail_password_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+
+<h1> Don't panic!</h1>
+
+<p> Just enter your username below, click <em>Send</em>, and your password
+ will be mailed to you if you gave a valid email address when you signed on.
+</p>
+
+<p> If this will not work for you (for example, if you forget your member
+ name or didn't enter your email address) send email to
+ <a tal:attributes="href string:mailto:${here/portal_properties/email_from_address}"
+ tal:content="here/portal_properties/email_from_address"
+ href="mailto:me@here.com">me@here.com</a>.
+</p>
+
+ <form action="mail_password">
+ <input name="userid">
+ <input type="submit" value=" Send ">
+ </form>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/mail_password_response.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<p class="DesktopStatusBar">Your password has been mailed.
+<br>
+It should arrive in your mailbox momentarily.</p>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/main_template.pt 1.1 => 1.2 ===
+ tal:define="utool nocall:here/portal_url;
+ mtool here/portal_membership;
+ atool here/portal_actions;
+ wtool here/portal_workflow;
+ portal_object utool/getPortalObject;
+ portal_title portal_object/Title;
+ object_title here/Title;
+ portal_url here/portal_url;
+ member mtool/getAuthenticatedMember;
+ isAnon mtool/isAnonymousUser;
+ actions python: atool.listFilteredActionsFor( here );
+ user_actions actions/user;
+ object_actions actions/object;
+ workflow_actions actions/workflow;
+ folder_actions actions/folder;
+ global_actions actions/global;
+ wf_state python:wtool.getInfoFor(here,'review_state','');
+ "
+>
+
+<head>
+ <title tal:content="here/expanded_title"> Title goes here </title>
+
+ <!-- Bug in ZPT Causes this to break-metal:block define-slot="base" / -->
+ <link rel="stylesheet" href="zpt_stylesheet.css" type="text/css"
+ tal:attributes="href here/zpt_stylesheet/absolute_url">
+
+</head>
+
+<body>
+
+<div metal:define-macro="top_bar">
+
+ <!-- hack around netscape 4.x to ensure table is solid -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+
+ <!-- Top bar -->
+ <table id="Masthead"
+ width="100%" cellpadding="0" cellspacing="0" border="0">
+
+ <tr>
+
+ <form action="search" method="GET"
+ tal:attributes="action string:${portal_url}/search">
+
+ <td id="PortalLogo">
+ <a href="." tal:attributes="href portal_url"
+ ><img src="Zope_logo.gif" alt="Zope Logo"
+ border="0" width="87" height="38"
+ tal:attributes="src string:${portal_url}/Zope_logo.gif"></a>
+ </td>
+
+ <td id="PortalTitle">
+ <span tal:content="string:${portal_title}">Site Title</span>
+ </td>
+
+ <td id="NavBar">
+ <a href="." tal:attributes="href portal_url">home</a>
+ <a href="roster"
+ tal:attributes="href string:${portal_url}/Members">members</a>
+ <a href="recent_news"
+ tal:attributes="href string:${portal_url}/recent_news">news</a>
+ <a href="search_form"
+ tal:attributes="href string:${portal_url}/search_form">search</a>
+
+ <input name="SearchableText" size="16">
+ <input border="0" type="image" name="go" value="go" src="go.gif"
+ align="middle" width="20" height="20"
+ tal:attributes="src string:go.gif">
+ </td>
+
+ </form>
+
+ </tr>
+
+ </table>
+ <!-- end topbar -->
+
+ </td>
+ </tr>
+ </table>
+ <!-- end NS4 hack -->
+
+<!-- end top_bar-->
+</div>
+
+<div metal:define-macro="user_menu_bar"
+ tal:define="uname python: isAnon and 'Guest' or member.getUserName()" >
+
+ <!-- hack around netscape 4.x to ensure table is solid -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+
+ <!-- user_menu_bar -->
+ <table id="MemberActionsBox"
+ width="100%" border="0" cellpadding="0" cellspacing="0" >
+
+ <tr>
+
+ <td class="ActionTitle" tal:content="uname"> Guest </td>
+
+ <td class="ActionLink" align="right">
+ <span tal:repeat="action user_actions">
+ <a href="" tal:attributes="href action/url"
+ tal:content="action/name">Login</a
+ ><span tal:condition="not: repeat/action/end"> | </span>
+ </span>
+ <span tal:condition="nothing"><a href="join_form">Join</a></span>
+ </td>
+
+ </tr>
+
+ </table>
+ <!-- end user_menu_bar -->
+
+ </td>
+ </tr>
+ </table>
+ <!-- end NS4 hack -->
+
+<!-- end user_menu_bar div-->
+</div>
+
+<div id="main_body">
+
+
+ <table class="Forematter"
+ width="100%" border="0" cellpadding="0" cellspacing="0" >
+ <tr>
+ <td width="20%">
+
+ <!-- actions box -->
+ <table class="ContextActionsBox"
+ width="100%"
+ style="float: left;"
+ metal:define-macro="actions_box">
+
+ <!-- object actions -->
+ <tr class="ContextActionsRow">
+
+ <td class="ActionTitle"
+ tal:define="getIcon python:hasattr(here, 'getIcon') and here.getIcon();
+ icon python:getIcon or getattr(here, 'icon', '');
+ typ python:getattr(here, 'Type', '');
+ objID python:here.truncID( here.getId(), size=15 )">
+
+ <img src="icon" align="left" title="Type" alt="[X]"
+ height="16" width="16"
+ tal:condition="icon"
+ tal:attributes="src string:${portal_url}/${icon};
+ alt typ; " />
+
+ <span tal:replace="structure objID">ID</span>
+ </td>
+ </tr>
+
+ <tr class="ContextActionsRow"
+ tal:condition="python: len( object_actions ) > 1"
+ >
+
+ <td class="ActionLink">
+
+ <span tal:repeat="action object_actions">
+ <a href=""
+ tal:attributes="href action/url"
+ tal:content="action/name">View</a><br>
+ </span>
+
+ <span tal:condition="nothing">
+ <a href="">Edit</a><br>
+ </span>
+
+ <span tal:condition="nothing">
+ <a href="">Metadata</a><br>
+ </span>
+
+ </td>
+ </tr>
+
+ <!-- workflow actions -->
+ <tr class="ContextActionsRow"
+ tal:condition="workflow_actions" >
+
+ <td class="ActionLink">
+
+ <span class="ObjectStatus">
+ Status: <span tal:replace="wf_state">Private</span><br>
+ </span>
+
+ <span tal:repeat="action workflow_actions">
+ <a href="content_submit_form"
+ tal:attributes="href action/url"
+ tal:content="action/name">Submit</a><br>
+ </span>
+ </td>
+ </tr>
+
+ <!-- folder actions -->
+ <tr class="ContextActionsRow"
+ tal:condition="folder_actions"
+ >
+ <td class="ActionLink">
+ <span tal:repeat="action folder_actions">
+ <a href="../folder_contents"
+ tal:attributes="href action/url"
+ tal:content="action/name">Folder contents</a><br>
+ </span>
+ </td>
+ </tr>
+
+ <!-- global actions -->
+ <tr class="ContextActionsRow"
+ tal:condition="global_actions"
+ >
+ <td class="ActionLink">
+ <span tal:repeat="action global_actions">
+ <a href="undo_form"
+ tal:attributes="href action/url"
+ tal:content="action/name">Undo</a><br>
+ </span>
+ </td>
+ </tr>
+
+ </table>
+ <!-- end actions_box -->
+
+ </td>
+
+ <td width="2%">
+ <br>
+ </td>
+
+ <td id="ForematterCell" width="78%">
+
+ <p id="Breadcrumbs" style="padding-top: 5px">
+ <span tal:repeat="bc here/breadcrumbs"
+ ><a href="."
+ tal:attributes="href bc/url" tal:content="bc/id"
+ >ID</a><span tal:condition="not: repeat/bc/end"> / </span>
+ </span>
+ </p>
+
+ <p id="DesktopStatusBar"
+ tal:condition="request/portal_status_message|nothing"
+ tal:content="request/portal_status_message"> Status message.</p>
+
+ <div metal:define-slot="header">
+
+ <h1 id="DesktopTitle"
+ tal:content="here/Title"> Page Title </h1>
+
+ <div id="DesktopDescription"
+ tal:content="here/Description">
+ Description of the resource goes here, perhaps even wrapping
+ lines; this is to make it long enough to test.
+ </div>
+
+ </div>
+
+ <!-- end forematter -->
+
+ </td>
+ </tr>
+ </table>
+
+ <div id="Desktop">
+
+ <div metal:define-slot="main">
+
+ <h2> Section Header </h2>
+
+ <p> The content of the object is <a href="render">rendered</a> hre.
+ Lorem ipsum dolorem. Nihil obstat imprimatur. Semper ubi sub ubi.
+ Non illegitimi carborundum. In vino veritas. E pluribus unam.
+ </p>
+
+ <!-- end main slot -->
+ </div>
+
+ <!-- end Desktop -->
+ </div>
+
+</div>
+
+</body>
+</html>
=== CMF/CMFDefault/skins/zpt_generic/metadata_help.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+
+<div class="Desktop">
+
+<h2> Dublin Core Metadata </h2>
+
+<table>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Title"> Title </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> the standard Zope 'title' attribute; we should look
+ at making it mandatory for all PortalContent derivatives.
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Creator"> Creator </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> where possible, this should be one or more full
+ names, of either persons or organizations. The current
+ implementation finds the first user in the list returned
+ by 'get_local_roles' who has the 'Owner' role; userids are
+ not considered appropriate for this field by the DCI.
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Subject"> Subject </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> this is supposed to be drawn from a controlled
+ list of keywords (e.g., selected from a multi-select list
+ used across the whole site)
+ </td>.
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Description"> Description </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> a short summary, an abstract, or a
+ table-of-contents are all considered acceptable. We might
+ look at making this required, as well, at least for some
+ kinds of content.
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Publisher"> Publisher </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> a site-wide property, should be done through
+ acquisition (do I smell a 'portal_metadata' tool about to
+ appear?) Again, this is supposed to be a formal name.
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Contributor"> Contributor </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> used to convey others besides the Creator who
+ have contributed to the document (the current implementation
+ aliases 'Creator', which is not what DCI intends)
+ </td>.
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Date"> Date </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> this one has modifiers, of which the approved set is:
+ 'Created', 'Valid', 'Available', 'Issued', and 'Modified'.
+ I propose extending the interface to include CreationDate(),
+ EffectiveDate(), ExpirationDate(), and ModificationDate().
+ The current Date() could just return the CreationDate(), while
+ the DCI 'Valid' and 'Available' would be ranges derived from
+ EffectiveDate() and ExpirationDate(
+ </td>).
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Type"> Type </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> like the Zope 'meta_type', this is the main conceptual
+ classification; 'meta_type' is often spelled identically to
+ the class, which makes it less appropriate for the DCI usage.
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Format"> Format </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> the kind of physical representation, e.g., 'text/html'
+ </td>.
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Identifier"> Identifier </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> should be the fully-qualified URL of the document
+ (the current implementation returns the object's id, which is
+ only required to be unique within its container)
+ </td>.
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Language"> Language </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> 'en-us', 'pt-br', 'de', etc. Should be set at
+ creation, with an appropriate default (and a picklist of
+ values)
+ </td>.
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Source"> Source </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> the original from which a piece of content is
+ derived. I'd like to ignore this one.
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Relation"> Relation </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> more relationships to other documents. Again,
+ I'd like to ignore it (ZopeStudio and other such tools need
+ this, however, to build site maps)
+ </td>.
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Coverage"> Coverage </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> geographic/chronological/jurisdictional scope.
+ Again, ignore.
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="ListName"> <strong> <a name="Rights"> Rights </a>
+ </strong> </td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td class="ListDefinition"> copyright and other IP information related to the
+ document. Most portals should care about this: witness
+ the brouhaha on Slashdot over the compilation of the
+ Hellmouth postings into a book.
+ </td>
+ </tr>
+
+</table>
+
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/news_box.pt 1.1 => 1.2 ===
+ <tbody tal:define="news python: here.portal_catalog(meta_type='News Item', sort_on='Date', sort_order='reverse', review_state='published');
+ Batch python:modules['ZTUtils'].Batch;
+ global batch python:Batch(news, 10, 0, orphan=1)">
+ <tr>
+ <td class="NewsBorder" width="1" rowspan="13" bgcolor="#6699CC">
+ <img src="spacer.gif" alt=" "
+ width="1" height="2" border="0">
+ </td>
+ <td valign="top" class="NewsTitle" width="100%">
+ <b>News</b>
+ </td>
+ </tr>
+ <tr class="NewsItemRow"
+ tal:condition="news"
+ tal:repeat="news batch">
+ <td valign="top" nowrap>
+ <a href=""
+ tal:attributes="href python:news.getURL()"
+ tal:content="news/Title"></a><br>
+ <span tal:replace="news/Date">Date</span>
+ </td>
+ </tr>
+ <tr class="NewsItemRow"
+ tal:condition="python:not(news)">
+ <td valign="top">
+ No news is no news.
+ </td>
+ </tr>
+ <tr class="NewsItemRow">
+ <td>
+ <a href="recent_news">More...</a>
+ </td>
+ </tr>
+</tbody>
+ </table>
+
=== CMF/CMFDefault/skins/zpt_generic/password_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+ <div tal:define="member python: here.portal_membership.getAuthenticatedMember()">
+<div class="Desktop">
+
+<h1> Change your Password </h1>
+<div class="error"
+ tal:replace="request/error"
+ tal:condition="request/error|nothing"><hr></div>
+
+<form action="change_password" method="post">
+<table class="FormLayout">
+ <tr>
+ <th>Username
+ </th>
+ <td><span tal:replace="member/getUserName">You</span>
+ </td>
+ </tr>
+ <tr>
+ <th>New password
+ </th>
+ <td><input type="password" name="password">
+ </td>
+ </tr>
+ <tr>
+ <th>Confirm new password
+ </th>
+ <td><input type="password" name="confirm">
+ </td>
+ </tr>
+ <tr>
+ <th>Domains
+ </th>
+ <td>
+ <input type="text" name="domains:tokens" value=""><br>
+ <em> If you do not know what this field is for, leave it blank. </em>
+ </td>
+ </tr>
+ <tr>
+ <td><br></td>
+ <td><input type="submit" value=" Change ">
+ </td>
+ </tr>
+</table>
+</form>
+
+</div>
+</div>
+
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/personalize_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+ <div tal:define="member python: here.portal_membership.getAuthenticatedMember()">
+
+ <div tal:condition="python: not(here.portal_membership.checkPermission( 'Set own properties'
+ , here))">
+ <span tal:define="red_str string: ${here/portal_url}/login_form?came_from=${here/absolute_url};
+ redirect python: request.RESPONSE.redirect( red_str )"></span>
+ </div>
+
+
+<div class="Desktop">
+
+<h1> Member Preferences </h1>
+<span tal:replace="request/msg"
+ tal:condition="request/msg|nothing"><hr></span>
+
+<p><a href="password_form">Click here</a> to change your password.</p>
+
+<form action="personalize" method="post">
+ <table class="FormLayout">
+ <tr>
+ <th>Email address</th>
+ <td><input type="text" name="email" value=""
+ tal:attributes="value member/email|nothing">
+ </td>
+ </tr>
+ <tr>
+ <th valign="top">Listed status</th>
+ <td>
+ <input type="radio" name="listed"
+ tal:attributes="checked member/listed|nothing"
+ value="on" id="cb_listed" />
+ <label for="cb_listed">Listed</label>
+
+ <dl class="FieldHelp">
+ <dd>You will show up on the public membership roster.</dd>
+ </dl>
+
+ <input type="radio" name="listed"
+ tal:attributes="checked python: hasattr(member,'listed') and not(member.getProperty( 'listed' ) )"
+ value="" id="cb_unlisted" />
+ <label for="cb_unlisted">Unlisted</label>
+ <dl class="FieldHelp">
+ <dd> You will <i>not</i> show up on the public membership roster.
+ Your Member folder will still be publicly accessible unless
+ you change its security settings.</dd>
+ </dl>
+ </td>
+ </tr>
+ <div tal:condition="here/portal_skins | nothing">
+ <tr>
+ <th>Skin</th>
+ <td>
+ <select name="portal_skin">
+ <option value=""
+ tal:define="skins python: here.portal_skins.getSkinSelections()"
+ tal:repeat="skin skins"
+ tal:attributes="value skin; selected python: request.get('portal_skin', '') == skin"
+ tal:content="skin">
+ </option>
+ </select>
+ </td>
+ </tr>
+ </div>
+ <tr>
+ <td></td>
+ <td><input type="submit" value=" Change "></td>
+ </tr>
+ </table>
+</form>
+
+ </div>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/recent_news.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+ <div tal:define="b_start string:0;b_start request/b_start | b_start;
+ newsitems python: here.portal_catalog.searchResults(meta_type='News Item', sort_on='Date', sort_order='reverse', review_state='published');
+ Batch python:modules['ZTUtils'].Batch;
+ global batch python:Batch(newsitems, 10, int(b_start), orphan=1)">
+
+ <p class="Desktop"
+ tal:define="p batch/previous" tal:condition="p">
+ <a href=""
+ tal:attributes="href string:?b_start=${p/first}"><span tal:replace="p/length">n</span> more recent articles</a>
+ </p>
+
+ <table cellspacing="0" border="0" width="90%"
+ tal:repeat="newsitems batch"
+ tal:condition="newsitems">
+ <tr>
+ <td class="NewsListing" align="left" valign="top">
+ <a href=""
+ tal:attributes="href newsitems/getURL"
+ tal:content="newsitems/title">Title</a>
+ </td>
+ <td class="NewsListing" align="right" valign="top"
+ tal:content="newsitems/Date">Date
+ </td>
+ </tr>
+ <tr><td class="NewsByLine" valign="top" colspan="2" align="left">
+ By <span tal:replace="newsitems/Creator">Creator</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <em> <span tal:define="pss modules/Products.PythonScripts.standard; niDescription newsitems/Description"
+ tal:replace="structure python:pss.structured_text(niDescription)">Description</span></em>
+ </td>
+ </tr>
+ </table>
+<div tal:condition="python:not(newsitems)">
+ <p class="Desktop">
+ No news is good news!
+ </p>
+</div>
+ <p class="Desktop"
+ tal:define="n batch/next" tal:condition="n">
+ <a href=""
+ tal:attributes="href string:?b_start=${batch/end}"><span tal:replace="n/length">n</span> older articles</a>
+ </p>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/reconfig_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+
+<div class="Desktop">
+
+<h3> Configure the Portal </h3>
+
+<p> This form is used to set the portal configuration options.</p>
+
+<div tal:define="pprops here/portal_properties">
+
+<form action="" method="Post"
+ tal:attributes="action python:here.portal_url() + '/reconfig'">
+ <table class="FormLayout">
+ <tr>
+ <th valign="top" align="left"> Portal 'From' name
+ </th>
+ <td>
+ <input name="email_from_name" value=""
+ tal:attributes="value pprops/email_from_name">
+ <dl class="FieldHelp">
+ <dd> When the portal generates mail, it uses this name
+ as its (apparent) sender. </dd>
+ </dl>
+ </td>
+ </tr>
+ <tr>
+ <th valign="top" align="left"> Portal 'From' address
+ </th>
+ <td><input name="email_from_address" value=""
+ tal:attributes="value pprops/email_from_address">
+ <dl class="FieldHelp">
+ <dd> When the portal generates mail, it uses this address
+ as its (apparent) return address. </dd>
+ </dl>
+ </td>
+ </tr>
+ <tr>
+ <th valign="top" align="left"> SMTP server
+ </th>
+ <td>
+ <input name="smtp_server" value=""
+ tal:attributes="value pprops/smtp_server">
+ <dl class="FieldHelp">
+ <dd> This is the address of your local SMTP (out-going
+ mail) server.</dd>
+ </dl>
+ </td>
+ </tr>
+ <tr>
+ <th valign="top" align="left"> Portal title
+ </th>
+ <td>
+ <input name="title" value=""
+ tal:attributes="value pprops/title">
+ <dl class="FieldHelp">
+ <dd> This is the title which appears at the top of every
+ portal page.</dd>
+ </dl>
+ </td>
+ </tr>
+ <tr>
+ <th valign="top" align="left"> Portal description
+ </th>
+ <td>
+ <textarea cols="40" rows="6" name="description"
+ style="width: 100%" wrap="soft"
+ tal:content="pprops/description"></textarea>
+ <dl class="FieldHelp">
+ <dd> This description is made available via syndicated
+ content and elsewhere. It should be fairly brief.</dd>
+ </dl>
+ </td>
+ </tr>
+ <tr>
+ <th valign="top" align="left"> Password policy
+ </th>
+ <td>
+ <input type=radio name="validate_email:int"
+ value="1" tal:attributes="checked pprops/validate_email">
+ Generate and email members' initial password<br>
+ <input type=radio name="validate_email:int" value="0"
+ tal:define="aec pprops/validate_email"
+ tal:attributes="checked python:not(aec)">
+ Allow members to select their initial password
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td colspan="2"><input type="Submit" value="Change"></td>
+ </tr>
+ </table>
+</form>
+</div>
+</div>
+</div>
+</body>
+</html>
=== CMF/CMFDefault/skins/zpt_generic/registered.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+
+<div class="Desktop"
+ tal:define="pprops here/portal_properties; ve pprops/validate_email">
+
+<h1> Success! </h1>
+
+<p> You have been registered as a member. </p>
+
+<p tal:condition="ve"> You will receive an email shortly containing your password
+ and instructions on how to activate your membership. </p>
+
+<p tal:condition="python:not(ve)"> You can log on immediately by clicking
+ <a href=""
+ tal:define="pss modules/Products.PythonScripts.standard; uname request/username; username python:pss.url_quote(uname); pword request/password; password python:pss.url_quote(pword)"
+ tal:attributes="href python: here.portal_url() + '/logged_in?__ac_name=' + username + '&__ac_password=' + password">here</a>.
+</p>
+
+<p>
+<a href="" tal:attributes="href python:here.portal_url() + '/index_html'">Return to homepage</a>
+</p>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/review.pt 1.1 => 1.2 ===
+
+<body>
+
+<div metal:fill-slot="main">
+
+<div class="Desktop"
+ tal:define="results python: here.portal_catalog( review_state='pending' );
+ Batch nocall: modules/ZTUtils/Batch;
+ def_start string:0;
+ bstart request/b_start | def_start;
+ batch python: Batch( results, 25, int( bstart ), orphan=0 );
+ ">
+
+<div tal:condition="results">
+
+<h1> Items pending review </h1>
+
+<form action="/" method="GET"
+ tal:attributes="action here/portal_url"
+>
+
+<table class="SearchResults">
+ <tr>
+ <td width="16"><br></td>
+ <td width="16"><br></td>
+ <th> Title
+ </th>
+ <th> Type
+ </th>
+ <th> Date
+ </th>
+ </tr>
+
+ <tbody tal:repeat="item batch">
+ <tr tal:define="objURL string:${item/getURL}/view;
+ objPath item/getPath;
+ title item/Title;
+ ">
+ <td>
+ <input type="checkbox" name="items:list"
+ tal:attributes="value objPath">
+ </td>
+ <td>
+ <span tal:condition="item/icon">
+ <a href="url"
+ tal:attributes="href objURL"
+ ><img border="0" src="icon" alt="Type" title="Type"
+ tal:attributes="src string:${here/portal_url}/${item/icon};
+ alt item/Type|nothing;
+ title item/Type|nothing;
+ "></a>
+ </span>
+ </td>
+ <td>
+ <a href="url"
+ tal:attributes="href objURL"
+ tal:content="python: title or '(No title)'">Title</a>
+ </td>
+ <td>
+ <span tal:replace="item/Type" />
+ </td>
+ <td>
+ <span tal:replace="item/Date" />
+ </td>
+ </tr>
+
+ <tr tal:define="desc item/Description">
+ <td> </td>
+ <td colspan="3"
+ tal:define="xdesc python: desc or '(No description)'"
+ >
+ <em><span tal:replace="python: xdesc[:100]">Description</span></em>
+ </td>
+ </tr>
+ </tbody>
+
+ <tr>
+ <td><br></td>
+ </tr>
+
+ <tr>
+ <td><br></td>
+ <td colspan="4">
+ <strong> Comment: </strong> <br>
+ <textarea name="comment:text" rows="3" cols="65" wrap="soft"></textarea>
+ </td>
+ </tr>
+ <tr>
+ <td><br></td>
+ <td colspan="4">
+ <input type="submit" name="publishItems:method" value="Publish">
+ <input type="submit" name="rejectItems:method" value="Reject">
+ </td>
+ </tr>
+
+</table>
+
+</form>
+
+</div>
+
+
+<div tal:condition="python: not results">
+ <p> There are no items matching your specified criteria. </p>
+</div>
+
+</div>
+
+</div>
+
+</body>
+</html>
=== CMF/CMFDefault/skins/zpt_generic/roster.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+
+<div tal:condition="python:not(request.has_key('bs'))"
+ tal:define="dummy python:request.set('bs', '25')"></div>
+
+<div class="Desktop"
+ metal:define-macro="roster"
+>
+
+<h3> Portal Members </h3>
+
+<table class="SearchResults">
+ <tr>
+ <td width="16"> <br>
+ </td>
+ <th>Member</th>
+ <th tal:condition="python: here.portal_membership.checkPermission('Manage_users', here.Members)">Listed?</th>
+ </tr>
+<div tal:define="b_start string:0;b_start request/b_start | b_start;
+ members python: here.portal_membership.getRoster();
+ Batch python:modules['ZTUtils'].Batch;
+ global batch python:Batch(members, 25, int(b_start), orphan=1)">
+<tr tal:repeat="members batch">
+
+ <td> <br> </td>
+ <td tal:define="id members/id; homeUrl python: here.portal_membership.getHomeUrl(id, verifyPermission=1)">
+ <a href="www.here.com"
+ tal:condition="homeUrl"
+ tal:attributes="href homeUrl"
+ tal:content="id">ID</a>
+ <span tal:condition="not:homeUrl"
+ tal:replace="id">ID</span>
+ </td>
+ <td tal:condition="python: here.portal_membership.checkPermission( 'Manage_users', here.Members )"
+ tal:define="listed members/listed">
+ <span tal:replace="python: listed and 'Yes' or 'No'">Yes...Or No</span>
+ </td>
+</tr>
+
+<tr>
+ <td> <br> </td>
+ <td>
+ <span tal:define="p batch/previous" tal:condition="p">
+ <a href=""
+ tal:attributes="href string:?b_start=${p/first}">Previous <span tal:replace="p/length">p</span> Members</a>
+ </span>
+ <span tal:define="n batch/next" tal:condition="n">
+ <a href=""
+ tal:attributes="href string:?b_start=${batch/end}">Next <span tal:replace="n/length">n</span> Members</a>
+ </span>
+ </td>
+</tr>
+</div>
+</table>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/rssDisabled.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+<h2 tal:content="here/getId">Document Title</h2>
+<div tal:condition="request/portal_status_message | nothing"
+ tal:content="request/portal_status_message"
+ class="error"></div>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/search.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+
+<h3> Search Results </h3>
+
+<div tal:define="b_start python:0;b_start request/b_start | b_start;
+ results python:here.portal_catalog( REQUEST=request );
+ Batch python:modules['ZTUtils'].Batch;
+ global batch python:Batch(results, 25, b_start, orphan=1);
+ ">
+ <p>Found <span tal:define="pss modules/Products.PythonScripts.standard"
+ tal:replace="python:pss.thousands_commas(len(results))">100</span> items
+ <span tal:condition="exists: request/SearchableText"
+ tal:replace="string:matching ${request/SearchableText}"></span>.
+ </p>
+<table class="SearchResults">
+ <tr>
+ <td width="16"><br></td>
+ <th> Title
+ </th>
+ <th> Type
+ </th>
+ <th> Date
+ </th>
+ </tr>
+<tbody tal:repeat="results batch"
+ tal:condition="results">
+ <tr>
+ <td tal:define="global objURL python: results.getURL() + '/view'">
+ <span tal:condition="results/getIcon|nothing">
+ <a href="" tal:attributes="href objURL"><img src="" border="0" alt="" title=""
+ tal:define="alt results/Type"
+ tal:attributes="src results/getIcon; alt alt; title alt">
+ </a>
+ </span>
+ </td>
+ <td>
+ <a href="" tal:attributes="href objURL"><span tal:condition="results/Title"
+ tal:content="results/Title">Title</span><span tal:condition="not:results/Title" tal:content="string:(No title)"></span></a>
+ </td>
+ <td><span tal:content="results/Type">Type</span></td>
+ <td tal:content="results/Date">Date</td>
+</tr>
+<tr>
+ <td> </td>
+ <td colspan="3">
+ <em><span tal:condition="results/Description"
+ tal:content="results/Description">Description</span>
+ <span tal:condition="not:results/Description"
+ tal:content="string:(No description)"></span></em>
+ </td>
+</tr>
+</tbody>
+ </table>
+<div tal:condition="not:results"
+ tal:replace="string:There are no items matching your specified criteria"></div>
+
+ <p class="Desktop" tal:define="mq python:modules['ZTUtils'].make_query">
+ <span tal:define="p batch/previous" tal:condition="p">
+ <a href=""
+ tal:attributes="href python: '?' + mq( request.form, b_start=p.first )"
+ >Previous <span tal:replace="p/length">n</span> items</a>
+ </span>
+ <span tal:define="n batch/next" tal:condition="n">
+ <a href=""
+ tal:attributes="href python: '?' + mq( request.form, b_start=n.first )"
+ >Next <span tal:replace="n/length">n</span> items</a>
+ </span>
+ </p>
+</div>
+</div>
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/search_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+
+<div class="Desktop">
+
+<h1>Search <span tal:replace="here/Title" /></h1>
+
+<form action="search">
+
+<table class="FormLayout">
+
+
+ <tr tal:condition="python: here.portal_membership.checkPermission('Review portal content', here)">
+ <th> Review Status
+ </th>
+ <td>
+ <select name="review_state" size="3" multiple>
+ <option>private</option>
+ <option>pending</option>
+ <option>published</option>
+ </select>
+ <dl class="FieldHelp">
+ <dd> As a reviewer, you may search for items based on their
+ review state. If you wish to constrain results to items
+ in certain states, select them from this list.
+ </dd>
+ </dl>
+ </td>
+ </tr>
+
+ <tr valign="top">
+ <th> Full Text
+ </th>
+ <td>
+ <input name="SearchableText" size="40">
+ <dl class="FieldHelp">
+ <dd> For a simple text search, enter your search term
+ here. Multiple words may be found by combining
+ them with <b>AND</b> and <b>OR</b>. This will
+ find text in items' contents, title and
+ description.
+ </dd>
+ </dl>
+ </td>
+ </tr>
+
+ <tr>
+ <th>Title
+ </th>
+ <td>
+ <input name="Title" size="20">
+ </td>
+ </tr>
+
+ <tr valign="top">
+ <th>Subject</th>
+ <td><select name="Subject:list" multiple size="5">
+ <option value=""
+ tal:define="items python: here.portal_catalog.uniqueValuesFor('Subject')"
+ tal:repeat="item items"
+ tal:attributes="value item"
+ tal:content="item">
+ </option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <th> Description
+ </th>
+ <td>
+ <input name="Description" size="20">
+ <dl class="FieldHelp">
+ <dd> You may also search the items' descriptions and
+ titles specifically. Multiple words may be found
+ by combining them with <b>AND</b> and <b>OR</b>.
+ </dd>
+ </dl>
+ </td>
+ </tr>
+
+ <tr>
+ <th> Find new items since...
+ </th>
+ <td>
+ <select name="created:date"
+ tal:define="today python: here.ZopeTime().earliestTime()">
+ <option value="1970/01/01 00:00:00 GMT">Ever</option>
+ <option value=""
+ tal:condition="python:not(here.portal_membership.isAnonymousUser())"
+ tal:define="member python:here.portal_membership.getAuthenticatedMember();
+ lastLogin member/last_login_time|nothing"
+ tal:attributes="value lastLogin">Last login</option>
+ <option value=""
+ tal:define="yesterday python:(today-1).Date()"
+ tal:attributes="value yesterday">Yesterday</option>
+ <option value=""
+ tal:define="lastWeek python:(today-7).Date()"
+ tal:attributes="value lastWeek">Last week</option>
+ <option value=""
+ tal:define="lastMth python:(today-31).Date()"
+ tal:attributes="value lastMth">Last month</option>
+ </select>
+ <input type="hidden" name="created_usage" value="range:min">
+ <dl class="FieldHelp">
+ <dd> You may find only recent items by selecting a time-frame.
+ </dd>
+ </dl>
+ </td>
+ </tr>
+
+ <tr>
+ <th> Item type
+ </th>
+ <td>
+ <select name="Type:list" multiple size="5">
+ <option value=""
+ tal:define="items python: here.portal_types.listContentTypes()"
+ tal:repeat="item items"
+ tal:attributes="value item"
+ tal:content="item">
+ </option>
+ </select>
+ <dl class="FieldHelp">
+ <dd> You may limit your results to particular kinds of
+ items by selecting them above. To find all kinds
+ of items, do not select anything.
+ </dd>
+ </dl>
+ </td>
+ </tr>
+
+ <tr>
+ <th> Creator
+ </th>
+ <td>
+ <input name="Creator" size="20">
+
+ <dl class="FieldHelp">
+ <dd> To find items by a particular user only, enter
+ their username above. Note that you must enter
+ their username <i>exactly</i>.
+ </dd>
+ </dl>
+ </td>
+ </tr>
+
+ <tr>
+ <td><br></td>
+ <td>
+ <input type="submit" value="Search">
+ </td>
+ </tr>
+</table>
+</form>
+
+</div>
+</div>
+</body>
+</html>
+
+
+
=== CMF/CMFDefault/skins/zpt_generic/setup_talkback_tree.py 1.1 => 1.2 ===
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=tree_root
+##title=Standard Tree
+##
+from ZTUtils import SimpleTreeMaker
+
+tm = SimpleTreeMaker('tb_tree')
+def getKids(object):
+ return object.talkback.getReplies()
+tm.setChildAccess(function=getKids)
+
+tree, rows = tm.cookieTree(tree_root)
+rows.pop(0)
+return {'root': tree, 'rows': rows}
=== CMF/CMFDefault/skins/zpt_generic/standard_error_message.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+
+
+<div tal:condition="options/error_message"
+ tal:content="structure options/error_message" />
+
+<div tal:condition="not: options/error_message">
+ <H2>Site Error</H2>
+
+ <P>An error was encountered while publishing this resource.
+ </P>
+
+ <P>
+ <STRONG>Error Type: <span tal:replace="structure options/error_type" /></STRONG><BR>
+ <STRONG>Error Value: <span tal:replace="structure options/error_value" /></STRONG><BR>
+ </P>
+
+ <HR NOSHADE>
+
+ <P>Troubleshooting Suggestions</P>
+
+ <UL>
+ <div tal:condition="python: options['error_type'] in ('KeyError','NameError')">
+ <LI>This resource may be trying to reference a
+ nonexistent object or variable <STRONG><span tal:replace="options/error_value" /></STRONG>.</LI>
+ </div>
+ <LI>The URL may be incorrect.</LI>
+ <LI>The parameters passed to this resource may be incorrect.</LI>
+ <LI>A resource that this resource relies on may be encountering
+ an error.</LI>
+ </UL>
+
+ <P>For more detailed information about the error, please
+ refer to the HTML source for this page.
+ </P>
+
+ <P>If the error persists please contact the site maintainer.
+ Thank you for your patience.
+ </P>
+
+</div>
+</div>
+</div>
+</body>
+</html>
=== CMF/CMFDefault/skins/zpt_generic/stxmethod_view.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+
+<div class="Desktop">
+
+<p tal:replace="structure options/cooked">
+ STX goes here.
+</p>
+
+</div>
+
+</div>
+</body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/talkback_tree.pt 1.1 => 1.2 ===
+ <head>
+ <title tal:content="template/title">The title</title>
+ </head>
+ <body tal:define="t python:here.setup_talkback_tree(here); height t/root/height">
+ <table cellspacing="0" border="0">
+ <tr tal:repeat="row t/rows">
+
+
+ <td tal:define="indent python:row.depth - 1"
+ tal:condition="indent"
+ tal:attributes="colspan indent" colspan="1"></td>
+ <td width="16" tal:define="rlink row/branch">
+ <a tal:condition="rlink"
+ tal:attributes="name row/id;href rlink/link"
+ tal:content="structure rlink/img" href name><img src="/p_/pl"></a>
+ </td>
+ <td tal:attributes="colspan python:height-row.depth"
+ tal:define="obj nocall:row/object;url python:obj.absolute_url()"
+ colspan="1" width="99%">
+ <a tal:attributes="href url">
+ <img tal:attributes="src python:obj.portal_url() + '/' + obj.getIcon()"
+ border="0" src="" /></a>
+<a tal:attributes="href url"
+ tal:content="obj/Title" href="">Title</a>, by <span tal:replace="obj/Creator">Me</span> on <span tal:replace="obj/CreationDate">Today</span>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
+
=== CMF/CMFDefault/skins/zpt_generic/unauthRedirect.py 1.1 => 1.2 ===
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=clear browser cookie
+##
+REQUEST=context.REQUEST
+REQUEST.RESPONSE.redirect( context.absolute_url())
+
=== CMF/CMFDefault/skins/zpt_generic/undo_form.pt 1.1 => 1.2 ===
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+<body>
+<div metal:fill-slot="main">
+<div class="Desktop">
+
+<h1> Undo Transactions </h1>
+<div tal:define="transactions python: here.portal_undo.listUndoableTransactionsFor(here)">
+ <div tal:condition="transactions">
+ <FORM ACTION="undo" METHOD="POST">
+ <p>This application's transactional feature allows you to easily undo changes
+ made to the application's settings or data. You can revert the application
+ to a "snapshot" of it's state at a previous point in time. </p>
+ <P>Select one or more transactions below and then click on the "Undo"
+ button to undo the transactions. Note that even though a transaction
+ is shown below, you will not be able to undo it if later transactions
+ modified objects that were modified by the transaction. </p>
+ <table class="FormLayout">
+ <tr><td colspan=2 align=center><INPUT TYPE="SUBMIT" VALUE=" Undo ">
+ </td></tr>
+ <tr><td></td></tr>
+ <tbody tal:condition="request/first_transaction">
+ <tr><td colspan=2 align=center>
+ <a href=""
+ tal:attributes="href python:here.portal_url() + '/undo_form?first_transaction:int=' +
+ str(request.first_transaction*2-request.last_transaction) +
+ '&last_transaction:int=' +
+ str(request.first_transaction) +
+ '&PrincipiaUndoBatchSize:int=' +
+ str(request.PrincipiaUndoBatchSize)">Later Transactions</a>
+ </td></tr>
+ </tbody>
+ <tbody tal:repeat="items transactions">
+ <tr>
+ <td valign=top><input type=checkbox name="transaction_info:list"
+ value=""
+ tal:attributes="value items/id">
+ </td>
+ <td valign=top>
+ <strong><span tal:replace="items/description" /></strong> by <strong>
+ <span tal:condition="items/user_name|nothing">
+ <span tal:replace="items/user_name" />
+ </span>
+ <span condition="python:not(items.description)">
+ <em>Zope</em>
+ </span>
+ </strong> on <span tal:replace="python: items['time'].Month()" /> <span tal:replace="python: items['time'].day()" /> at
+ <span tal:replace="python: items['time'].Time()" />
+ </td>
+ </tr>
+ </tbody>
+ <tr><td colspan=2 align=center>
+ <span tal:condition="python: len(transactions) == request.PrincipiaUndoBatchSize">
+ <a href=""
+ tal:attributes="href python: here.absolute_url() + '/undo_form?first_transaction:int=' + str(request.last_transaction) + '&last_transaction:int=' + str(request.last_transaction+request.PrincipiaUndoBatchSize) + '&PrincipiaUndoBatchSize:int=' + str(request.PrincipiaUndoBatchSize)">Earlier Transactions</a>
+ </span>
+ </td></tr>
+ <tr><td></td></tr>
+ <tr><td colspan=2 align=center><INPUT TYPE="SUBMIT" VALUE=" Undo ">
+ </td></tr>
+ </table>
+ </FORM>
+</div>
+<div tal:condition="python: not(transactions)">
+
+ There are no transactions that can be undone.
+
+</div>
+</div>
+</div>
+</div>
+</body>
+</html>
=== CMF/CMFDefault/skins/zpt_generic/viewThreadsAtBottom.pt 1.1 => 1.2 ===
+ <div tal:condition="python: here.talkback.hasReplies(here)">
+ <h4>Comments:</h4>
+ <span tal:replace="structure here/talkback_tree"></span>
+ </div>
+</div>
+
=== CMF/CMFDefault/skins/zpt_generic/zpt_stylesheet.css 1.1 => 1.2 ===
+ background-color: White;
+ color: Black;
+ margin-top: 0;
+ margin-left:2pt;
+ margin-right:2pt;
+ margin-bottom:0;
+}
+
+p {
+ font-family: serif;
+}
+
+h1 {
+ font-family: sans-serif;
+ font-size: 120%;
+ font-weight: bold;
+}
+
+h2 {
+ font-family: sans-serif;
+ font-size: 115%;
+}
+
+h3 {
+ font-family: sans-serif;
+ font-size: 110%;
+}
+
+h4 {
+ font-family: sans-serif;
+ font-size: 110%;
+ font-style: italic;
+}
+
+a:link {
+ text-decoration: none;
+ color: #336699;
+}
+
+a:visited {
+ text-decoration: none;
+ color: #336699;
+}
+
+a:active {
+ color: #336699;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: none;
+ color: Blue;
+}
+
+table {
+ border: 0;
+}
+
+td {
+ vertical-align: top;
+}
+
+
+#Masthead {
+ background-color: #336699;
+ border: 1pt;
+ border-color: $336699;
+ padding: none;
+ cell-spacing: none;
+ width: 100%;
+}
+
+#PortalLogo {
+ background-color: #336699;
+ vertical-align: middle;
+ width: 15%;
+ height: 32px;
+}
+
+#PortalTitle {
+ background-color: #336699;
+ color: White;
+ text-align: left;
+ vertical-align: middle;
+ font-family: sans-serif;
+ font-size: 120%;
+ font-weight: bold;
+ width: 25%;
+ height: 32px;
+}
+
+#NavBar {
+ background-color: #336699;
+ color: #FFFFFF;
+ text-align: right;
+ vertical-align: middle;
+ font-family: sans-serif;
+ font-size: 80%;
+ width: 60%;
+ height: 32px;
+}
+
+#NavBar a:link {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+
+#NavBar a:visited {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+
+#NavBar a:active {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+
+#NavBar a:hover {
+ color: #5599CC;
+ text-decoration: none;
+}
+
+#MemberActionsBox {
+ color: White;
+ background-color: #5599CC;
+ border-top: solid #AAAAAA;
+ border-top-width: thin;
+}
+
+#ContextActionsBox {
+ border-color: #AAAAAA;
+ background-color: #AAAAAA;
+ padding: none;
+}
+
+.ContextActionsRow {
+ color: White;
+ background-color: #AAAAAA;
+}
+
+
+.ActionTitle {
+ color: Black;
+ font-family: sans-serif;
+ font-weight: bold;
+ font-size: 90%;
+}
+
+.ActionLink {
+ color: Black;
+ font-family: sans-serif;
+ font-size: 90%;
+}
+
+
+.ActionLink a:link {
+ color: White;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+.ActionLink a:visited {
+ color: White;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+.ActionLink a:active {
+ color: White;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+.ActionLink a:hover {
+ color: #336699;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+.ObjectStatus {
+ font-style: italic;
+}
+
+#ForematterCell {
+ margin-top: 20px;
+}
+
+#DesktopStatusBar {
+ color: Red;
+ background-color: White;
+ font-family: Arial, Verdana, Helvetica, sans-serif;
+ font-style: italic;
+ font-weight: bold;
+ margin-top: 8pt;
+}
+
+#DesktopTitle {
+ margin-top: 8pt;
+}
+
+#DesktopDescription {
+ font-style: italic;
+ margin-left: 20pt;
+ margin-right: 8pt;
+}
+
+#Desktop {
+ margin-left: 8pt;
+ margin-right: 8pt;
+}
+
+#ContentByline {
+ font-size: 90%;
+ font-style: italic;
+}
+
+#DiscussionAbove {
+ margin-left: 16pt;
+ margin-right: 8pt;
+ margin-top: 8pt;
+ margin-bottom: 8pt;
+ font-style: italic;
+}
+
+table.FormLayout {
+ width: 80%;
+}
+
+table.FormLayout tr {
+ vertical-align: top;
+}
+
+table.FormLayout tr th.TextField {
+ vertical-align: top;
+ color: #000000;
+}
+
+table.FormLayout tr td.TextField {
+ vertical-align: top;
+ color: #000000;
+}
+
+table.FormLayout th {
+ text-align: right;
+ font-size: 80%;
+ font-weight: bold;
+}
+
+table.FormLayout dl.FieldHelp dd {
+ font-size: 80%;
+ color: #000000;
+}
+
+table.FormLayout td.ListName {
+ background-color: #336699;
+ color: #FFFFFF;
+ font-weight: bold;
+ verticle-align: middle;
+}
+
+table.FormLayout td.ListDefinition {
+ font-style: italic;
+ color: #000000;
+}
+
+table.ContentsList tr td {
+ font-size: 100%;
+}
+
+table.ContentsList tr td img {
+ border: 0;
+}
+
+table.SearchResults {
+ width: auto;
+}
+
+table.SearchResults tr th {
+ text-align: left;
+}
+
+table.SearchResults tr td img {
+ border: 0;
+}
+
+table.Wizard {
+ width: auto;
+}
+
+table.Wizard tr {
+ vertical-align: top;
+}
+
+table.Wizard tr th {
+ text-align: right;
+}
+
+div.NewsBar {
+ text-align: right;
+}
+
+table.NewsItems {
+ border: 0;
+}
+
+
+td.NewsBorder {
+ background-color: #336699;
+}
+
+td.NewsListing {
+ background-color: #336699;
+ color: #FFFFFF;
+ font-size: 80%;
+ font-weight: bold;
+}
+
+td.NewsByLine {
+ background-color: #CCCCCC;
+ color: #336699;
+ font-size: 80%;
+ text-align: left;
+ vertical-align: top;
+}
+
+.NewsLeadin {
+ background-color: #FFFFFF;
+ color: #336699;
+}
+
+.NewsByLine {
+ background-color: #336699;
+ color: #FFFFFF;
+}
+
+.NewsDateline {
+ background-color: #336699;
+ color: #FFFFFF;
+}
+
+td.NewsTitle {
+ background-color: #336699;
+ color: #FFFFFF;
+ text-align: center;
+ font-size: 90%;
+ font-weight: bold;
+}
+
+.NewsItemRow {
+ background-color: #AAAAAA;
+ font-size: 70%;
+}
+
+p.NewsHeadline {
+ background-color: #336699;
+}
+