[CMF-checkins] CVS: CMF/CMFDefault/skins/zpt_generic - discussion_reply_form.pt:1.2.28.1 discussion_reply_preview.pt:1.2.28.1 folder_add.pt:1.3.2.1 folder_factories.pt:1.5.2.1 folder_filter_form.pt:1.2.28.1 folder_localrole_form.pt:1.2.28.1 folder_rename_form.pt:1.3.2.1 join_form.pt:1.2.28.1 logged_in.pt:1.3.2.1 login_form.pt:1.2.28.1 mail_password_form.pt:1.2.28.1 password_form.pt:1.2.28.1 personalize_form.pt:1.3.2.1 reconfig_form.pt:1.2.28.1 search_form.pt:1.3.12.1 undo_form.pt:1.3.2.1

Tres Seaver tseaver@zope.com
Mon, 1 Apr 2002 19:53:30 -0500


Update of /cvs-repository/CMF/CMFDefault/skins/zpt_generic
In directory cvs.zope.org:/tmp/cvs-serv19407/CMFDefault/skins/zpt_generic

Modified Files:
      Tag: tseaver-tracker_468-branch
	discussion_reply_form.pt discussion_reply_preview.pt 
	folder_add.pt folder_factories.pt folder_filter_form.pt 
	folder_localrole_form.pt folder_rename_form.pt join_form.pt 
	logged_in.pt login_form.pt mail_password_form.pt 
	password_form.pt personalize_form.pt reconfig_form.pt 
	search_form.pt undo_form.pt 
Log Message:


 - Make actions of all forms use absolute URLs (Tracker #468).

 - Clean up icky HTML.


=== CMF/CMFDefault/skins/zpt_generic/discussion_reply_form.pt 1.2 => 1.2.28.1 ===
       metal:use-macro="here/main_template/macros/master">
 <body>
-<div metal:fill-slot="main">	
+<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'">
+<form method="POST" action="talkback"
+      tal:attributes="action string:${here/absolute_url}/talkback"
+>
 <input type="hidden" name="Creator" value=""
-	   tal:attributes="value python: here.portal_membership.getAuthenticatedMember()">
+       tal:attributes="value python: here.portal_membership.getAuthenticatedMember()">
 
 <table class="FormLayout">
  <tr>
@@ -21,7 +22,7 @@
   <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>
+             tal:content="here/text_override | nothing"></textarea>
   </td>
  </tr>
  <tr>


=== CMF/CMFDefault/skins/zpt_generic/discussion_reply_preview.pt 1.2 => 1.2.28.1 ===
      tal:replace="structure python: pss.structured_text(request.form['text'])">Text Body</div>
 
-<form method="POST" action=""
+<form method="POST" action="talkback"
       tal:attributes="action python: here.absolute_url() + '/talkback'">
  <input type="hidden" name="title" value=""
       tal:attributes="value python: request.form['title']">


=== CMF/CMFDefault/skins/zpt_generic/folder_add.pt 1.3 => 1.3.2.1 ===
     web objects in to logical groups.</P>
 
-<form action="manage_addPortalFolder" method="POST">
+<form action="manage_addPortalFolder" method="POST"
+      tal:attributes="action string:${here/absolute_url}/manage_addPortalFolder"
+>
 <table class="FormLayout">
  <tr>
   <td>


=== CMF/CMFDefault/skins/zpt_generic/folder_factories.pt 1.5 => 1.5.2.1 ===
 <div class="Desktop">
 <h1> Add Content </h1>
-<form action="invokeFactory" method="POST">
+<form action="invokeFactory" method="POST"
+      tal:attributes="action string:${here/absolute_url}/invokeFactory"
+>
 <table class="FormLayout">
 <tr>
 <td>


=== CMF/CMFDefault/skins/zpt_generic/folder_filter_form.pt 1.2 => 1.2.28.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"
-    >
+      tal:define="showfilter request/show_filter_form|nothing;
+                  hidefilter python:not showfilter;
+                 "
+      tal:attributes="action string:${here/absolute_url}/folder_contents"
+>
 <table class="FormLayout"
     tal:condition="showfilter"
     tal:define="Type python:(); Subject python:'';filter python:here.decodeFolderFilter(request.get('folderfilter', ''))">


=== CMF/CMFDefault/skins/zpt_generic/folder_localrole_form.pt 1.2 => 1.2.28.1 ===
 <h2>Assign local roles: Search Members</h2>
 
-<form method="post" action="folder_localrole_form">
+<form method="post" action="folder_localrole_form"
+      tal:attributes="action string:${here/absolute_url}/folder_localrole_form"
+>
 
 <table class="FormLayout">
  <tr>
@@ -57,7 +59,9 @@
 
  <p>Select Member(s) and a role to assign:</p>
 
- <form method="post" action="folder_localrole_edit">
+ <form method="post" action="folder_localrole_edit"
+       tal:attributes="action string:${here/absolute_url}/folder_localrole_edit"
+ >
   <input type="hidden" name="change_type" value="add">
 
   <table class="FormLayout">
@@ -132,11 +136,13 @@
 
 <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="">
+<form method="post" action="folder_localrole_edit"
+      tal:attributes="action string:${here/absolute_url}/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">
+ <table class="FormLayout" tal:define="lroles here/get_local_roles">
  <tr>
    <td width="16"><br></td>
    <th style="text-align:left;">User</th>


=== CMF/CMFDefault/skins/zpt_generic/folder_rename_form.pt 1.3 => 1.3.2.1 ===
 <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">
+
+<div tal:condition="here/folder_rename_items" >
+
+<form action="folder_rename" method="POST"
+      tal:attributes="action string:${here/absolute_url}/folder_rename"
+>
+
+ <table class="FormLayout">
+
   <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">
+             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">
+             tal:attributes="value item/getId" size="20">
     </td>
   </tr>
 
   <tr>
-    <td colspan=4>
-      <input type="submit" value=" Ok ">
-    </td>
+    <td colspan="4"> <input type="submit" value=" Ok "> </td>
   </tr>
-  </form>
-</table>
 
+ </table>
 
+</form>
 
-<div tal:condition="python: not(here.folder_rename_items())">
-  <form action="folder_contents" method="GET">
+</div><!-- tal:condition="here/folder_rename_items" -->
+
+<div tal:condition="not: here/folder_rename_items">
+
+<form action="folder_contents" method="GET"
+      tal:attributes="action string:${here/absolute_url}/content_status_modify"
+>
   <p>You must select one or more items to rename.</p>
   <input type="submit" value=" Ok ">
-  </form>
-</div>
-</div>
+</form>
 </div>
+
+</div><!-- class="Desktop"-->
+
+</div><!-- metal:fill-slot="main" -->
+
 </body>
 </html>
-


=== CMF/CMFDefault/skins/zpt_generic/join_form.pt 1.2 => 1.2.28.1 ===
 <body>
 <div metal:fill-slot="main">
-<div class="Desktop">
+<div class="Desktop"
+     tal:define="mtool here/portal_membership;
+                 member mtool/getAuthenticatedMember;
+                 ptool here/portal_properties;
+                ">
+>
 
 <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">
+<div tal:define="registered python:member.has_role('Member')">
+
+ <div tal:condition="registered">
+
+  <p> You are already a member. You may use the
+      <a href="personalize_form">personalization form</a> 
+       to change your membership information. </p>
+
+ </div><!-- registered -->
+
+ <div tal:condition="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>
+
+  <p tal:condition="python: ptool.validate_email">
+      You must submit a valid email address. This address will be used
+      to send you a randomly-generated password.  Once you have logged
+      in with this password, you may change it to anything you like.</p>
+
+  <div class="DesktopStatusBar"
+       tal:content="request/error|nothing">
      <hr>
-</div>
-<form action="register" method="POST">
+  </div>
+
+  <form action="register" method="POST"
+        tal:attributes="action string:${here/portal_url}/register"
+  >
+
+   <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>
+
+   <tbody tal:condition="python: not(ptool.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>
+   </tbody>
+
+    <tr>
+     <td><br></td>
+     <td> <input type="submit" name="submit" value="Register"> </td>
+    </tr>
+
+   </table>
+
+  </form>
+
+ </div><!-- not registered -->
 
-<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>
+</div><!-- tal:define="registered" -->
+
+</div><!-- class="Desktop" -->
+
+</div><!-- metal:fill-slot="main" -->
 
 </body>
 </html>
-


=== CMF/CMFDefault/skins/zpt_generic/logged_in.pt 1.3 => 1.3.2.1 ===
       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: member.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: member.setProperties(last_login_time=member.login_time); 
-                           ereg python: member.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>
+
+ <div tal:define="p_props here/portal_properties;
+                  mtool here/portal_membership;
+                  isAnon mtool/isAnonymousUser|nothing;
+                  member mtool/getAuthenticatedMember;
+                  now here/ZopeTime;
+                  never python: here.ZopeTime( '2000/01/01' );
+                 "
+ >
+
+  <div tal:condition="isAnon">
+
+   <span 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><!-- isAnon -->
+
+  <div tal:condition="not: isAnon"
+       tal:define="first_time python:( member.login_time == never
+                                       and p_props.validate_email )">
+  >
+
+   <div tal:condition="first_time">
+    <div tal:define="dum_reg python:member.setProperties(
+                                                last_login_time=now,
+                                                login_time=now)" />
+
+    <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"
+          tal:attributes="action string:${here/portal_url}/change_password"
+    >
+     <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><br /></td>
+       <td><input type="submit" value="Change password"></td>
+      </tr>
+
+     </table>
+
+    </form>
+
+   </div><!-- first_time -->
+
+   <div tal:condition="not: first_time">
+
+    <div tal:define="d_reg python:member.setProperties(
+                                            last_login_time=member.login_time); 
+                     ereg python:member.setProperties(
+                                            login_time=here.ZopeTime())" />
+
+    <div tal:condition="request/came_from | nothing "
+    >
+      <div tal:define="came_from python:request.get('came_from');
+                       respose: request/RESPONSE;
+                       dredirect python: response.redirect(came_from)" />
+    </div>
+
+    <h1 class="DesktopTitle">Login success</h1>
+
+    <p class="Desktop">Welcome. You are currently logged in. </p>
+
+   </div><!-- not first_time -->
+
+  </div><!-- not isAnon -->
+
+ </div><!-- define p_props -->
+
+</div><!-- metal:fill-slot="main" -->
+
 </body>
 </html>
 


=== CMF/CMFDefault/skins/zpt_generic/login_form.pt 1.2 => 1.2.28.1 ===
 <h1 class="Desktop">Log in</h1>
 
-<form action="" method="post" tal:attributes="action python: here.portal_url() + '/logged_in'">
+<form action="" method="post"
+      tal:attributes="action python: here.portal_url() + '/logged_in'"
+>
 
 <!-- ****** Enable the automatic redirect ***** -->
 <span tal:condition="exists: request/came_from">


=== CMF/CMFDefault/skins/zpt_generic/mail_password_form.pt 1.2 => 1.2.28.1 ===
       metal:use-macro="here/main_template/macros/master">
 <body>
+
 <div metal:fill-slot="main">
-<div class="Desktop">
 
-<h1> Don't panic!</h1>
+ <div class="Desktop"
+      tal:attributes="ptool here/portal_properties">
+
+  <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:${ptool/email_from_address}"
+         tal:content="ptool/email_from_address"
+         href="mailto:me@here.com">me@here.com</a>.  </p>
+
+  <form action="mail_password"
+        tal:attributes="action string:${here/portal_url}/mail_password"
+  >
+   <input name="userid">
+   <input type="submit" value=" Send ">
+  </form>
+
+ </div><!-- class="Desktop" -->
+
+</div><!-- metal:fill-slot="main" -->
 
-<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/password_form.pt 1.2 => 1.2.28.1 ===
      tal:condition="request/error|nothing"><hr></div>
 
-<form action="change_password" method="post">
+<form action="change_password" method="post"
+      tal:attributes="action string:${here/absolute_url}/change_password"
+>
 <table class="FormLayout">
  <tr>
   <th>Username


=== CMF/CMFDefault/skins/zpt_generic/personalize_form.pt 1.3 => 1.3.2.1 ===
       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">
+ <div tal:define="mtool: here/portal_membership;
+                  member mtool/getAuthenticatedMember;
+                 ">
+
+  <div tal:condition="python: not( mtool.checkPermission( 'Set own properties'
+                                                        , here ) )">
+    <span tal:define="purl here/portal_url;
+                      aurl here/absolute_url;
+                      rurl string:${purl}/login_form?came_from=${aurl};
+                      response request/RESPONSE;
+                      redirect python:response.redirect( rurl )" />
+
+  </div><!-- not Set own properties -->
+
+  <div class="Desktop">
+
+   <h1> Member Preferences </h1>
+
+   <span tal:replace="request/msg"
+         tal:condition="request/msg|nothing" />
+      
+   <p><a href="password_form">Click here</a> to change your password.</p>
+
+   <form action="personalize" method="post"
+         tal:attributes="action string:${here/portal_url}/personalize"
+   >
+    <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 tal:define="listed member/listed|nothing">
+        <input type="radio" name="listed" 
+               tal:attributes="checked listed"
+               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>
+
+     <tr tal:condition="here/portal_skins|nothing">
+      <th>Skin</th>
+      <td tal:define="s_tool here/portal_skins;
+                      current request/portal_skin|nothing;
+                     ">
+       <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>
+                tal:define="skins python:s_tool.getSkinSelections()"
+                tal:repeat="skin skins"
+                tal:attributes="value skin;
+                                selected python:current == skin"
+                tal:content="skin"> skin </option>
+       </select>
+      </td>
+     </tr>
+
+     <tr>
+      <td><br /></td>
+      <td><input type="submit" value=" Change "></td>
+     </tr>
+    </table>
+   </form>
+
+  </div><!-- class="Desktop" -->
+
+ </div><!-- tal:define="mtool" -->
+
+</div><!-- metal:fill-slot="main" -->
+
 </body>
 </html>
 


=== CMF/CMFDefault/skins/zpt_generic/reconfig_form.pt 1.2 => 1.2.28.1 ===
 
 <form action="" method="Post"
-      tal:attributes="action python:here.portal_url() + '/reconfig'">
+      tal:attributes="action string:${here/portal_url}/reconfig"
+>
  <table class="FormLayout">
   <tr>
    <th valign="top" align="left"> Portal 'From' name


=== CMF/CMFDefault/skins/zpt_generic/search_form.pt 1.3 => 1.3.12.1 ===
 <h1>Search <span tal:replace="here/Title" /></h1>
 
-<form action="search">
+<form action="search"
+      tal:attributes="action string:${here/portal_url}/search"
+>
 
 <table class="FormLayout">
 


=== CMF/CMFDefault/skins/zpt_generic/undo_form.pt 1.3 => 1.3.2.1 ===
               ">
 
-  <form action="undo" method="POST">
+  <form action="undo" method="POST"
+        tal:attributes="action string:${here/portal_url}/undo"
+  >
 
    <p> This application's transactional feature allows you to easily
        undo changes made to the application's settings or data. You can