Revision: 2572
Author: seba.wagner
Date: Mon Nov  2 08:47:28 2009
Log: Fix Calendar add/remove of member to a Meeting
http://code.google.com/p/openmeetings/source/detail?r=2572

Added:
   
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/addAttendee.lzx
   
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/images/cancel.png
Modified:
  /trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/cal-data.lzx
   
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/infopanel.lzx
  /trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/library.lzx
   
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/resources.lzx
   
/trunk/singlewebapp/src/app/org/openmeetings/servlet/outputhandler/CalendarServlet.java

=======================================
--- /dev/null
+++  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/addAttendee.lzx  
 
Mon Nov  2 08:47:28 2009
@@ -0,0 +1,311 @@
+<library>
+
+<class name="addAttendee" extends="labelExplorerBox" labelid="574"
+        closable="true" width="500" x="$once{ parent.width/2-this.width/2 + 10 
}"
+        y="110" height="310" >
+       <!-- resizeable="false" -->
+       <attribute name="refObj" value="null"/>
+
+       <handler name="oninit">
+               this.getAllUserBySearchRange.doCall();
+       </handler>
+
+       <!--
+          Get all users by range and parse result List into View
+        -->
+    <netRemoteCallHib name="getAllUserBySearchRange"  
funcname="userservice.getAllUserBySearchRange"
+                      remotecontext="$once{ canvas.thishib }" >
+
+        <attribute name="numberOfMessage" value="0" type="number" />
+        <attribute name="numberOfStart" value="0" type="number" />
+        <attribute name="numberOfRecords" value="20" type="number" />
+
+        <netparam><method name="getValue">return  
canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return  
parent.parent._search._criteria.getText();</method></netparam>
+        <netparam><method name="getValue">return  
parent.numberOfStart;</method></netparam>
+        <netparam><method name="getValue">return 20;</method></netparam>
+        <netparam><method  
name="getValue">return "datumSend";</method></netparam>
+        <netparam><method name="getValue">return true;</method></netparam>
+
+        <handler name="ondata" args="valueList">
+            <![CDATA[
+            var result = valueList.result;
+            if ($debug) Debug.write("valueList: ", valueList);
+            if ($debug) Debug.write("result: ", result);
+
+            this.numberOfMessage = valueList.records;
+            this.numberOfRecords = this.numberOfStart +  
valueList.result.length;
+
+            if (valueList.result == null || valueList.result.length == 0){
+                if ($debug) Debug.write("if valueList: ", valueList);
+                new lz.userNotFound(parent,{
+                    x:parent.width/2-this.width/2,
+                    y:parent.height-this.height-100});
+
+                // new lz.alert(parent);
+
+            } else {
+                if (parent["_list"]){
+                    parent._list.destroy();
+                }
+                new lz.searchResultsAttendees(parent,{name:'_list', y:70,  
width:700, refObj:this});
+                //new userSearchHead(parent._list._inner);
+                for (var i=0;i<result.length;i++) {
+                    if ($debug) Debug.write("UserList",result[i]);
+                    var id = result[i].user_id;
+                    var vorname = result[i].firstname;
+                    var nachname = result[i].lastname;
+                    var email = result[i].adresses.email;
+                    if ($debug)  
Debug.write("email",result[i].adresses.email);
+
+                    //var userObj = this.result[i];
+                    if ($debug) Debug.write("id",id);
+                    //if ($debug) Debug.write("Vorname: ",vorname);
+                    //if ($debug) Debug.write("Nachname",nachname);
+                    //if ($debug) Debug.write("messageId ", messageId);
+                    //if ($debug) Debug.write("datumRead posteingang",  
datumRead);
+                    //if ($debug) Debug.write("messageObj:", messageObj);
+
+                        new lz.attendeItem(parent._list._innerList._inner,  
{
+                                    refObj:parent,
+                                    userId: id,
+                                    vorname:vorname,
+                                    nachname:nachname,
+                                    email:email
+                            });
+
+            }}
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+
+       <view name="_search" layout="axis:x;spacing:2" y="30" x="20">
+               <edittext name="_criteria" width="150" >
+
+               </edittext>
+
+               <simpleLabelButton labelid="628" >
+                       <handler name="onclick">
+                       //parent.parent.getUserContactsBySearchByList.doCall();
+                       parent.parent.getAllUserBySearchRange.doCall();
+                       </handler>
+               </simpleLabelButton >
+
+               <simpleLabelButton labelid="629" >
+                       <handler name="onclick">
+                               <![CDATA[
+                               
//parent.parent.getUserContactsBySearchByList.doCall();
+                               
//parent.parent.getAllUserBySearchRange.doCall();
+                               new 
lz.addExternalAttendee(parent.parent.parent, {
+                                        refObj:parent.parent,
+                                        
x:parent.parent.x+parent.parent.width/2,
+                                        y:parent.parent.y+40
+                                        });
+                ]]>
+                       </handler>
+               </simpleLabelButton >
+
+       </view>
+
+    <simpleLabelButton labelid="697" x="$once{ parent.width - 125 }"
+                       y="$once{ parent.height - 28 }" width="120">
+        <view resource="button_cancel_rsc" x="2" y="2" />
+        <handler name="onclick">
+            //parent.parent.parent.delTermin.doCall();
+            parent.close();
+        </handler>
+    </simpleLabelButton>
+
+
+
+</class>
+
+<class name="attendeItem" extends="view" bgcolor="silver">
+
+       <simplelayout axis="x" spacing="5" />
+       <attribute name="userId" value="0" type="number" />
+       <attribute name="vorname" value="" type="string" />
+       <attribute name="nachname" value="" type="string" />
+       <attribute name="email" value="null"/>
+
+       <attribute name="refObj" value="null"/>
+
+       <handler name="onclick">
+               this.refObj.refObj.addListItem(
+                this.userId,
+                this.vorname,
+                this.nachname,
+                this.email,0);
+        //if ($debug) Debug.write("_innerlist: ",  
parent.refObj.terminObjRef._liste._innerlist);
+        //parent.refObj.terminObjRef._liste;
+        //new selectKategoryStatus(canvas,{_contactId:parent.userId});
+        //if ($debug) Debug.write("userId  search: ",parent.userId);
+        this.refObj.close();
+       </handler>
+
+       <view resource="list_add_rsc" />
+
+       <text  text="$once{parent.userId }" width="20"/>
+       <text name="_item3"  text="$once{ parent.vorname}" width="60" />
+       <text name="_item4"  text="$once{ parent.nachname }" width="60" />
+       <text name="_item7"  text="$once{ parent.email}" width="350"/>
+
+ </class>
+
+       <class name="addExternalAttendee" extends="labelExplorerBox" 
width="216"  
height="190"
+                  closable="true" labelid="629" >
+
+               <attribute name="refObj" value="null"/>
+
+               <view name="_mainView" x="10" y="24" layout="axis:y;spacing:2">
+
+
+                       <labelText labelid="630" width="100"/>
+
+                       <edittext name="vorname" width="${parent._buttons.width 
 
-10}"></edittext>
+
+                       <labelText labelid="631" width="100"/>
+                       <edittext name="nachname" 
width="${parent._buttons.width  
-10}"></edittext>
+
+                       <labelText labelid="632" width="100"/>
+                       <edittext width="${parent._buttons.width - 10}" 
name="email"></edittext>
+
+                       <view name="_buttons" layout="axis:x;spacing:2" 
width="210">
+                               <simpleLabelButton labelid="333" 
width="$once{parent._cancel.width}">
+                                       <handler name="onclick">
+                                               
parent.parent.parent.refObj.refObj.addListItem(
+                                                     0,
+                                                     
parent.parent.vorname["text"],
+                                                     
parent.parent.nachname["text"],
+                                                     
parent.parent.email["text"],
+                                                     0
+                                                     );
+                                               //if ($debug) 
Debug.write("_innerlist: ",  
parent.parent.parent.refObj.terminObjRef._liste._innerlist);
+                                               parent.parent.vorname="";
+                                               parent.parent.nachname="";
+                                               parent.parent.email="";
+                                               parent.parent.parent.close();
+                                               
parent.parent.parent.refObj.close();
+                                               //if ($debug) 
Debug.write("userId   
search: ",parent.parent.parent.userId);
+                                       </handler>
+                               </simpleLabelButton>
+
+                               <simpleLabelButton labelid="25" name="_cancel" 
width="100">
+                                       <handler name="onclick">
+                                               parent.parent.parent.close();
+                                       </handler>
+                               </simpleLabelButton>
+                       </view>
+
+               </view>
+
+       </class>
+
+<class name="attendeeSearchHead" extends="view" bgcolor="$once{  
canvas.basebgcolorizer }" width="${parent.width}">
+                <!--   <simplelayout axis="x" spacing="10"/> -->
+                       <text fontsize="10"  x="15">ID</text>
+                       <labelText labelid="135" fontsize="10" x="40" 
width="60"/>
+                       <labelText labelid="136" fontsize="10" x="100" 
width="90"/>
+                       <labelText labelid="137" fontsize="10" x="190" 
width="50"/>
+</class>
+
+
+<class name="attendeeContentHead" extends="view" bgcolor="$once{  
canvas.basebgcolorizer }" width="${parent.parent.parent.width}" >
+       <!--<simplelayout axis="x" spacing="130"/> -->
+       <text name="_datum" x="${this.x + 20}" fontsize="11">Datum</text>
+ <!--  <text x="${this.x + 120}" fontsize="11">Absender</text> -->
+       <text name="_betreff" x="${this.x + 120}" fontsize="11">Betreff</text>
+       <view name="nxpr" layout="axis:x;spacing:2" x="${parent.width -  
this.width -5}">
+               <text x="10" name="count" text=""></text>
+               <view name="previos" resource="leftarrow_rsc">
+               <handler name="onclick">
+                       parent.parent.parent.loadPre();
+               </handler>
+
+               <handler name="onmouseover">
+                               this.animate('xoffset', +2, 200)
+                               //if ($debug) Debug.write("this: ", this);
+               </handler>
+               <handler name="onmouseout">
+                       this.animate('xoffset', 0, 200) //this.setX(this.x-5)
+               </handler>
+               </view>
+
+               <view name="next" resource="rightarrow_rsc">
+                       <handler name="onmouseover">
+                               this.animate('xoffset', -2, 200)         
//this.setX(this.x+5)
+                               ///if ($debug) Debug.write("this: ", this);
+                       </handler>
+                       <handler name="onmouseout">
+                               this.animate('xoffset', 0, 200) 
//this.setX(this.x-5)
+                       </handler>
+
+                       <handler name="onclick">
+                               parent.parent.parent.loadNext();
+                       </handler>
+               </view>
+       </view>
+</class>
+
+
+<class name="searchResultsAttendees" extends="view" height="70" x="2" >
+       <attribute name="refObj" value="null" />
+
+    <attendeeSearchHead name="_userSearchHead" x="10"  
width="${parent._innerList.width}">
+               <attendeeContentHead name="_ordnerInhaltHead" width="120"  
x="${parent.width - this.width}">
+                       <handler name="oninit">
+                               <![CDATA[
+                                       this._datum.setAttribute('text', "");
+                                       this._betreff.setAttribute('text', "")
+
+                                       this.nxpr.count.setAttribute('text',  
parent.parent.refObj.numberOfStart+
+                                               "" +" - " + "" +  
parent.parent.refObj.numberOfRecords+ " "+getLabelTag(254)+" " +  
parent.parent.refObj.numberOfMessage);
+
+                                       if ($debug) Debug.write("refObj: ", 
parent.parent.refObj);
+                                       if ($debug) 
Debug.write("ordnerinhlatHead++: ", this);
+
+                                       if ( 
parent.parent.refObj.numberOfRecords < 21) {
+                                           
this.nxpr.previos.setAttribute('clickable', false);
+                                       }
+
+                                       if (parent.parent.refObj.numberOfRecords
+                                              >= 
parent.parent.refObj.numberOfMessage) {
+                                           
this.nxpr.next.setAttribute('clickable', false);
+                                       }
+
+                                       if (this.nxpr.previos.clickable == 
false)  {
+                                           
this.nxpr.previos.setAttribute('opacity', 0.5)
+                                   }
+
+                                       if (this.nxpr.next.clickable == false)  
{
+                                           
this.nxpr.next.setAttribute('opacity', 0.5)
+                                   }
+                               ]]>
+                       </handler>
+               </attendeeContentHead>
+
+               <method name="loadNext">
+                       <![CDATA[
+                               parent.refObj.numberOfStart = 
parent.refObj.numberOfStart + 20;
+                               parent.refObj.doCall();
+                       ]]>
+               </method>
+
+               <method name="loadPre">
+                       <![CDATA[
+                               parent.refObj.numberOfStart = 
parent.refObj.numberOfStart - 20;
+                               parent.refObj.doCall();
+                       ]]>
+               </method>
+
+       </attendeeSearchHead>
+
+       <!--x="${(parent.width - this.width)/2}"-->
+       <view x="10" name="_innerList" height="180" width="${this._inner.width 
+  
15}" y="20" clip="true" >
+               <view name="_inner" layout="axis:y;spacing:2" width="460"  
bgcolor="$once{ canvas.baseMacomBackground }"/>
+               <vscrollbar/>
+               <!-- <hscrollbar/>-->
+       </view>
+</class>
+
+</library>
=======================================
--- /dev/null   
+++  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/images/cancel.png
         
Mon Nov  2 08:47:28 2009
Binary file, no diff available.
=======================================
---  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/cal-data.lzx     
 
Mon Nov  2 05:18:26 2009
+++  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/cal-data.lzx     
 
Mon Nov  2 08:47:28 2009
@@ -122,6 +122,16 @@
              <uid value=""/>
          </event>
      </dataset>
+
+    <dataset name="blankMeetingMember">
+        <attendee>
+            <userId value=""/>
+            <firstname value=""/>
+            <lastname value=""/>
+            <memberId value=""/>
+            <email value=""/>
+        </attendee>
+    </dataset>

      <!-- Assigned to the panel when deleting an event -->
      <dataset name="noEvent">
@@ -141,6 +151,7 @@
      <datapointer id="alleventsDP" xpath="eventdata:/"/>
      <datapointer id="currenteventDP" />
      <datapointer id="blankeventDP" xpath="blankEvent:/"/>
+    <datapointer id="blankMeetingMemberDP" xpath="blankMeetingMember:/"/>
      <datapointer id="tempDP" xpath="eventdata:/"/>

      <!-- This node provides some useful methods for manipulating the
@@ -228,7 +239,7 @@
              if ($debug) Debug.write("Add the event ");

              // Add the event
-            //currenteventDP.setNodeAttribute( "selected" , 'false' );
+            currenteventDP.setNodeAttribute( "selected" , 'false' );

              //if ($debug) Debug.write("Add the event 2 ",currenteventDP);

=======================================
---  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/infopanel.lzx    
 
Mon Nov  2 05:18:26 2009
+++  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/infopanel.lzx    
 
Mon Nov  2 08:47:28 2009
@@ -205,8 +205,7 @@
                                  datapath="start[1]"
                                   
onclick="canvas.eventDataMgr.changetime('start',+1);"/>

-                    <text x="$immediately{92-11}" y="0" width="20" >
-                        to</text>
+                    <text x="$immediately{92-11}" y="0" width="20"  
>to</text>

                      <textbox name="etime" x="100" y="1" width="45"
                               bgcolor="0xEEF0EB" bordercolor="0x333333"
@@ -261,24 +260,113 @@
                      width="175" height="280" datapath="comment/@value"  
visible="true"/>
              </infoTab>

-            <infoTab name="location" label="Location" pixellock="true">
-                <inputtextbox name="txt" x="10" y="10" multiline="true"  
pixellock="true"
-                    width="175" height="280" datapath="location/@value"  
visible="true"/>
-            </infoTab>
              <infoTab name="attendees" label="Attendees" pixellock="true">

-               <simplelayout axis="y" />
-
-               <view datapath="attendees/attendee/">
-                       <view>
-                               <simplelayout axis="x" />
-                               <text resize="true" datapath="firstname/@value" 
/>
-                               <text resize="true" datapath="lastname/@value" 
/>
-                               <text text="(" />
-                               <text resize="true" datapath="email/@value" />
-                               <text text=")" />
-                       </view>
+               <calButton label="Add Attendee" x="2" y="2">
+                       <handler name="onclick">
+                               new lz.addAttendee(canvas,{refObj:parent});
+                       </handler>
+                   </calButton>
+
+                   <method name="addListItem"  
args="userId,firstName,lastName,email,memberId">
+                       <![CDATA[
+
+                               new lz.attendeeListItem(this.list,{
+                                                               userId:userId,
+                                                               
firstName:firstName,
+                                                               
lastName:lastName,
+                                                               email:email,
+                                                               
memberId:memberId
+                                                       })
+                       ]]>
+                   </method>
+                    <!--
+
+                   <method name="addListItem"  
args="userId,firstName,lastName,email">
+                       <![CDATA[
+
+                               // Set the blank event pointer to the top of 
the member
+                                
blankMeetingMemberDP.setXPath('blankMeetingMember:/attendee[1]');
+
+                               blankMeetingMemberDP.setXPath('email');
+                               
blankMeetingMemberDP.setNodeAttribute('value',email);
+
+                               blankMeetingMemberDP.setXPath('../memberId');
+                               
blankMeetingMemberDP.setNodeAttribute('value',''+0);
+
+                               blankMeetingMemberDP.setXPath('../firstname');
+                               
blankMeetingMemberDP.setNodeAttribute('value',firstName);
+
+                               blankMeetingMemberDP.setXPath('../lastname');
+                               
blankMeetingMemberDP.setNodeAttribute('value',lastName);
+
+                               blankMeetingMemberDP.setXPath('../userId');
+                               
blankMeetingMemberDP.setNodeAttribute('value',''+userId);
+
+                               blankMeetingMemberDP.setXPath('../');
+
+                               //if ($debug)  
Debug.write("blankMeetingMemberDP ",blankMeetingMemberDP);
+
+                               //if ($debug) Debug.write(this.list.datapath);
+                               
this.list.datapath.addNodeFromPointer(blankMeetingMemberDP);
+                               this.list.datapath.updateData();
+                       ]]>
+                   </method>
+                    -->
+
+               <view name="list" y="22" datapath="attendees/"
+                         height="${ parent.height-22 }">
+
+                       <handler name="ondata" args="data">
+                               <![CDATA[
+                                       //if ($debug) Debug.warn("attendees -1 
ondata ",data);
+
+                                       for (var eg in this.subviews){
+                                               this.subviews[eg].destroy();
+                                       }
+
+                                       for (var 
i=0;i<data.childNodes.length;i++){
+
+                                               var email =  
data.childNodes[i].childNodes[0].attributes.value;
+                                               var userId =  
data.childNodes[i].childNodes[1].attributes.value;
+                                               var memberId =  
data.childNodes[i].childNodes[2].attributes.value;
+                                               var firstName =  
data.childNodes[i].childNodes[3].attributes.value;
+                                               var lastName =  
data.childNodes[i].childNodes[4].attributes.value;
+
+                                                
parent.addListItem(userId,firstName,lastName,email,memberId);
+
+                                       }
+                               ]]>
+                       </handler>
+
+                       <simplelayout axis="y" />
+
+                       <!--
+                       <view datapath="attendee/">
+
+                               <view name="member">
+                                       <simplelayout axis="x" />
+                                       <text resize="true" 
datapath="firstname/@value" />
+                                       <text resize="true" 
datapath="lastname/@value" />
+                                       <text text="(" />
+                                       <text resize="true" 
datapath="email/@value" />
+                                       <text text=")" />
+                               </view>
+                               <view x="150" resource="delete_button">
+                                       <handler name="onclick">
+                                               //if ($debug) 
Debug.write(parent);
+                                               //if ($debug) 
Debug.write(parent.datapath);
+                                               parent.datapath.deleteNode();
+                                               //parent.datapath.updateData();
+                                               
parent.parent.datapath.updateData();
+                                       </handler>
+                               </view>
+                       </view>
+                        -->
+
                </view>
+
+               <vscrollbar />
                <!--
                  <inputtextbox name="txt" x="10" y="10" multiline="true"  
pixellock="true"
                      width="175" height="280" datapath="attendees/@value"  
visible="true"/>
@@ -386,9 +474,30 @@
          </method>

      </class>
+
+
+<class name="attendeeListItem" extends="view" >
+
+       <attribute name="userId" value="0" type="number"/>
+       <attribute name="firstName" value="" type="string"/>
+       <attribute name="memberId" value="0" type="number"/>
+       <attribute name="lastName" value="" type="string"/>
+       <attribute name="email" value="" type="string"/>
+
+       <view name="member">
+               <text resize="true" text="$once{ parent.parent.firstName + ',' 
+  
parent.parent.lastName }" />
+               <text resize="true" y="20" text="$once{ '(' + 
parent.parent.email + ')'  
}" />
+       </view>
+
+       <view x="166" resource="delete_button" bgcolor="0xFFFFFF">
+               <handler name="onclick">
+                       parent.destroy();
+               </handler>
+       </view>
+
+       <view height="1" width="200" y="40"
+                 bgcolor="$once{ canvas.basebgcolorizer }" />
+
+</class>
+
  </library>
-<!-- * X_LZ_COPYRIGHT_BEGIN  
***************************************************
-* Copyright 2001-2008 Laszlo Systems, Inc.  All Rights  
Reserved.              *
-* Use is subject to license  
terms.                                            *
-* X_LZ_COPYRIGHT_END  
****************************************************** -->
-<!-- @LZX_VERSION@                                                          
-->
=======================================
---  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/library.lzx      
 
Sat Oct 31 05:30:06 2009
+++  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/library.lzx      
 
Mon Nov  2 08:47:28 2009
@@ -16,5 +16,6 @@
      <include href="eventselector.lzx"/>

        <include href="lzCalendar.lzx" />
+       <include href="addAttendee.lzx" />

  </library>
=======================================
---  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/resources.lzx    
 
Sat Oct 31 02:43:46 2009
+++  
/trunk/singlewebapp/WebContent/openmeetings/modules/lzcalendar/resources.lzx    
 
Mon Nov  2 08:47:28 2009
@@ -26,7 +26,11 @@
          <frame src="images/infopanel/x_bright.png"/>
          <frame src="images/infopanel/x_press.png"/>
      </resource>
-
+
+       <resource name="delete_button">
+        <frame src="images/cancel.png"/>
+    </resource>
+
      <!-- CAL-BUTTON RESOURCES -->
      <!-- RESOURCES for all styles of button -->
      <resource name="button_middle" >
=======================================
---  
/trunk/singlewebapp/src/app/org/openmeetings/servlet/outputhandler/CalendarServlet.java
  
Mon Nov  2 05:18:26 2009
+++  
/trunk/singlewebapp/src/app/org/openmeetings/servlet/outputhandler/CalendarServlet.java
  
Mon Nov  2 08:47:28 2009
@@ -138,6 +138,9 @@
                                                        Element email = 
attendee.addElement("email");
                                                        
email.addAttribute("value", meetingMember.getEmail());

+                                                       Element userId = 
attendee.addElement("userId");
+                                                       
userId.addAttribute("value", ""+meetingMember.getUserid());
+
                                                        Element memberId = 
attendee.addElement("memberId");
                                                         
memberId.addAttribute("value", ""+meetingMember.getMeetingMemberId());


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"OpenMeetings developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/openmeetings-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to