You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by "risalitim@gmail.com" <ri...@gmail.com> on 2009/01/24 22:19:23 UTC

Re: svn commit: r735965 - in /ofbiz/trunk: framework/common/src/org/ofbiz/common/ framework/common/widget/ specialpurpose/myportal/config/ specialpurpose/myportal/script/org/ofbiz/myportal/ specialpurpose/myportal/webapp/myportal/WEB-INF/ specialpurpose/my...

Hi Hans,

I suggest to use the prefix MyPortal for those type of labels, I spent  
a lot of days to cleanup all the wasted labels into OFBiz and I think  
we cannot all use different standard to codify the labels.
And if it's possible do not use the underscore character in the labels  
name could be more readable.

In my opinion for example CaptchaMissingError could be  
MyPortalCaptchaMissingError or something similar to that.

If we do not follow this simple rule in two or three months the labels  
will be completed wasted again.

What others thinks about that ?

Thanks
Marco

Il giorno 20/gen/09, alle ore 09:30, hansbak@apache.org ha scritto:

> Author: hansbak
> Date: Tue Jan 20 00:30:41 2009
> New Revision: 735965
>
> URL: http://svn.apache.org/viewvc?rev=735965&view=rev
> Log:
> first version of captcha, not perfect yet: multiple users  
> registering at the same time, image should be stored in 'runtime'  
> not working on windows. Another problem is what files to put  
> where.....the captcha itself looks like a framework  
> feature...however the registration process needs the party  
> component....so let us know, we will correct it....
>
> Added:
>    ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java    
> (with props)
>    ofbiz/trunk/specialpurpose/myportal/widget/login.ftl   (with props)
> Modified:
>    ofbiz/trunk/framework/common/widget/CommonMenus.xml
>    ofbiz/trunk/specialpurpose/myportal/config/MyPortalUiLabels.xml
>    ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/myportal/ 
> Events.xml
>    ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB-INF/ 
> controller.xml
>    ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml
>    ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml
>
> Added: ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java?rev=735965&view=auto
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java  
> (added)
> +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java  
> Tue Jan 20 00:30:41 2009
> @@ -0,0 +1,163 @@
> +/ 
> *******************************************************************************
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> +  
> *******************************************************************************/
> +
> +// copied from : http://cocoon.apache.org/2.2/blocks/captcha/1.0/1436_1_1.html
> +
> +package org.ofbiz.common;
> +
> +import javax.imageio.ImageIO;
> +import javax.servlet.http.HttpServletRequest;
> +import javax.servlet.http.HttpServletResponse;
> +import java.awt.*;
> +import java.awt.geom.AffineTransform;
> +import java.awt.image.BufferedImage;
> +import java.io.File;
> +import java.io.IOException;
> +
> +public class Captcha {
> +
> +    public static String ID_KEY = null;
> +
> +    public static String getCodeCaptcha(HttpServletRequest  
> request,HttpServletResponse response) {
> +    	StringBuffer finalString = new StringBuffer();
> +        String elegibleChars =  
> "ABCDEFGHJKLMPQRSTUVWXYabcdefhjkmnpqrstuvwxy23456789";
> +        int charsToPrint = 6;
> +        char[] chars = elegibleChars.toCharArray();
> +
> +        for (int i = 0; i < charsToPrint; i++) {
> +            double randomValue = Math.random();
> +            int randomIndex = (int) Math.round(randomValue *  
> (chars.length - 1));
> +            char characterToShow = chars[randomIndex];
> +            finalString.append(characterToShow);
> +        }
> +        ID_KEY = finalString.toString();
> +        if(createImageCaptcha (request,response)) return "success";
> +        return "error";
> +    }
> +
> +    public static boolean createImageCaptcha (HttpServletRequest  
> request,HttpServletResponse response) {
> +        try {        	
> +            //It is possible to pass the font size, image width and  
> height with the request as well
> +            Color backgroundColor = Color.gray;
> +            Color borderColor = Color.DARK_GRAY;
> +            Color textColor = Color.ORANGE;
> +            Color circleColor = new Color(160, 160, 160);
> +            Font textFont = new Font("Arial", Font.PLAIN,  
> paramInt(request, "fontSize", 22));
> +            int charsToPrint = 6;
> +            int width = paramInt(request, "width", 149);
> +            int height = paramInt(request, "height", 40);
> +            int circlesToDraw = 6;
> +            float horizMargin = 20.0f;
> +            double rotationRange = 0.7; // in radians
> +            BufferedImage bufferedImage = new BufferedImage(width,  
> height, BufferedImage.TYPE_INT_RGB);
> +
> +            Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
> +
> +            g.setColor(backgroundColor);
> +            g.fillRect(0, 0, width, height);
> +
> +            //Generating some circles for background noise
> +            g.setColor(circleColor);
> +            for (int i = 0; i < circlesToDraw; i++) {
> +                int circleRadius = (int) (Math.random() * height /  
> 2.0);
> +                int circleX = (int) (Math.random() * width -  
> circleRadius);
> +                int circleY = (int) (Math.random() * height -  
> circleRadius);
> +                g.drawOval(circleX, circleY, circleRadius * 2,  
> circleRadius * 2);
> +            }
> +            g.setColor(textColor);
> +            g.setFont(textFont);
> +
> +            FontMetrics fontMetrics = g.getFontMetrics();
> +            int maxAdvance = fontMetrics.getMaxAdvance();
> +            int fontHeight = fontMetrics.getHeight();
> +
> +            //We are not using certain characters, which might  
> confuse users
> +            String characterToShow = ID_KEY;
> +            float spaceForLetters = -horizMargin * 2 + width;
> +            float spacePerChar = spaceForLetters / (charsToPrint -  
> 1.0f);
> +
> +            for (int i = 0; i < characterToShow.length(); i++) {
> +
> +                // this is a separate canvas used for the character  
> so that
> +                // we can rotate it independently
> +                int charWidth =  
> fontMetrics.charWidth(characterToShow.charAt(i));
> +                int charDim = Math.max(maxAdvance, fontHeight);
> +                int halfCharDim = (int) (charDim / 2);
> +
> +                BufferedImage charImage =
> +                        new BufferedImage(charDim, charDim,  
> BufferedImage.TYPE_INT_ARGB);
> +                Graphics2D charGraphics = charImage.createGraphics();
> +                charGraphics.translate(halfCharDim, halfCharDim);
> +                double angle = (Math.random() - 0.5) * rotationRange;
> +                 
> charGraphics.transform(AffineTransform.getRotateInstance(angle));
> +                charGraphics.translate(-halfCharDim, -halfCharDim);
> +                charGraphics.setColor(textColor);
> +                charGraphics.setFont(textFont);
> +
> +                int charX = (int) (0.5 * charDim - 0.5 * charWidth);
> +                charGraphics.drawString("" +  
> characterToShow.charAt(i), charX,
> +                        (int) ((charDim -  
> fontMetrics.getAscent()) / 2 + fontMetrics.getAscent()));
> +
> +                float x = horizMargin + spacePerChar * (i) -  
> charDim / 2.0f;
> +                int y = (int) ((height - charDim) / 2);
> +
> +                g.drawImage(charImage, (int) x, y, charDim,  
> charDim, null, null);
> +
> +                charGraphics.dispose();
> +            }
> +            // Drawing the image border
> +            g.setColor(borderColor);
> +            g.drawRect(0, 0, width - 1, height - 1);
> +            g.dispose();
> +            Captcha.writeImage(bufferedImage, "captchaImage.png");
> +
> +        } catch (Exception ioe) {
> +            return false;
> +        }
> +    //Adding this because we called response.getOutputStream()  
> above. This will prevent and illegal state exception being thrown
> +        return true;
> +    }
> +
> +	public static void writeImage(BufferedImage image, String fileName)
> +	{
> +		if (fileName == null) return;
> +		int offset = fileName.lastIndexOf( "." );
> +		String type = offset == -1 ? "png" : fileName.substring(offset +  
> 1);
> +		String path;
> +		try {
> +			path = new java.io.File(".").getCanonicalPath();
> +			path += "/framework/images/webapp/images/";
> +			path += fileName;
> +			System.out.println("\n\nPath =  "+path+"\n");
> +			System.out.println("Captcha Key =  "+ID_KEY+"\n\n");
> +			ImageIO.write(image, type, new File( path ));
> +		} catch (IOException e) {
> +			return;
> +		}
> +	}
> +
> +    public static String paramString(HttpServletRequest request,  
> String paramName,
> +            String defaultString) {
> +        return request.getParameter(paramName) != null ?  
> request.getParameter(paramName) : defaultString;
> +    }
> +
> +    public static int paramInt(HttpServletRequest request, String  
> paramName, int defaultInt) {
> +        return request.getParameter(paramName) != null ?  
> Integer.parseInt(request.getParameter(paramName)) : defaultInt;
> +    }
> +}
> \ No newline at end of file
>
> Propchange: ofbiz/trunk/framework/common/src/org/ofbiz/common/ 
> Captcha.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange: ofbiz/trunk/framework/common/src/org/ofbiz/common/ 
> Captcha.java
> ------------------------------------------------------------------------------
>    svn:keywords = "Date Rev Author URL Id"
>
> Propchange: ofbiz/trunk/framework/common/src/org/ofbiz/common/ 
> Captcha.java
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Modified: ofbiz/trunk/framework/common/widget/CommonMenus.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/widget/CommonMenus.xml?rev=735965&r1=735964&r2=735965&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/framework/common/widget/CommonMenus.xml (original)
> +++ ofbiz/trunk/framework/common/widget/CommonMenus.xml Tue Jan 20  
> 00:30:41 2009
> @@ -31,7 +31,7 @@
>          </menu-item>
>          <menu-item name="Login" title="${uiLabelMap.CommonLogin}"  
> align-style="opposed">
>              <condition><if-empty field-name="userLogin"/></condition>
> -             <link target="${checkLoginUrl}"/>
> +             <link target="logout"/>
>          </menu-item>
>      </menu>
>
>
> Modified: ofbiz/trunk/specialpurpose/myportal/config/ 
> MyPortalUiLabels.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/config/MyPortalUiLabels.xml?rev=735965&r1=735964&r2=735965&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/specialpurpose/myportal/config/MyPortalUiLabels.xml  
> (original)
> +++ ofbiz/trunk/specialpurpose/myportal/config/MyPortalUiLabels.xml  
> Tue Jan 20 00:30:41 2009
> @@ -18,6 +18,18 @@
>     under the License.
> -->
> <resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> +    <property key="CaptchaMissingError">
> +        <value xml:lang="en">Verify code captcha is missing or  
> wrong</value>
> +        <value xml:lang="th">รหัสตัวเลขที่ 
> ท่านกรอกมีข้อผิดพลาด</value>
> +    </property>
> +    <property key="FirstName_Missing">
> +        <value xml:lang="en">Your firstName is missing</value>
> +        <value xml:lang="th">กรุณากรอกชื่อ 
> ของท่าน</value>
> +    </property>
> +    <property key="LastName_Missing">
> +        <value xml:lang="en">Your lastname is missing</value>
> +        <value xml:lang="th">กรุณากรอก 
> นามสกุลของท่าน</value>
> +    </property>
>     <property key="MyPortalDashboard">
>         <value xml:lang="en">My Portal</value>
>         <value xml:lang="fr">Mon portail</value>
> @@ -30,6 +42,10 @@
>         <value xml:lang="it">Invia email ad ogni cliente per le  
> modifiche sulla richiesta</value>
>         <value xml:lang="th">ส่งอีเมล์ถึง 
> ลูกค้าที่เปลี่ยนความ 
> ต้องการ</value>
>     </property>
> +    <property key="NewRegistration">
> +        <value xml:lang="en">New Registration </value>
> +        <value xml:lang="th">ลงทะเบียน </value>
> +    </property>
>     <property key="PageTitleMyPortal">
>         <value xml:lang="en">My Portal for : </value>
>         <value xml:lang="it">Mio portale per : </value>
> @@ -41,4 +57,24 @@
>         <value xml:lang="it">Pagina mio portale</value>
>         <value xml:lang="th">หน้าส่วนตัว 
> ของฉัน</value>
>     </property>
> +    <property key="PicCaptcha">
> +        <value xml:lang="en">Code Captcha</value>
> +        <value xml:lang="th">รหัสตรวจสอบ</ 
> value>
> +    </property>
> +    <property key="RegisterComplete">
> +        <value xml:lang="en">Register of new person is  
> complete...Please </value>
> +        <value xml:lang="th">การลงทะเบียน 
> ใหม่สำหรับบุคคลได้ทำการ 
> เสร็จสิ้นสมบูรณ์ 
> แล้ว...สามารถเข้าสู่ระบบ 
> ได้ </value>
> +    </property>
> +    <property key="RegisterForCustomer">
> +        <value xml:lang="en">Register for customer</value>
> +        <value xml:lang="th">ลงทะเบียน 
> สำหรับลูกค้า</value>
> +    </property>
> +    <property key="VerifyCaptcha">
> +        <value xml:lang="en">Verify captcha code</value>
> +        <value xml:lang="th">ใส่รหัสตาม 
> รูป</value>
> +    </property>
> +    <property key="UserLogin">
> +        <value xml:lang="en">User Login</value>
> +        <value xml:lang="th">ข้อมูลการลง 
> ทะเบียน</value>
> +    </property>
> </resource>
>
> Modified: ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/ 
> myportal/Events.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/myportal/Events.xml?rev=735965&r1=735964&r2=735965&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/myportal/ 
> Events.xml (original)
> +++ ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/myportal/ 
> Events.xml Tue Jan 20 00:30:41 2009
> @@ -312,4 +312,87 @@
>             request-name="communicationEventTypeId"/>
>         <field-to-request field="communicationEventId" request- 
> name="communicationEventId"/>
>     </simple-method>
> +
> +    <simple-method method-name="createRegister"
> +        short-description="Create person when new register" login- 
> required="false">
> +        <if-empty field="parameters.firstName"><property-to-field  
> field="errorMessage" resource="MyPortalUiLabels"  
> property="FirstName_Missing"/><field-to-list field="errorMessage"  
> list="error_list"/></if-empty>
> +        <if-empty field="parameters.lastName"><property-to-field  
> field="errorMessage" resource="MyPortalUiLabels"  
> property="LastName_Missing"/><field-to-list field="errorMessage"  
> list="error_list"/></if-empty>
> +        <if-empty field="parameters.USERNAME"><property-to-field  
> field="errorMessage" resource="PartyUiLabels"  
> property="PartyUserNameMissing"/><field-to-list field="errorMessage"  
> list="error_list"/></if-empty>
> +        <if-empty field="parameters.PASSWORD"><property-to-field  
> field="errorMessage" resource="PartyUiLabels"  
> property="PartyPasswordMissing"/><field-to-list field="errorMessage"  
> list="error_list"/></if-empty>
> +        <call-bsh><![CDATA[
> +             
> parameters.put("captchaCode",org.ofbiz.common.Captcha.ID_KEY);
> +        ]]></call-bsh>
> +        <call-object-method obj-field="PASSWORD" obj-map- 
> name="parameters" method-name="toLowerCase" ret-field="PASSWORD" ret- 
> map-name="parameters"/>
> +        <call-object-method obj-field="CONFIRM_PASSWORD" obj-map- 
> name="parameters" method-name="toLowerCase" ret- 
> field="CONFIRM_PASSWORD" ret-map-name="parameters"/>
> +        <if-compare field="parameters.PASSWORD" value="$ 
> {parameters.CONFIRM_PASSWORD}" operator="equals">
> +            <call-object-method obj-field="captcha" obj-map- 
> name="parameters" method-name="toLowerCase" ret-field="captcha" ret- 
> map-name="parameters"/>
> +            <call-object-method obj-field="captchaCode" obj-map- 
> name="parameters" method-name="toLowerCase" ret-field="captchaCode"  
> ret-map-name="parameters"/>
> +            <if-compare field="parameters.captcha" value="$ 
> {parameters.captchaCode}" operator="equals">
> +
> +                <!-- Create Person -->
> +                <set field="parameters.statusId"  
> value="PARTY_ENABLED"/>
> +                <make-value entity-name="Party" value- 
> field="newEntity"/>
> +                <set-pk-fields map="parameters" value- 
> field="newEntity"/>
> +                <make-next-seq-id value-field="newEntity" seq-field- 
> name="partyId"/>
> +                <set field="newEntity.partyTypeId" value="PERSON"/>
> +                <set-nonpk-fields map="parameters" value- 
> field="newEntity"/>
> +                <create-value value-field="newEntity"/>
> +
> +                <make-value entity-name="PartyStatus" value- 
> field="newEntity2"/>
> +                <set field="newEntity2.partyId" from- 
> field="newEntity.partyId"/>
> +                <set field="newEntity2.statusId" from- 
> field="newEntity.statusId"/>
> +                <set field="newEntity2.statusDate" from- 
> field="newEntity.createdStamp"/>
> +                <create-value value-field="newEntity2"/>
> +
> +                <make-value entity-name="Person" value- 
> field="newEntity3"/>
> +                <set field="newEntity3.partyId" from- 
> field="newEntity.partyId"/>
> +                <set-nonpk-fields map="parameters" value- 
> field="newEntity3"/>
> +                <create-value value-field="newEntity3"/>
> +
> +                <!-- Create the UserLogin Record -->
> +                <call-map-processor in-map-name="parameters" out- 
> map-name="userLoginContext">
> +                    <simple-map-processor name="newUserLogin">
> +                        <process field="USERNAME"><copy to- 
> field="userLoginId"/></process>
> +                        <process field="PASSWORD"><copy to- 
> field="currentPassword"/></process>
> +                        <process field="CONFIRM_PASSWORD"><copy to- 
> field="currentPasswordVerify"/></process>
> +                        <process field="PASSWORD_HINT"><copy to- 
> field="passwordHint"/></process>
> +                    </simple-map-processor>
> +                </call-map-processor>
> +                <set field="userLoginExistsMap.userLoginId"  from- 
> field="userLoginContext.userLoginId" />
> +                <find-by-primary-key entity-name="UserLogin"  
> map="userLoginExistsMap" value-field="existingUserLogin"/>
> +                <if-not-empty field="existingUserLogin">
> +                    <set field="errorMessage" value="Username in  
> use, please choose another." />
> +                    <field-to-list field="errorMessage"  
> list="error_list"/>
> +                    <check-errors error-list-name="error_list"  
> error-code="resultPage"/>
> +                    <else>
> +                        <make-value entity-name="UserLogin" value- 
> field="newUserLogin"/>
> +                        <set field="newUserLogin.userLoginId" from- 
> field="userLoginContext.userLoginId"/>
> +                        <set field="newUserLogin.currentPassword"  
> from-field="userLoginContext.currentPassword" />
> +                        <set field="newUserLogin.passwordHint" from- 
> field="userLoginContext.passwordHint" />
> +                        <!-- Check the password, etc for validity -->
> +                        <call-bsh><![CDATA[
> +                            String password = (String)  
> userLoginContext.get("currentPassword");
> +                            String confirmPassword = (String)  
> userLoginContext.get("currentPasswordVerify");
> +                            String passwordHint = (String)  
> userLoginContext.get("passwordHint");
> +                             
> org.ofbiz.common.login.LoginServices.checkNewPassword(newUserLogin,  
> null, password, confirmPassword, passwordHint, error_list, true,  
> locale);
> +                            boolean useEncryption =  
> "true 
> ".equals 
> (org.ofbiz.base.util.UtilProperties.getPropertyValue("security",  
> "password.encrypt"));
> +                            if (useEncryption)  
> { newUserLogin.set("currentPassword",  
> org.ofbiz.base.crypto.HashCrypt.getDigestHash((String)  
> newUserLogin.get("currentPassword"))); }
> +                            ]]></call-bsh>
> +                        <set field="newUserLogin.partyId" from- 
> field="newEntity.partyId" />
> +                        <create-value value-field="newUserLogin"/>
> +                    </else>
> +                </if-not-empty>
> +                <set field="partyId" from-field="newEntity.partyId"/>
> +                <field-to-request field="partyId" request- 
> name="partyId"/>
> +                <return response-code="resultPage"/>
> +                <else>
> +                    <property-to-field field="errorMessage"  
> resource="MyPortalUiLabels" property="CaptchaMissingError"/><field- 
> to-list field="errorMessage" list="error_list"/>
> +                </else>
> +            </if-compare>
> +            <else>
> +                <property-to-field field="errorMessage"  
> resource="PartyUiLabels" property="PartyPasswordMatchError"/><field- 
> to-list field="errorMessage" list="error_list"/>
> +            </else>
> +        </if-compare>
> +        <check-errors error-list-name="error_list" error- 
> code="resultPage"/>
> +    </simple-method>
> </simple-methods>
>
> Modified: ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB- 
> INF/controller.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB-INF/controller.xml?rev=735965&r1=735964&r2=735965&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB-INF/ 
> controller.xml (original)
> +++ ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB-INF/ 
> controller.xml Tue Jan 20 00:30:41 2009
> @@ -31,6 +31,23 @@
>         <security https="true" auth="true"/>
>         <response name="success" type="view" value="main"/>
>     </request-map>
> +    <request-map uri="login">
> +        <security https="true" auth="false"/>
> +        <event type="java"  
> path="org.ofbiz.securityext.login.LoginEvents" invoke="storeLogin"/>
> +        <response name="success" type="view" value="main"/>
> +        <response name="requirePasswordChange" type="view"  
> value="requirePasswordChange"/>
> +        <response name="error" type="view" value="login"/>
> +    </request-map>
> +    <request-map uri="newRegisterLogin">
> +        <security https="true" auth="false"/>
> +        <event type="java" invoke="getCodeCaptcha"  
> path="org.ofbiz.common.Captcha"/>
> +        <response name="success" type="view"  
> value="newRegisterLogin"/>
> +    </request-map>
> +    <request-map uri="createRegister">
> +        <security https="true" auth="false"/>
> +        <event type="simple" invoke="createRegister" path="org/ 
> ofbiz/myportal/Events.xml"/>
> +        <response name="resultPage" type="url"  
> value="newRegisterLogin"/>
> +    </request-map>
>
>     <!-- TIMESHEET -->
>     <request-map uri="myTimesheet">
> @@ -270,6 +287,8 @@
>     </request-map>
>
>     <view-map name="main" type="screen" page="component://myportal/ 
> widget/CommonScreens.xml#main"/>
> +    <view-map name="login" type="screen" page="component://myportal/ 
> widget/CommonScreens.xml#login"/>
> +    <view-map name="newRegisterLogin" type="screen"  
> page="component://myportal/widget/ 
> CommonScreens.xml#newRegisterLogin"/>
>     <view-map name="myTasks" type="screen" page="component:// 
> myportal/widget/CommonScreens.xml#MyTasks"/>
>     <view-map name="myCommunications" type="screen"  
> page="component://myportal/widget/ 
> CommonScreens.xml#MyCommunications"/>
>     <view-map name="otherCommunications" type="screen"  
> page="component://myportal/widget/ 
> CommonScreens.xml#OtherCommunications"/>
>
> Modified: ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml?rev=735965&r1=735964&r2=735965&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml  
> (original)
> +++ ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml Tue  
> Jan 20 00:30:41 2009
> @@ -164,6 +164,66 @@
>             </widgets>
>         </section>
>     </screen>
> +
> +    <screen name="login">
> +        <section>
> +            <widgets>
> +                <decorator-screen name="main-decorator" location="$ 
> {parameters.mainDecoratorLocation}">
> +                    <decorator-section name="body">
> +                        <platform-specific>
> +                            <html><html-template  
> location="component://myportal/widget/login.ftl"/></html>
> +                        </platform-specific>
> +                    </decorator-section>
> +                </decorator-screen>
> +            </widgets>
> +        </section>
> +    </screen>
> +
> +    <!--New Register Person-->
> +    <screen name="newRegisterLogin">
> +        <section>
> +            <actions>
> +                <set field="partyId" from- 
> field="parameters.partyId"/>
> +                <entity-one entity-name="PartyAndPerson" value- 
> name="personInfo"/>
> +            </actions>
> +            <widgets>
> +                <decorator-screen name="main-decorator" location="$ 
> {parameters.mainDecoratorLocation}">
> +                    <decorator-section name="body">
> +                        <section>
> +                            <condition>
> +                                <not><if-empty field- 
> name="parameters.partyId"/></not>
> +                            </condition>
> +                            <actions>
> +                                <set field="partyId" from- 
> field="parameters.partyId"/>
> +                                <script location="component://party/ 
> webapp/partymgr/WEB-INF/actions/party/ViewProfile.groovy"/>
> +                            </actions>
> +                            <widgets>
> +                                <label style="h2" text="$ 
> {uiLabelMap.RegisterComplete}"/><link target="main" style="h2"  
> text="${uiLabelMap.CommonBeLogged}"></link>
> +                                <label style="h2"  
> text="&lt;br&gt;&lt;br&gt;"/>
> +                                <include-screen name="Party"  
> location="component://party/widget/partymgr/ProfileScreens.xml"/>
> +                            </widgets>
> +                            <fail-widgets>
> +                                <container style="screenlet">
> +                                    <container style="screenlet- 
> title-bar">
> +                                        <container style="h3">
> +                                            <label text="$ 
> {uiLabelMap.NewRegistration}"/>
> +                                        </container>
> +                                    </container>
> +                                    <container style="screenlet- 
> body">
> +                                        <section>
> +                                            <widgets>
> +                                                <include-form  
> name="RegisterPerson" location="component://myportal/widget/ 
> MyPortalForms.xml"/>
> +                                            </widgets>
> +                                        </section>
> +                                    </container>
> +                                </container>
> +                            </fail-widgets>
> +                        </section>
> +                    </decorator-section>
> +                </decorator-screen>
> +            </widgets>
> +        </section>
> +    </screen>
>
>     <screen name="CommonRequestDecorator">
>         <section>
>
> Modified: ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml?rev=735965&r1=735964&r2=735965&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml  
> (original)
> +++ ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml Tue  
> Jan 20 00:30:41 2009
> @@ -276,4 +276,75 @@
>         <field name="task"><display description="${workEffortName}"/ 
> ></field>
>     </form>
>
> +    <!--New Register Person-->
> +    <form name="RegisterPerson" type="single"  
> target="createRegister" default-map-name="personInfo"
> +        focus-field-name="salutation" header-row-style="header-row"  
> default-table-style="basic-table">
> +        <auto-fields-service service-name="updatePerson"/>
> +        <field use-when="personInfo!=null" name="partyId" title="$ 
> {uiLabelMap.PartyPartyId}" tooltip="$ 
> {uiLabelMap.CommonNotModifRecreat}"><display/></field>
> +        <field use-when="personInfo==null&amp;&amp;partyId==null"  
> name="partyId" title="${uiLabelMap.PartyPartyId}"><ignored/></field>
> +        <field use-when="personInfo==null&amp;&amp;partyId!=null"  
> name="partyId" title="${uiLabelMap.PartyPartyId}" tooltip="$ 
> {uiLabelMap.CommonCannotBeFound}: [${partyId}]"><display also- 
> hidden="false"/></field>
> +        <field name="firstName" title="$ 
> {uiLabelMap.PartyFirstName}" tooltip="${uiLabelMap.CommonRequired}"  
> widget-style="required"><text size="40" maxlength="60"/></field>
> +        <field name="lastName" title="${uiLabelMap.PartyLastName}"  
> tooltip="${uiLabelMap.CommonRequired}" widget-style="required"><text  
> size="40" maxlength="60"/></field>
> +        <field name="gender">
> +            <drop-down allow-empty="true">
> +                <option key="M" description="$ 
> {uiLabelMap.CommonMale}"/>
> +                <option key="F" description="$ 
> {uiLabelMap.CommonFemale}"/>
> +            </drop-down>
> +        </field>
> +        <field name="maritalStatus">
> +            <drop-down allow-empty="true">
> +                <option key="S" description="$ 
> {uiLabelMap.PartyMaritalStatusSingle}"/>
> +                <option key="M" description="$ 
> {uiLabelMap.PartyMaritalStatusMarried}"/>
> +                <option key="P" description="$ 
> {uiLabelMap.PartyMaritalStatusSeparated}"/>
> +                <option key="D" description="$ 
> {uiLabelMap.PartyMaritalStatusDivorced}"/>
> +                <option key="W" description="$ 
> {uiLabelMap.PartyMaritalStatusWidowed}"/>
> +            </drop-down>
> +        </field>
> +        <field name="employmentStatusEnumId">
> +            <drop-down allow-empty="true">
> +                <entity-options entity-name="Enumeration" key-field- 
> name="enumId" description="${description} [${enumCode}]">
> +                    <entity-constraint name="enumTypeId"  
> value="EMPLOY_STTS"/>
> +                    <entity-order-by field-name="sequenceId"/>
> +                </entity-options>
> +            </drop-down>
> +        </field>
> +        <field name="residenceStatusEnumId">
> +            <drop-down allow-empty="true">
> +                <entity-options entity-name="Enumeration" key-field- 
> name="enumId" description="${description} [${enumCode}]">
> +                    <entity-constraint name="enumTypeId"  
> value="PTY_RESID_STTS"/>
> +                    <entity-order-by field-name="sequenceId"/>
> +                </entity-options>
> +            </drop-down>
> +        </field>
> +        <field name="existingCustomer">
> +            <drop-down allow-empty="true"><option key="Y"  
> description="${uiLabelMap.CommonY}"/><option key="N" description="$ 
> {uiLabelMap.CommonN}"/></drop-down>
> +        </field>
> +        <field name="preferredCurrencyUomId">
> +            <drop-down allow-empty="true">
> +                <entity-options key-field-name="uomId"  
> description="${abbreviation} - ${description}" entity-name="Uom">
> +                    <entity-constraint name="uomTypeId"  
> operator="equals" value="CURRENCY_MEASURE"/>
> +                    <entity-order-by field-name="abbreviation"/>
> +                </entity-options>
> +            </drop-down>
> +        </field>
> +        <field name="statusId" use-when="person==null"><hidden/></ 
> field>
> +        <field name="statusId" use-when="person!=null">
> +            <drop-down allow-empty="false">
> +                <entity-options description="${description}" entity- 
> name="StatusItem">
> +                    <entity-constraint name="statusTypeId"  
> value="PARTY_STATUS"/>
> +                    <entity-order-by field-name="sequenceId"/>
> +                </entity-options>
> +            </drop-down>
> +        </field>
> +        <field name="UserLogin" title="${uiLabelMap.UserLogin}"  
> title-area-style="group-label"><display description=" " also- 
> hidden="false"/></field>
> +        <field name="USERNAME" title="${uiLabelMap.CommonUsername}"  
> tooltip="${uiLabelMap.CommonRequired}" widget-style="required"><text  
> size="30" maxlength="250"/></field>
> +        <field name="PASSWORD" title="${uiLabelMap.CommonPassword}"  
> tooltip="${uiLabelMap.CommonRequired}" widget- 
> style="required"><password size="15" maxlength="250"/></field>
> +        <field name="CONFIRM_PASSWORD" title="$ 
> {uiLabelMap.CommonPassword}" tooltip="* ${uiLabelMap.CommonConfirm}"  
> widget-style="required"><password size="15" maxlength="250"/></field>
> +        <field name="VerifyCaptchaTitle" title="$ 
> {uiLabelMap.VerifyCaptcha}" title-area-style="group-label"><display  
> description=" " also-hidden="false"/></field>
> +        <field name="picOfcaptcha" title="$ 
> {uiLabelMap.PicCaptcha}"><image value="/images/captchaImage.png"></ 
> image></field>
> +        <field name="reload" title=" "><image value="/images/feed- 
> icon-14x14.png"><sub-hyperlink target="newRegisterLogin"  
> description="reload image"/></image></field>
> +        <field name="captcha" title="${uiLabelMap.VerifyCaptcha}"  
> tooltip="${uiLabelMap.CommonRequired}" widget-style="required"><text  
> size="23" maxlength="30"/></field>
> +        <field name="submitButton" title="${uiLabelMap.CommonSave}"  
> title-area-style="group-label"><submit button-type="button"/></field>
> +    </form>
> +
> </forms>
>
> Added: ofbiz/trunk/specialpurpose/myportal/widget/login.ftl
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/widget/login.ftl?rev=735965&view=auto
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/specialpurpose/myportal/widget/login.ftl (added)
> +++ ofbiz/trunk/specialpurpose/myportal/widget/login.ftl Tue Jan 20  
> 00:30:41 2009
> @@ -0,0 +1,73 @@
> +<#--
> +Licensed to the Apache Software Foundation (ASF) under one
> +or more contributor license agreements.  See the NOTICE file
> +distributed with this work for additional information
> +regarding copyright ownership.  The ASF licenses this file
> +to you under the Apache License, Version 2.0 (the
> +"License"); you may not use this file except in compliance
> +with the License.  You may obtain a copy of the License at
> +
> +http://www.apache.org/licenses/LICENSE-2.0
> +
> +Unless required by applicable law or agreed to in writing,
> +software distributed under the License is distributed on an
> +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> +KIND, either express or implied.  See the License for the
> +specific language governing permissions and limitations
> +under the License.
> +-->
> +
> +<#if requestAttributes.uiLabelMap?exists><#assign uiLabelMap =  
> requestAttributes.uiLabelMap></#if>
> +
> +<#assign previousParams = sessionAttributes._PREVIOUS_PARAMS_? 
> if_exists>
> +<#if previousParams?has_content>
> +  <#assign previousParams = "?" + previousParams>
> +</#if>
> +
> +<#assign username = requestParameters.USERNAME? 
> default((sessionAttributes.autoUserLogin.userLoginId)?default(""))>
> +<#if username != "">
> +  <#assign focusName = false>
> +<#else>
> +  <#assign focusName = true>
> +</#if>
> +
> +<center>
> +  <div class="screenlet login-screenlet" style="width: 22%; margin- 
> left: 5px; text-align: center;">
> +    <div class="screenlet-title-bar">
> +      <h3>${uiLabelMap.CommonRegistered}</h3>
> +    </div>
> +    <div class="screenlet-body">
> +      <form method="post" action="<@ofbizUrl>login${previousParams? 
> if_exists}</...@ofbizUrl>" name="loginform">
> +        <table class="basic-table" cellspacing="0">
> +          <tr>
> +            <td class="label" style="width: 31%;">$ 
> {uiLabelMap.CommonUsername}</td>
> +            <td><input type="text" name="USERNAME" value="$ 
> {username}" size="20"/></td>
> +          </tr>
> +          <tr>
> +            <td class="label">${uiLabelMap.CommonPassword}</td>
> +            <td><input type="password" name="PASSWORD" value=""  
> size="20"/></td>
> +          </tr>
> +          <tr>
> +            <td colspan="2" align="center">
> +              <input type="submit" value="$ 
> {uiLabelMap.CommonLogin}"/>
> +            </td>
> +          </tr>
> +        </table>
> +        <input type="hidden" name="JavaScriptEnabled" value="N"/>
> +        <br/>
> +        <a href="<@ofbizUrl>forgotPassword${previousParams? 
> if_exists}</...@ofbizUrl>">${uiLabelMap.CommonForgotYourPassword}?</a>
> +        <br/>
> +        <a href="<@ofbizUrl>newRegisterLogin${previousParams? 
> if_exists}</...@ofbizUrl>">${uiLabelMap.NewRegistration}</a>
> +      </form>
> +    </div>
> +  </div>
> +</center>
> +
> +<script language="JavaScript" type="text/javascript">
> +  document.loginform.JavaScriptEnabled.value = "Y";
> +  <#if focusName>
> +    document.loginform.USERNAME.focus();
> +  <#else>
> +    document.loginform.PASSWORD.focus();
> +  </#if>
> +</script>
> \ No newline at end of file
>
> Propchange: ofbiz/trunk/specialpurpose/myportal/widget/login.ftl
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange: ofbiz/trunk/specialpurpose/myportal/widget/login.ftl
> ------------------------------------------------------------------------------
>    svn:keywords = "Date Rev Author URL Id"
>
> Propchange: ofbiz/trunk/specialpurpose/myportal/widget/login.ftl
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
>


Re: svn commit: r735965 - in /ofbiz/trunk: framework/common/src/org/ofbiz/common/ framework/common/widget/ specialpurpose/myportal/config/ specialpurpose/myportal/script/org/ofbiz/myportal/ specialpurpose/myportal/webapp/myportal/WEB-INF/ specialpurpose/my

Posted by Jacques Le Roux <ja...@les7arts.com>.
+1

Jacques

From: <ri...@gmail.com>
> Hi Hans,
>
> I suggest to use the prefix MyPortal for those type of labels, I spent  a lot of days to cleanup all the wasted labels into OFBiz 
> and I think  we cannot all use different standard to codify the labels.
> And if it's possible do not use the underscore character in the labels  name could be more readable.
>
> In my opinion for example CaptchaMissingError could be  MyPortalCaptchaMissingError or something similar to that.
>
> If we do not follow this simple rule in two or three months the labels  will be completed wasted again.
>
> What others thinks about that ?
>
> Thanks
> Marco
>
> Il giorno 20/gen/09, alle ore 09:30, hansbak@apache.org ha scritto:
>
>> Author: hansbak
>> Date: Tue Jan 20 00:30:41 2009
>> New Revision: 735965
>>
>> URL: http://svn.apache.org/viewvc?rev=735965&view=rev
>> Log:
>> first version of captcha, not perfect yet: multiple users  registering at the same time, image should be stored in 'runtime'  not 
>> working on windows. Another problem is what files to put  where.....the captcha itself looks like a framework  feature...however 
>> the registration process needs the party  component....so let us know, we will correct it....
>>
>> Added:
>>    ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java    (with props)
>>    ofbiz/trunk/specialpurpose/myportal/widget/login.ftl   (with props)
>> Modified:
>>    ofbiz/trunk/framework/common/widget/CommonMenus.xml
>>    ofbiz/trunk/specialpurpose/myportal/config/MyPortalUiLabels.xml
>>    ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/myportal/ Events.xml
>>    ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB-INF/ controller.xml
>>    ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml
>>    ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml
>>
>> Added: ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java?rev=735965&view=auto
>> = = = = = = = = ======================================================================
>> --- ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java  (added)
>> +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/Captcha.java  Tue Jan 20 00:30:41 2009
>> @@ -0,0 +1,163 @@
>> +/ *******************************************************************************
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements.  See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership.  The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License.  You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied.  See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> +  *******************************************************************************/
>> +
>> +// copied from : http://cocoon.apache.org/2.2/blocks/captcha/1.0/1436_1_1.html
>> +
>> +package org.ofbiz.common;
>> +
>> +import javax.imageio.ImageIO;
>> +import javax.servlet.http.HttpServletRequest;
>> +import javax.servlet.http.HttpServletResponse;
>> +import java.awt.*;
>> +import java.awt.geom.AffineTransform;
>> +import java.awt.image.BufferedImage;
>> +import java.io.File;
>> +import java.io.IOException;
>> +
>> +public class Captcha {
>> +
>> +    public static String ID_KEY = null;
>> +
>> +    public static String getCodeCaptcha(HttpServletRequest  request,HttpServletResponse response) {
>> +    StringBuffer finalString = new StringBuffer();
>> +        String elegibleChars =  "ABCDEFGHJKLMPQRSTUVWXYabcdefhjkmnpqrstuvwxy23456789";
>> +        int charsToPrint = 6;
>> +        char[] chars = elegibleChars.toCharArray();
>> +
>> +        for (int i = 0; i < charsToPrint; i++) {
>> +            double randomValue = Math.random();
>> +            int randomIndex = (int) Math.round(randomValue *  (chars.length - 1));
>> +            char characterToShow = chars[randomIndex];
>> +            finalString.append(characterToShow);
>> +        }
>> +        ID_KEY = finalString.toString();
>> +        if(createImageCaptcha (request,response)) return "success";
>> +        return "error";
>> +    }
>> +
>> +    public static boolean createImageCaptcha (HttpServletRequest  request,HttpServletResponse response) {
>> +        try {        +            //It is possible to pass the font size, image width and  height with the request as well
>> +            Color backgroundColor = Color.gray;
>> +            Color borderColor = Color.DARK_GRAY;
>> +            Color textColor = Color.ORANGE;
>> +            Color circleColor = new Color(160, 160, 160);
>> +            Font textFont = new Font("Arial", Font.PLAIN,  paramInt(request, "fontSize", 22));
>> +            int charsToPrint = 6;
>> +            int width = paramInt(request, "width", 149);
>> +            int height = paramInt(request, "height", 40);
>> +            int circlesToDraw = 6;
>> +            float horizMargin = 20.0f;
>> +            double rotationRange = 0.7; // in radians
>> +            BufferedImage bufferedImage = new BufferedImage(width,  height, BufferedImage.TYPE_INT_RGB);
>> +
>> +            Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
>> +
>> +            g.setColor(backgroundColor);
>> +            g.fillRect(0, 0, width, height);
>> +
>> +            //Generating some circles for background noise
>> +            g.setColor(circleColor);
>> +            for (int i = 0; i < circlesToDraw; i++) {
>> +                int circleRadius = (int) (Math.random() * height /  2.0);
>> +                int circleX = (int) (Math.random() * width -  circleRadius);
>> +                int circleY = (int) (Math.random() * height -  circleRadius);
>> +                g.drawOval(circleX, circleY, circleRadius * 2,  circleRadius * 2);
>> +            }
>> +            g.setColor(textColor);
>> +            g.setFont(textFont);
>> +
>> +            FontMetrics fontMetrics = g.getFontMetrics();
>> +            int maxAdvance = fontMetrics.getMaxAdvance();
>> +            int fontHeight = fontMetrics.getHeight();
>> +
>> +            //We are not using certain characters, which might  confuse users
>> +            String characterToShow = ID_KEY;
>> +            float spaceForLetters = -horizMargin * 2 + width;
>> +            float spacePerChar = spaceForLetters / (charsToPrint -  1.0f);
>> +
>> +            for (int i = 0; i < characterToShow.length(); i++) {
>> +
>> +                // this is a separate canvas used for the character  so that
>> +                // we can rotate it independently
>> +                int charWidth =  fontMetrics.charWidth(characterToShow.charAt(i));
>> +                int charDim = Math.max(maxAdvance, fontHeight);
>> +                int halfCharDim = (int) (charDim / 2);
>> +
>> +                BufferedImage charImage =
>> +                        new BufferedImage(charDim, charDim,  BufferedImage.TYPE_INT_ARGB);
>> +                Graphics2D charGraphics = charImage.createGraphics();
>> +                charGraphics.translate(halfCharDim, halfCharDim);
>> +                double angle = (Math.random() - 0.5) * rotationRange;
>> +                 charGraphics.transform(AffineTransform.getRotateInstance(angle));
>> +                charGraphics.translate(-halfCharDim, -halfCharDim);
>> +                charGraphics.setColor(textColor);
>> +                charGraphics.setFont(textFont);
>> +
>> +                int charX = (int) (0.5 * charDim - 0.5 * charWidth);
>> +                charGraphics.drawString("" +  characterToShow.charAt(i), charX,
>> +                        (int) ((charDim -  fontMetrics.getAscent()) / 2 + fontMetrics.getAscent()));
>> +
>> +                float x = horizMargin + spacePerChar * (i) -  charDim / 2.0f;
>> +                int y = (int) ((height - charDim) / 2);
>> +
>> +                g.drawImage(charImage, (int) x, y, charDim,  charDim, null, null);
>> +
>> +                charGraphics.dispose();
>> +            }
>> +            // Drawing the image border
>> +            g.setColor(borderColor);
>> +            g.drawRect(0, 0, width - 1, height - 1);
>> +            g.dispose();
>> +            Captcha.writeImage(bufferedImage, "captchaImage.png");
>> +
>> +        } catch (Exception ioe) {
>> +            return false;
>> +        }
>> +    //Adding this because we called response.getOutputStream()  above. This will prevent and illegal state exception being 
>> thrown
>> +        return true;
>> +    }
>> +
>> + public static void writeImage(BufferedImage image, String fileName)
>> + {
>> + if (fileName == null) return;
>> + int offset = fileName.lastIndexOf( "." );
>> + String type = offset == -1 ? "png" : fileName.substring(offset +  1);
>> + String path;
>> + try {
>> + path = new java.io.File(".").getCanonicalPath();
>> + path += "/framework/images/webapp/images/";
>> + path += fileName;
>> + System.out.println("\n\nPath =  "+path+"\n");
>> + System.out.println("Captcha Key =  "+ID_KEY+"\n\n");
>> + ImageIO.write(image, type, new File( path ));
>> + } catch (IOException e) {
>> + return;
>> + }
>> + }
>> +
>> +    public static String paramString(HttpServletRequest request,  String paramName,
>> +            String defaultString) {
>> +        return request.getParameter(paramName) != null ?  request.getParameter(paramName) : defaultString;
>> +    }
>> +
>> +    public static int paramInt(HttpServletRequest request, String  paramName, int defaultInt) {
>> +        return request.getParameter(paramName) != null ?  Integer.parseInt(request.getParameter(paramName)) : defaultInt;
>> +    }
>> +}
>> \ No newline at end of file
>>
>> Propchange: ofbiz/trunk/framework/common/src/org/ofbiz/common/ Captcha.java
>> ------------------------------------------------------------------------------
>>    svn:eol-style = native
>>
>> Propchange: ofbiz/trunk/framework/common/src/org/ofbiz/common/ Captcha.java
>> ------------------------------------------------------------------------------
>>    svn:keywords = "Date Rev Author URL Id"
>>
>> Propchange: ofbiz/trunk/framework/common/src/org/ofbiz/common/ Captcha.java
>> ------------------------------------------------------------------------------
>>    svn:mime-type = text/plain
>>
>> Modified: ofbiz/trunk/framework/common/widget/CommonMenus.xml
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/widget/CommonMenus.xml?rev=735965&r1=735964&r2=735965&view=diff
>> = = = = = = = = ======================================================================
>> --- ofbiz/trunk/framework/common/widget/CommonMenus.xml (original)
>> +++ ofbiz/trunk/framework/common/widget/CommonMenus.xml Tue Jan 20  00:30:41 2009
>> @@ -31,7 +31,7 @@
>>          </menu-item>
>>          <menu-item name="Login" title="${uiLabelMap.CommonLogin}"  align-style="opposed">
>>              <condition><if-empty field-name="userLogin"/></condition>
>> -             <link target="${checkLoginUrl}"/>
>> +             <link target="logout"/>
>>          </menu-item>
>>      </menu>
>>
>>
>> Modified: ofbiz/trunk/specialpurpose/myportal/config/ MyPortalUiLabels.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/config/MyPortalUiLabels.xml?rev=735965&r1=735964&r2=735965&view=diff
>> = = = = = = = = ======================================================================
>> --- ofbiz/trunk/specialpurpose/myportal/config/MyPortalUiLabels.xml  (original)
>> +++ ofbiz/trunk/specialpurpose/myportal/config/MyPortalUiLabels.xml  Tue Jan 20 00:30:41 2009
>> @@ -18,6 +18,18 @@
>>     under the License.
>> -->
>> <resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>> +    <property key="CaptchaMissingError">
>> +        <value xml:lang="en">Verify code captcha is missing or  wrong</value>
>> +        <value xml:lang="th">รหัสตัวเลขที่ ท่านกรอกมีข้อผิดพลาด</value>
>> +    </property>
>> +    <property key="FirstName_Missing">
>> +        <value xml:lang="en">Your firstName is missing</value>
>> +        <value xml:lang="th">กรุณากรอกชื่อ ของท่าน</value>
>> +    </property>
>> +    <property key="LastName_Missing">
>> +        <value xml:lang="en">Your lastname is missing</value>
>> +        <value xml:lang="th">กรุณากรอก นามสกุลของท่าน</value>
>> +    </property>
>>     <property key="MyPortalDashboard">
>>         <value xml:lang="en">My Portal</value>
>>         <value xml:lang="fr">Mon portail</value>
>> @@ -30,6 +42,10 @@
>>         <value xml:lang="it">Invia email ad ogni cliente per le  modifiche sulla richiesta</value>
>>         <value xml:lang="th">ส่งอีเมล์ถึง ลูกค้าที่เปลี่ยนความ ต้องการ</value>
>>     </property>
>> +    <property key="NewRegistration">
>> +        <value xml:lang="en">New Registration </value>
>> +        <value xml:lang="th">ลงทะเบียน </value>
>> +    </property>
>>     <property key="PageTitleMyPortal">
>>         <value xml:lang="en">My Portal for : </value>
>>         <value xml:lang="it">Mio portale per : </value>
>> @@ -41,4 +57,24 @@
>>         <value xml:lang="it">Pagina mio portale</value>
>>         <value xml:lang="th">หน้าส่วนตัว ของฉัน</value>
>>     </property>
>> +    <property key="PicCaptcha">
>> +        <value xml:lang="en">Code Captcha</value>
>> +        <value xml:lang="th">รหัสตรวจสอบ</ value>
>> +    </property>
>> +    <property key="RegisterComplete">
>> +        <value xml:lang="en">Register of new person is  complete...Please </value>
>> +        <value xml:lang="th">การลงทะเบียน ใหม่สำหรับบุคคลได้ทำการ เสร็จสิ้นสมบูรณ์ แล้ว...สามารถเข้าสู่ระบบ ได้ </value>
>> +    </property>
>> +    <property key="RegisterForCustomer">
>> +        <value xml:lang="en">Register for customer</value>
>> +        <value xml:lang="th">ลงทะเบียน สำหรับลูกค้า</value>
>> +    </property>
>> +    <property key="VerifyCaptcha">
>> +        <value xml:lang="en">Verify captcha code</value>
>> +        <value xml:lang="th">ใส่รหัสตาม รูป</value>
>> +    </property>
>> +    <property key="UserLogin">
>> +        <value xml:lang="en">User Login</value>
>> +        <value xml:lang="th">ข้อมูลการลง ทะเบียน</value>
>> +    </property>
>> </resource>
>>
>> Modified: ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/ myportal/Events.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/myportal/Events.xml?rev=735965&r1=735964&r2=735965&view=diff
>> = = = = = = = = ======================================================================
>> --- ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/myportal/ Events.xml (original)
>> +++ ofbiz/trunk/specialpurpose/myportal/script/org/ofbiz/myportal/ Events.xml Tue Jan 20 00:30:41 2009
>> @@ -312,4 +312,87 @@
>>             request-name="communicationEventTypeId"/>
>>         <field-to-request field="communicationEventId" request- name="communicationEventId"/>
>>     </simple-method>
>> +
>> +    <simple-method method-name="createRegister"
>> +        short-description="Create person when new register" login- required="false">
>> +        <if-empty field="parameters.firstName"><property-to-field  field="errorMessage" resource="MyPortalUiLabels" 
>> property="FirstName_Missing"/><field-to-list field="errorMessage"  list="error_list"/></if-empty>
>> +        <if-empty field="parameters.lastName"><property-to-field  field="errorMessage" resource="MyPortalUiLabels" 
>> property="LastName_Missing"/><field-to-list field="errorMessage"  list="error_list"/></if-empty>
>> +        <if-empty field="parameters.USERNAME"><property-to-field  field="errorMessage" resource="PartyUiLabels" 
>> property="PartyUserNameMissing"/><field-to-list field="errorMessage"  list="error_list"/></if-empty>
>> +        <if-empty field="parameters.PASSWORD"><property-to-field  field="errorMessage" resource="PartyUiLabels" 
>> property="PartyPasswordMissing"/><field-to-list field="errorMessage"  list="error_list"/></if-empty>
>> +        <call-bsh><![CDATA[
>> +             parameters.put("captchaCode",org.ofbiz.common.Captcha.ID_KEY);
>> +        ]]></call-bsh>
>> +        <call-object-method obj-field="PASSWORD" obj-map- name="parameters" method-name="toLowerCase" ret-field="PASSWORD" ret- 
>> map-name="parameters"/>
>> +        <call-object-method obj-field="CONFIRM_PASSWORD" obj-map- name="parameters" method-name="toLowerCase" ret- 
>> field="CONFIRM_PASSWORD" ret-map-name="parameters"/>
>> +        <if-compare field="parameters.PASSWORD" value="$ {parameters.CONFIRM_PASSWORD}" operator="equals">
>> +            <call-object-method obj-field="captcha" obj-map- name="parameters" method-name="toLowerCase" ret-field="captcha" 
>> ret- map-name="parameters"/>
>> +            <call-object-method obj-field="captchaCode" obj-map- name="parameters" method-name="toLowerCase" 
>> ret-field="captchaCode"  ret-map-name="parameters"/>
>> +            <if-compare field="parameters.captcha" value="$ {parameters.captchaCode}" operator="equals">
>> +
>> +                <!-- Create Person -->
>> +                <set field="parameters.statusId"  value="PARTY_ENABLED"/>
>> +                <make-value entity-name="Party" value- field="newEntity"/>
>> +                <set-pk-fields map="parameters" value- field="newEntity"/>
>> +                <make-next-seq-id value-field="newEntity" seq-field- name="partyId"/>
>> +                <set field="newEntity.partyTypeId" value="PERSON"/>
>> +                <set-nonpk-fields map="parameters" value- field="newEntity"/>
>> +                <create-value value-field="newEntity"/>
>> +
>> +                <make-value entity-name="PartyStatus" value- field="newEntity2"/>
>> +                <set field="newEntity2.partyId" from- field="newEntity.partyId"/>
>> +                <set field="newEntity2.statusId" from- field="newEntity.statusId"/>
>> +                <set field="newEntity2.statusDate" from- field="newEntity.createdStamp"/>
>> +                <create-value value-field="newEntity2"/>
>> +
>> +                <make-value entity-name="Person" value- field="newEntity3"/>
>> +                <set field="newEntity3.partyId" from- field="newEntity.partyId"/>
>> +                <set-nonpk-fields map="parameters" value- field="newEntity3"/>
>> +                <create-value value-field="newEntity3"/>
>> +
>> +                <!-- Create the UserLogin Record -->
>> +                <call-map-processor in-map-name="parameters" out- map-name="userLoginContext">
>> +                    <simple-map-processor name="newUserLogin">
>> +                        <process field="USERNAME"><copy to- field="userLoginId"/></process>
>> +                        <process field="PASSWORD"><copy to- field="currentPassword"/></process>
>> +                        <process field="CONFIRM_PASSWORD"><copy to- field="currentPasswordVerify"/></process>
>> +                        <process field="PASSWORD_HINT"><copy to- field="passwordHint"/></process>
>> +                    </simple-map-processor>
>> +                </call-map-processor>
>> +                <set field="userLoginExistsMap.userLoginId"  from- field="userLoginContext.userLoginId" />
>> +                <find-by-primary-key entity-name="UserLogin"  map="userLoginExistsMap" value-field="existingUserLogin"/>
>> +                <if-not-empty field="existingUserLogin">
>> +                    <set field="errorMessage" value="Username in  use, please choose another." />
>> +                    <field-to-list field="errorMessage"  list="error_list"/>
>> +                    <check-errors error-list-name="error_list"  error-code="resultPage"/>
>> +                    <else>
>> +                        <make-value entity-name="UserLogin" value- field="newUserLogin"/>
>> +                        <set field="newUserLogin.userLoginId" from- field="userLoginContext.userLoginId"/>
>> +                        <set field="newUserLogin.currentPassword"  from-field="userLoginContext.currentPassword" />
>> +                        <set field="newUserLogin.passwordHint" from- field="userLoginContext.passwordHint" />
>> +                        <!-- Check the password, etc for validity -->
>> +                        <call-bsh><![CDATA[
>> +                            String password = (String)  userLoginContext.get("currentPassword");
>> +                            String confirmPassword = (String)  userLoginContext.get("currentPasswordVerify");
>> +                            String passwordHint = (String)  userLoginContext.get("passwordHint");
>> +                             org.ofbiz.common.login.LoginServices.checkNewPassword(newUserLogin,  null, password, 
>> confirmPassword, passwordHint, error_list, true,  locale);
>> +                            boolean useEncryption =  "true ".equals 
>> (org.ofbiz.base.util.UtilProperties.getPropertyValue("security",  "password.encrypt"));
>> +                            if (useEncryption)  { newUserLogin.set("currentPassword", 
>> org.ofbiz.base.crypto.HashCrypt.getDigestHash((String)  newUserLogin.get("currentPassword"))); }
>> +                            ]]></call-bsh>
>> +                        <set field="newUserLogin.partyId" from- field="newEntity.partyId" />
>> +                        <create-value value-field="newUserLogin"/>
>> +                    </else>
>> +                </if-not-empty>
>> +                <set field="partyId" from-field="newEntity.partyId"/>
>> +                <field-to-request field="partyId" request- name="partyId"/>
>> +                <return response-code="resultPage"/>
>> +                <else>
>> +                    <property-to-field field="errorMessage"  resource="MyPortalUiLabels" property="CaptchaMissingError"/><field- 
>> to-list field="errorMessage" list="error_list"/>
>> +                </else>
>> +            </if-compare>
>> +            <else>
>> +                <property-to-field field="errorMessage"  resource="PartyUiLabels" property="PartyPasswordMatchError"/><field- 
>> to-list field="errorMessage" list="error_list"/>
>> +            </else>
>> +        </if-compare>
>> +        <check-errors error-list-name="error_list" error- code="resultPage"/>
>> +    </simple-method>
>> </simple-methods>
>>
>> Modified: ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB- INF/controller.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB-INF/controller.xml?rev=735965&r1=735964&r2=735965&view=diff
>> = = = = = = = = ======================================================================
>> --- ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB-INF/ controller.xml (original)
>> +++ ofbiz/trunk/specialpurpose/myportal/webapp/myportal/WEB-INF/ controller.xml Tue Jan 20 00:30:41 2009
>> @@ -31,6 +31,23 @@
>>         <security https="true" auth="true"/>
>>         <response name="success" type="view" value="main"/>
>>     </request-map>
>> +    <request-map uri="login">
>> +        <security https="true" auth="false"/>
>> +        <event type="java"  path="org.ofbiz.securityext.login.LoginEvents" invoke="storeLogin"/>
>> +        <response name="success" type="view" value="main"/>
>> +        <response name="requirePasswordChange" type="view"  value="requirePasswordChange"/>
>> +        <response name="error" type="view" value="login"/>
>> +    </request-map>
>> +    <request-map uri="newRegisterLogin">
>> +        <security https="true" auth="false"/>
>> +        <event type="java" invoke="getCodeCaptcha"  path="org.ofbiz.common.Captcha"/>
>> +        <response name="success" type="view"  value="newRegisterLogin"/>
>> +    </request-map>
>> +    <request-map uri="createRegister">
>> +        <security https="true" auth="false"/>
>> +        <event type="simple" invoke="createRegister" path="org/ ofbiz/myportal/Events.xml"/>
>> +        <response name="resultPage" type="url"  value="newRegisterLogin"/>
>> +    </request-map>
>>
>>     <!-- TIMESHEET -->
>>     <request-map uri="myTimesheet">
>> @@ -270,6 +287,8 @@
>>     </request-map>
>>
>>     <view-map name="main" type="screen" page="component://myportal/ widget/CommonScreens.xml#main"/>
>> +    <view-map name="login" type="screen" page="component://myportal/ widget/CommonScreens.xml#login"/>
>> +    <view-map name="newRegisterLogin" type="screen"  page="component://myportal/widget/ CommonScreens.xml#newRegisterLogin"/>
>>     <view-map name="myTasks" type="screen" page="component:// myportal/widget/CommonScreens.xml#MyTasks"/>
>>     <view-map name="myCommunications" type="screen"  page="component://myportal/widget/ CommonScreens.xml#MyCommunications"/>
>>     <view-map name="otherCommunications" type="screen"  page="component://myportal/widget/ 
>> CommonScreens.xml#OtherCommunications"/>
>>
>> Modified: ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml?rev=735965&r1=735964&r2=735965&view=diff
>> = = = = = = = = ======================================================================
>> --- ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml  (original)
>> +++ ofbiz/trunk/specialpurpose/myportal/widget/CommonScreens.xml Tue  Jan 20 00:30:41 2009
>> @@ -164,6 +164,66 @@
>>             </widgets>
>>         </section>
>>     </screen>
>> +
>> +    <screen name="login">
>> +        <section>
>> +            <widgets>
>> +                <decorator-screen name="main-decorator" location="$ {parameters.mainDecoratorLocation}">
>> +                    <decorator-section name="body">
>> +                        <platform-specific>
>> +                            <html><html-template  location="component://myportal/widget/login.ftl"/></html>
>> +                        </platform-specific>
>> +                    </decorator-section>
>> +                </decorator-screen>
>> +            </widgets>
>> +        </section>
>> +    </screen>
>> +
>> +    <!--New Register Person-->
>> +    <screen name="newRegisterLogin">
>> +        <section>
>> +            <actions>
>> +                <set field="partyId" from- field="parameters.partyId"/>
>> +                <entity-one entity-name="PartyAndPerson" value- name="personInfo"/>
>> +            </actions>
>> +            <widgets>
>> +                <decorator-screen name="main-decorator" location="$ {parameters.mainDecoratorLocation}">
>> +                    <decorator-section name="body">
>> +                        <section>
>> +                            <condition>
>> +                                <not><if-empty field- name="parameters.partyId"/></not>
>> +                            </condition>
>> +                            <actions>
>> +                                <set field="partyId" from- field="parameters.partyId"/>
>> +                                <script location="component://party/ webapp/partymgr/WEB-INF/actions/party/ViewProfile.groovy"/>
>> +                            </actions>
>> +                            <widgets>
>> +                                <label style="h2" text="$ {uiLabelMap.RegisterComplete}"/><link target="main" style="h2" 
>> text="${uiLabelMap.CommonBeLogged}"></link>
>> +                                <label style="h2"  text="&lt;br&gt;&lt;br&gt;"/>
>> +                                <include-screen name="Party"  location="component://party/widget/partymgr/ProfileScreens.xml"/>
>> +                            </widgets>
>> +                            <fail-widgets>
>> +                                <container style="screenlet">
>> +                                    <container style="screenlet- title-bar">
>> +                                        <container style="h3">
>> +                                            <label text="$ {uiLabelMap.NewRegistration}"/>
>> +                                        </container>
>> +                                    </container>
>> +                                    <container style="screenlet- body">
>> +                                        <section>
>> +                                            <widgets>
>> +                                                <include-form  name="RegisterPerson" location="component://myportal/widget/ 
>> MyPortalForms.xml"/>
>> +                                            </widgets>
>> +                                        </section>
>> +                                    </container>
>> +                                </container>
>> +                            </fail-widgets>
>> +                        </section>
>> +                    </decorator-section>
>> +                </decorator-screen>
>> +            </widgets>
>> +        </section>
>> +    </screen>
>>
>>     <screen name="CommonRequestDecorator">
>>         <section>
>>
>> Modified: ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml?rev=735965&r1=735964&r2=735965&view=diff
>> = = = = = = = = ======================================================================
>> --- ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml  (original)
>> +++ ofbiz/trunk/specialpurpose/myportal/widget/MyPortalForms.xml Tue  Jan 20 00:30:41 2009
>> @@ -276,4 +276,75 @@
>>         <field name="task"><display description="${workEffortName}"/
>> ></field>
>>     </form>
>>
>> +    <!--New Register Person-->
>> +    <form name="RegisterPerson" type="single"  target="createRegister" default-map-name="personInfo"
>> +        focus-field-name="salutation" header-row-style="header-row"  default-table-style="basic-table">
>> +        <auto-fields-service service-name="updatePerson"/>
>> +        <field use-when="personInfo!=null" name="partyId" title="$ {uiLabelMap.PartyPartyId}" tooltip="$ 
>> {uiLabelMap.CommonNotModifRecreat}"><display/></field>
>> +        <field use-when="personInfo==null&amp;&amp;partyId==null"  name="partyId" 
>> title="${uiLabelMap.PartyPartyId}"><ignored/></field>
>> +        <field use-when="personInfo==null&amp;&amp;partyId!=null"  name="partyId" title="${uiLabelMap.PartyPartyId}" tooltip="$ 
>> {uiLabelMap.CommonCannotBeFound}: [${partyId}]"><display also- hidden="false"/></field>
>> +        <field name="firstName" title="$ {uiLabelMap.PartyFirstName}" tooltip="${uiLabelMap.CommonRequired}" 
>> widget-style="required"><text size="40" maxlength="60"/></field>
>> +        <field name="lastName" title="${uiLabelMap.PartyLastName}"  tooltip="${uiLabelMap.CommonRequired}" 
>> widget-style="required"><text  size="40" maxlength="60"/></field>
>> +        <field name="gender">
>> +            <drop-down allow-empty="true">
>> +                <option key="M" description="$ {uiLabelMap.CommonMale}"/>
>> +                <option key="F" description="$ {uiLabelMap.CommonFemale}"/>
>> +            </drop-down>
>> +        </field>
>> +        <field name="maritalStatus">
>> +            <drop-down allow-empty="true">
>> +                <option key="S" description="$ {uiLabelMap.PartyMaritalStatusSingle}"/>
>> +                <option key="M" description="$ {uiLabelMap.PartyMaritalStatusMarried}"/>
>> +                <option key="P" description="$ {uiLabelMap.PartyMaritalStatusSeparated}"/>
>> +                <option key="D" description="$ {uiLabelMap.PartyMaritalStatusDivorced}"/>
>> +                <option key="W" description="$ {uiLabelMap.PartyMaritalStatusWidowed}"/>
>> +            </drop-down>
>> +        </field>
>> +        <field name="employmentStatusEnumId">
>> +            <drop-down allow-empty="true">
>> +                <entity-options entity-name="Enumeration" key-field- name="enumId" description="${description} [${enumCode}]">
>> +                    <entity-constraint name="enumTypeId"  value="EMPLOY_STTS"/>
>> +                    <entity-order-by field-name="sequenceId"/>
>> +                </entity-options>
>> +            </drop-down>
>> +        </field>
>> +        <field name="residenceStatusEnumId">
>> +            <drop-down allow-empty="true">
>> +                <entity-options entity-name="Enumeration" key-field- name="enumId" description="${description} [${enumCode}]">
>> +                    <entity-constraint name="enumTypeId"  value="PTY_RESID_STTS"/>
>> +                    <entity-order-by field-name="sequenceId"/>
>> +                </entity-options>
>> +            </drop-down>
>> +        </field>
>> +        <field name="existingCustomer">
>> +            <drop-down allow-empty="true"><option key="Y"  description="${uiLabelMap.CommonY}"/><option key="N" description="$ 
>> {uiLabelMap.CommonN}"/></drop-down>
>> +        </field>
>> +        <field name="preferredCurrencyUomId">
>> +            <drop-down allow-empty="true">
>> +                <entity-options key-field-name="uomId"  description="${abbreviation} - ${description}" entity-name="Uom">
>> +                    <entity-constraint name="uomTypeId"  operator="equals" value="CURRENCY_MEASURE"/>
>> +                    <entity-order-by field-name="abbreviation"/>
>> +                </entity-options>
>> +            </drop-down>
>> +        </field>
>> +        <field name="statusId" use-when="person==null"><hidden/></ field>
>> +        <field name="statusId" use-when="person!=null">
>> +            <drop-down allow-empty="false">
>> +                <entity-options description="${description}" entity- name="StatusItem">
>> +                    <entity-constraint name="statusTypeId"  value="PARTY_STATUS"/>
>> +                    <entity-order-by field-name="sequenceId"/>
>> +                </entity-options>
>> +            </drop-down>
>> +        </field>
>> +        <field name="UserLogin" title="${uiLabelMap.UserLogin}"  title-area-style="group-label"><display description=" " also- 
>> hidden="false"/></field>
>> +        <field name="USERNAME" title="${uiLabelMap.CommonUsername}"  tooltip="${uiLabelMap.CommonRequired}" 
>> widget-style="required"><text  size="30" maxlength="250"/></field>
>> +        <field name="PASSWORD" title="${uiLabelMap.CommonPassword}"  tooltip="${uiLabelMap.CommonRequired}" widget- 
>> style="required"><password size="15" maxlength="250"/></field>
>> +        <field name="CONFIRM_PASSWORD" title="$ {uiLabelMap.CommonPassword}" tooltip="* ${uiLabelMap.CommonConfirm}" 
>> widget-style="required"><password size="15" maxlength="250"/></field>
>> +        <field name="VerifyCaptchaTitle" title="$ {uiLabelMap.VerifyCaptcha}" title-area-style="group-label"><display 
>> description=" " also-hidden="false"/></field>
>> +        <field name="picOfcaptcha" title="$ {uiLabelMap.PicCaptcha}"><image value="/images/captchaImage.png"></ image></field>
>> +        <field name="reload" title=" "><image value="/images/feed- icon-14x14.png"><sub-hyperlink target="newRegisterLogin" 
>> description="reload image"/></image></field>
>> +        <field name="captcha" title="${uiLabelMap.VerifyCaptcha}"  tooltip="${uiLabelMap.CommonRequired}" 
>> widget-style="required"><text  size="23" maxlength="30"/></field>
>> +        <field name="submitButton" title="${uiLabelMap.CommonSave}"  title-area-style="group-label"><submit 
>> button-type="button"/></field>
>> +    </form>
>> +
>> </forms>
>>
>> Added: ofbiz/trunk/specialpurpose/myportal/widget/login.ftl
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/myportal/widget/login.ftl?rev=735965&view=auto
>> = = = = = = = = ======================================================================
>> --- ofbiz/trunk/specialpurpose/myportal/widget/login.ftl (added)
>> +++ ofbiz/trunk/specialpurpose/myportal/widget/login.ftl Tue Jan 20  00:30:41 2009
>> @@ -0,0 +1,73 @@
>> +<#--
>> +Licensed to the Apache Software Foundation (ASF) under one
>> +or more contributor license agreements.  See the NOTICE file
>> +distributed with this work for additional information
>> +regarding copyright ownership.  The ASF licenses this file
>> +to you under the Apache License, Version 2.0 (the
>> +"License"); you may not use this file except in compliance
>> +with the License.  You may obtain a copy of the License at
>> +
>> +http://www.apache.org/licenses/LICENSE-2.0
>> +
>> +Unless required by applicable law or agreed to in writing,
>> +software distributed under the License is distributed on an
>> +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> +KIND, either express or implied.  See the License for the
>> +specific language governing permissions and limitations
>> +under the License.
>> +-->
>> +
>> +<#if requestAttributes.uiLabelMap?exists><#assign uiLabelMap =  requestAttributes.uiLabelMap></#if>
>> +
>> +<#assign previousParams = sessionAttributes._PREVIOUS_PARAMS_? if_exists>
>> +<#if previousParams?has_content>
>> +  <#assign previousParams = "?" + previousParams>
>> +</#if>
>> +
>> +<#assign username = requestParameters.USERNAME? default((sessionAttributes.autoUserLogin.userLoginId)?default(""))>
>> +<#if username != "">
>> +  <#assign focusName = false>
>> +<#else>
>> +  <#assign focusName = true>
>> +</#if>
>> +
>> +<center>
>> +  <div class="screenlet login-screenlet" style="width: 22%; margin- left: 5px; text-align: center;">
>> +    <div class="screenlet-title-bar">
>> +      <h3>${uiLabelMap.CommonRegistered}</h3>
>> +    </div>
>> +    <div class="screenlet-body">
>> +      <form method="post" action="<@ofbizUrl>login${previousParams? if_exists}</...@ofbizUrl>" name="loginform">
>> +        <table class="basic-table" cellspacing="0">
>> +          <tr>
>> +            <td class="label" style="width: 31%;">$ {uiLabelMap.CommonUsername}</td>
>> +            <td><input type="text" name="USERNAME" value="$ {username}" size="20"/></td>
>> +          </tr>
>> +          <tr>
>> +            <td class="label">${uiLabelMap.CommonPassword}</td>
>> +            <td><input type="password" name="PASSWORD" value=""  size="20"/></td>
>> +          </tr>
>> +          <tr>
>> +            <td colspan="2" align="center">
>> +              <input type="submit" value="$ {uiLabelMap.CommonLogin}"/>
>> +            </td>
>> +          </tr>
>> +        </table>
>> +        <input type="hidden" name="JavaScriptEnabled" value="N"/>
>> +        <br/>
>> +        <a href="<@ofbizUrl>forgotPassword${previousParams? if_exists}</...@ofbizUrl>">${uiLabelMap.CommonForgotYourPassword}?</a>
>> +        <br/>
>> +        <a href="<@ofbizUrl>newRegisterLogin${previousParams? if_exists}</...@ofbizUrl>">${uiLabelMap.NewRegistration}</a>
>> +      </form>
>> +    </div>
>> +  </div>
>> +</center>
>> +
>> +<script language="JavaScript" type="text/javascript">
>> +  document.loginform.JavaScriptEnabled.value = "Y";
>> +  <#if focusName>
>> +    document.loginform.USERNAME.focus();
>> +  <#else>
>> +    document.loginform.PASSWORD.focus();
>> +  </#if>
>> +</script>
>> \ No newline at end of file
>>
>> Propchange: ofbiz/trunk/specialpurpose/myportal/widget/login.ftl
>> ------------------------------------------------------------------------------
>>    svn:eol-style = native
>>
>> Propchange: ofbiz/trunk/specialpurpose/myportal/widget/login.ftl
>> ------------------------------------------------------------------------------
>>    svn:keywords = "Date Rev Author URL Id"
>>
>> Propchange: ofbiz/trunk/specialpurpose/myportal/widget/login.ftl
>> ------------------------------------------------------------------------------
>>    svn:mime-type = text/plain
>>
>>
>
>