[CMF-checkins] CVS: CMF - folderContentList.dtml:1.1 folder_add.pt:1.1 folder_contents.pt:1.1 folder_factories.pt:1.1 folder_rename_form.pt:1.1 logged_in.pt:1.1 mail_password_response.pt:1.1 metadata_help.pt:1.1 news_box.pt:1.1 recent_news.pt:1.1 reconfig_form.pt:1.1 registered.pt:1.1 roster.pt:1.1 search.pt:1.1 search_form.pt:1.1 unauthRedirect.py:1.1 discussion_reply_form.pt:1.3 join_form.pt:1.4 main_template.pt:1.2

andrew@digicool.com andrew@digicool.com
Tue, 10 Jul 2001 16:13:23 -0400 (EDT)


Update of /cvs-repository/CMF/CMFDecor/skins/zpt_generic
In directory korak.digicool.com:/tmp/cvs-serv9545/skins/zpt_generic

Modified Files:
	discussion_reply_form.pt join_form.pt main_template.pt 
Added Files:
	folderContentList.dtml folder_add.pt folder_contents.pt 
	folder_factories.pt folder_rename_form.pt logged_in.pt 
	mail_password_response.pt metadata_help.pt news_box.pt 
	recent_news.pt reconfig_form.pt registered.pt roster.pt 
	search.pt search_form.pt unauthRedirect.py 
Log Message:

*Adding a ton of newly converted files along with some fixes in
logic and optimizations of ZPT.



--- Added File folderContentList.dtml in package CMF ---
<dtml-let filterString="REQUEST.get( 'folderfilter', '' )"
          filter="decodeFolderFilter( filterString )"
>
<dtml-in expr="listFolderContents( filter=filter )"
         sort="getId" size="19" start=qs skip_unauthorized>
 <dtml-if next-sequence>
  <dtml-call "REQUEST.set('next-sequence'
                         , _['next-sequence-start-number'])">
 </dtml-if>
 <dtml-if previous-sequence>
  <dtml-call "REQUEST.set('previous-sequence'
                         ,_['previous-sequence-start-number'])">
 </dtml-if>
 <dtml-let obj="_.getitem('sequence-item', 0 )"
           folderish=isPrincipiaFolderish
           portalish="_.hasattr( obj, 'isPortalContent' )
                     and obj.isPortalContent"
           methodID="folderish and '/folder_contents' or ( portalish
                     and '/view' or '' )"
           getIcon="_.hasattr(obj, 'getIcon') and obj.getIcon()"
           icon="getIcon or _.getattr(obj, 'icon', '')"
 >
     <tr valign="top">
      <td align="left" width="5" NOWRAP>
         <input type="checkbox" name="ids:list" value="&dtml-getId;"
          id="cb_&dtml-getId;" />
      </td>
      <td>
         <dtml-if icon>
         <a href="&dtml.url_quote-getId;&dtml-methodID;"
          ><img src="&dtml-portal_url;/&dtml-icon;"
                alt="&dtml-Type;" border="0"></a> 
         </dtml-if>
      </td>
      <td>
         <a href="&dtml.url_quote-getId;&dtml-methodID;"
           >&dtml-getId;<dtml-if title> (&dtml-title;)</dtml-if></a>
      </td>
     </tr>

  <dtml-if qs>
   <dtml-if "_['sequence-index'] - _.int(qs) == 7">
    </table><dtml-comment> End of first column </dtml-comment>
   </td>
   <td>
      <table class="ContentsList">
   </dtml-if>
  <dtml-else> <dtml-comment> No batch </dtml-comment>
   <dtml-if "_['sequence-index'] == 8">
    </table><dtml-comment> End of first column </dtml-comment>
   </td>
   <td valign="top">
    <table class="ContentsList">
   </dtml-if>
  </dtml-if>
 </dtml-let>
</dtml-in>
</dtml-let>
    </table>
   </td>
  </tr>
 
 <tr>
  <td align="right">
   <dtml-if previous-sequence>
    <a href="folder_contents?qs=&dtml-previous-sequence;">Previous items</a>
   <dtml-else>
    <br>
   </dtml-if>
  </td>
  <td align="left">
   <dtml-if next-sequence>
    <a href="folder_contents?qs=&dtml-next-sequence;">Next items</a>
   <dtml-else>
     <br>
  </dtml-if>
  </td>
 </tr>



--- Added File folder_add.pt in package CMF ---
<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 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>

--- Added File folder_contents.pt in package CMF ---
<span tal:define="dummy here/filterCookie; desktop python: request.set('isDesktop', 1)"></span>

<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">
      <tr valign="top"
	      tal:define="upNav python: hasattr(here.aq_parent, 'portal_url');
		              upID python: here.aq_parent.getId()"
		  tal:condition="python: here.portal_membership.checkPermission('List folder contents', here, 'aq_parent')"
	   >
        <td width="16"><br></td>
        <td 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>
        </td>
        <td tal:condition="upNav">Up to <a href="../folder_contents" tal:content="upID">Up ID</a></td>
        <td tal:condition="python: not(upNav)"><span class="mild">Root</span></td>
      </tr>
	  <tr tal:replace="structure here/folderContentList"><td>Folder Content Listing Here</td></tr>
</table>

<TABLE BORDER="0" CELLSPACING="0" CELLPADDING=2>
<TR>
  <TD ALIGN="LEFT" VALIGN="TOP" WIDTH="16"></TD>
  <TD ALIGN="LEFT" VALIGN="TOP">
  <dtml-if expr="portal_membership.checkPermission('Add portal content', this())">
    <INPUT TYPE="SUBMIT" NAME="folder_factories:method" VALUE="New...">
  </dtml-if>
  <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>
  <dtml-if expr="portal_membership.checkPermission('Delete objects', this())">
    <INPUT TYPE="SUBMIT" NAME="folder_delete:method" VALUE="Delete">
  </dtml-if>
  </TD>
</TR>
</TABLE>
</table>
</form>
<span tal:replace="structure here/folder_filter_form">Filter Form Here</span>
</div>
</div>
</body>
</html>

--- Added File folder_factories.pt in package CMF ---
<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"
	  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>
 <tr valign="top">
  <td> <br> </td>
  <td colspan="2"> <strong> ID: </strong>
       <input type="text" name="id" size="20">
       <input type="submit" value="Add"> </td>
 </tr>
</table>
</form>

</div>
</div>
</body>
</html>

--- Added File folder_rename_form.pt in package CMF ---
<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 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>

--- Added File logged_in.pt in package CMF ---
<div tal:condition="here/portal_skins | nothing">
  <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"
       tal:define="dummy python: request['RESPONSE'].expireCookie('__ac', path='/')">
      <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"
		       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>


--- Added File mail_password_response.pt in package CMF ---
<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">
<p class="DesktopStatusBar">Your password has been mailed.  
<br>
It should arrive in your mailbox momentarily.</p>
</div>
</body>
</html>

--- Added File metadata_help.pt in package CMF ---
<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 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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>&nbsp;  </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>

--- Added File news_box.pt in package CMF ---
 <table class="NewsItems" cellspacing="0" cellpadding="0" border="0" width="100%">
 <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">
    <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>

--- Added File recent_news.pt in package CMF ---
<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="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>
      <br> By <span tal:replace="newsitems/Creator">Creator</span>
  </td>
  <td class="NewsListing" align="right" valign="top"
      tal:content="newsitems/Date">Date
  </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>

--- Added File reconfig_form.pt in package CMF ---
<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 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>
--- Added File registered.pt in package CMF ---
<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 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>

--- Added File roster.pt in package CMF ---
<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(request.has_key('bs'))"
     tal:define="dummy python:request.set('bs', '25')"></div>

<div class="Desktop">

<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>

--- Added File search.pt in package CMF ---
<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 class="Desktop">

<h3> Search Results </h3>

<div tal:define="b_start string:0;b_start request/b_start | b_start;
       results here/portal_catalog;
	   Batch python:modules['ZTUtils'].Batch;
	   global batch python:Batch(results, 25, int(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="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 here/portal_url/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>&nbsp;</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">
 <span tal:define="p batch/previous" tal:condition="p">
   <a href=""
    tal:attributes="href string:?b_start=${p/first}&SearchableText=${request/SearchableText}">Previous <span tal:replace="p/length">n</span> items</a>
 </span>&nbsp;&nbsp;
 <span tal:define="n batch/next" tal:condition="n">
   <a href=""
      tal:attributes="href string:?b_start=${batch/end}&SearchableText=${request/SearchableText}">Next <span tal:replace="n/length">n</span> items</a>
 </span> 
 </p>
</div>
</div>
</div>
</body>
</html>
--- Added File search_form.pt in package CMF ---
<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 class="Desktop">

<h1> Search portal </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>
     <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=""
	        tal:condition="python:not(here.portal_membership.isAnonymousUser())"
			tal:define="member python:here.portal_membership.getAuthenticatedMember(); lastLogin member/last_login_time"
			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>
    <option value="1970/01/01 00:00:00 GMT">Ever</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>


--- Added File unauthRedirect.py in package CMF ---
## Script (Python) "unauthRedirect.py $Revision: 1.1 $"
##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())


--- Updated File discussion_reply_form.pt in package CMF --
--- discussion_reply_form.pt	2001/06/25 17:48:23	1.2
+++ discussion_reply_form.pt	2001/07/10 20:13:22	1.3
@@ -3,8 +3,8 @@
       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=""
@@ -30,7 +30,8 @@
    <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="discussion_reply:method'">
+   <input type="submit" value="Reply" name=""
+          tal:attributes="name string:discussion_reply:method">
   </td>
  </tr>
 </table>

--- Updated File join_form.pt in package CMF --
--- join_form.pt	2001/06/28 21:13:06	1.3
+++ join_form.pt	2001/07/10 20:13:22	1.4
@@ -19,8 +19,8 @@
 	   <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="error"
-     tal:replace="request/error|nothing">
+<div class="DesktopStatusBar"
+     tal:content="request/error|nothing">
      <hr>
 </div>
 <form action="register" method="POST">

--- Updated File main_template.pt in package CMF --
--- main_template.pt	2001/06/21 20:01:19	1.1
+++ main_template.pt	2001/07/10 20:13:22	1.2
@@ -1,36 +1,36 @@
-<html metal:define-macro="master">
- <head>
-  <title tal:define="ob_title here/Title; portal_title container/title" tal:content="string:${portal_title}: ${ob_title}">The title</title>
-  <div tal:replace="structure container/css_inline_or_link"/>
- </head>
- <body>
-  <div metal:use-macro="container/standard_top_bar/macros/top_bar"/>
-
-  <table width="100%" border="0" cellpadding="0" cellspacing="0">
-   <tr>
-   <!-- Vertical whitespace -->
-   <td colspan="4"><br/></td>
-   </tr>
-
-   <tr valign="top">
-   <td class="SideBar" width="15%" align="left" valign="top" tal:content="structure container/actions_box">
-   Actions box
-   </td>
-
-   <!-- Horizontal whitespace -->
-   <td width="1%">&nbsp;</td>
-
-   <td class="Desktop" colspan="2" width="84%" valign="top">
-
-   <p tal:condition="exists:options/portal_status_message" tal:content="options/portal_status_message" class="DesktopStatusBar"></p>
-
-   <div tal:condition="exists:here/localHeader" replace="structure here/localHeader"/>
-   <div metal:define-slot="main"/>
-   <div tal:condition="exists:here/localFooter" replace="structure here/localFooter"/>
-
-  </td>
-  </tr>
-  </table>
-
- </body>
-</html>
+<html metal:define-macro="master">
+ <head>
+  <title tal:define="ob_title here/Title; portal_title container/title" tal:content="string:${portal_title}: ${ob_title}">The title</title>
+  <div tal:replace="structure container/css_inline_or_link"/>
+ </head>
+ <body>
+  <div metal:use-macro="container/standard_top_bar/macros/top_bar"/>
+
+  <table width="100%" border="0" cellpadding="0" cellspacing="0">
+   <tr>
+   <!-- Vertical whitespace -->
+   <td colspan="4"><br/></td>
+   </tr>
+
+   <tr valign="top">
+   <td class="SideBar" width="15%" align="left" valign="top" tal:content="structure container/actions_box">
+   Actions box
+   </td>
+
+   <!-- Horizontal whitespace -->
+   <td width="1%">&nbsp;</td>
+
+   <td class="Desktop" colspan="2" width="84%" valign="top">
+
+   <p tal:condition="request/portal_status_message|nothing" tal:content="request/portal_status_message" class="DesktopStatusBar"></p>
+
+   <div tal:condition="exists:here/localHeader" replace="structure here/localHeader"/>
+   <div metal:define-slot="main"/>
+   <div tal:condition="exists:here/localFooter" replace="structure here/localFooter"/>
+
+  </td>
+  </tr>
+  </table>
+
+ </body>
+</html>