From 699e99c9907cebb7cea6bf65daa335ff692a5fed Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 14 Jan 2009 00:09:39 -0500 Subject: Form class, superclass for form widgets --- lib/form.php | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 lib/form.php (limited to 'lib/form.php') diff --git a/lib/form.php b/lib/form.php new file mode 100644 index 000000000..ba1790faa --- /dev/null +++ b/lib/form.php @@ -0,0 +1,139 @@ +. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @author Sarven Capadisli + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/widget.php'; + +/** + * Base class for forms + * + * We have a lot of common forms (subscribe, fave, delete) and this superclass + * lets us abstract out the basic features of the form. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @author Sarven Capadisli + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + * + * @see HTMLOutputter + */ + +class Form extends Widget +{ + /** + * Show the form + * + * Uses a recipe to output the form. + * + * @return void + * @see Widget::show() + */ + + function show() + { + $this->out->elementStart('form', + array('id' => $this->id(), + 'method' => 'POST', + 'action' => $this->action())); + $this->sessionToken(); + $this->formData(); + $this->formActions(); + $this->out->elementEnd('form'); + } + + /** + * Include a session token for CSRF protection + * + * @return void + */ + + function sessionToken() + { + $this->out->hidden('token', common_session_token()); + } + + /** + * Visible or invisible data elements + * + * Display the form fields that make up the data of the form. + * Sub-classes should overload this to show their data. + * + * @return void + */ + + function formData() + { + } + + /** + * Buttons for form actions + * + * Submit and cancel buttons (or whatever) + * Sub-classes should overload this to show their own buttons. + * + * @return void + */ + + function formActions() + { + } + + /** + * ID of the form + * + * Should be unique on the page. Sub-classes should overload this + * to show their own IDs. + * + * @return int ID of the form + */ + + function id() + { + return null; + } + + /** + * Action of the form. + * + * URL to post to. Should be overloaded by subclasses to give + * somewhere to post to. + * + * @return string URL to post to + */ + + function action() + { + } +} -- cgit v1.2.3-54-g00ecf From 47f694582c8bb668ad711182bc7124fe2db0f339 Mon Sep 17 00:00:00 2001 From: sarven Date: Thu, 15 Jan 2009 03:32:07 +0000 Subject: Updated formData(), formActions(), show() Added formLegend() --- lib/form.php | 17 +++++++++++++++++ lib/noticeform.php | 53 +++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 58 insertions(+), 12 deletions(-) (limited to 'lib/form.php') diff --git a/lib/form.php b/lib/form.php index ba1790faa..5c75bb65f 100644 --- a/lib/form.php +++ b/lib/form.php @@ -67,9 +67,12 @@ class Form extends Widget array('id' => $this->id(), 'method' => 'POST', 'action' => $this->action())); + $this->out->elementStart('fieldset'); + $this->formLegend(); $this->sessionToken(); $this->formData(); $this->formActions(); + $this->out->elementEnd('fieldset'); $this->out->elementEnd('form'); } @@ -84,6 +87,20 @@ class Form extends Widget $this->out->hidden('token', common_session_token()); } + + /** + * Name of the form + * + * Sub-classes should overload this with the name of their form. + * + * @return void + */ + + function formLegend() + { + } + + /** * Visible or invisible data elements * diff --git a/lib/noticeform.php b/lib/noticeform.php index 0e46e0e58..0a4f486db 100644 --- a/lib/noticeform.php +++ b/lib/noticeform.php @@ -87,7 +87,7 @@ class NoticeForm extends Form function id() { - return 'status_form'; + return 'form_notice'; } /** @@ -101,6 +101,18 @@ class NoticeForm extends Form return common_local_url('newnotice'); } + + /** + * Legend of the Form + * + * @return void + */ + function formLegend() + { + $this->out->element('legend', null, _('Send a notice')); + } + + /** * Data elements * @@ -111,21 +123,33 @@ class NoticeForm extends Form { $user = common_current_user(); - $this->out->element('label', array('for' => 'status_textarea', - 'id' => 'status_label'), + $this->out->elementStart('ul', 'form_datas'); + $this->out->elementStart('li', array('id' => 'notice_text')); + $this->out->element('label', array('for' => 'notice_data-text'), sprintf(_('What\'s up, %s?'), $user->nickname)); // XXX: vary by defined max size - $this->out->element('span', array('id' => 'counter', - 'class' => 'counter'), - '140'); - $this->out->element('textarea', array('id' => 'status_textarea', - 'cols' => 60, - 'rows' => 3, + $this->out->element('textarea', array('id' => 'notice_data-text', + 'cols' => 35, + 'rows' => 4, 'name' => 'status_textarea'), ($this->content) ? $this->content : ''); + $this->out->elementEnd('li'); + $this->out->elementEnd('ul'); + + $this->out->elementStart('dl', 'form_note'); + $this->out->element('dt', null, _('Available characters')); + $this->out->element('dd', array('id' => 'notice_text-count'), + '140'); + $this->out->elementEnd('dl'); + if ($this->action) { - $this->out->hidden('returnto', $this->action); + // FIXME: or VERIFY that notice_return-to doesn't break anything. Changed from 'returnto' + $this->out->hidden('notice_return-to', $this->action); } + + // FIXME: Does this need to be checked like returnto? + $this->out->hidden('notice_in-reply-to', $this->action); + } /** @@ -136,9 +160,14 @@ class NoticeForm extends Form function formActions() { - $this->out->element('input', array('id' => 'status_submit', + $this->out->elementStart('ul', 'form_actions'); + $this->out->elementStart('li', array('id' => 'notice_submit')); + $this->out->element('input', array('id' => 'notice_action-submit', + 'class' => 'submit', 'name' => 'status_submit', 'type' => 'submit', 'value' => _('Send'))); + $this->out->elementEnd('li'); + $this->out->elementEnd('ul'); } -} \ No newline at end of file +} -- cgit v1.2.3-54-g00ecf From 1fc03ba63aaa50a1ed4ade38ed449e79bee70ecd Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 15 Jan 2009 20:58:46 +0000 Subject: Form action must be 'post' not 'POST' --- lib/form.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/form.php') diff --git a/lib/form.php b/lib/form.php index bd68fb0c5..011d4bfc9 100644 --- a/lib/form.php +++ b/lib/form.php @@ -66,7 +66,7 @@ class Form extends Widget $this->out->elementStart('form', array('id' => $this->id(), 'class' => $this->formClass(), - 'method' => 'POST', + 'method' => 'post', 'action' => $this->action())); $this->out->elementStart('fieldset'); $this->formLegend(); -- cgit v1.2.3-54-g00ecf From 0e1ea38319e00cacfe6b1c47fead2fe77cf159f3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 23 Jan 2009 02:58:18 +0100 Subject: Whitespace changes in form.php --- lib/form.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'lib/form.php') diff --git a/lib/form.php b/lib/form.php index 011d4bfc9..5317df471 100644 --- a/lib/form.php +++ b/lib/form.php @@ -65,7 +65,7 @@ class Form extends Widget { $this->out->elementStart('form', array('id' => $this->id(), - 'class' => $this->formClass(), + 'class' => $this->formClass(), 'method' => 'post', 'action' => $this->action())); $this->out->elementStart('fieldset'); @@ -88,7 +88,6 @@ class Form extends Widget $this->out->hidden('token', common_session_token()); } - /** * Name of the form * @@ -101,7 +100,6 @@ class Form extends Widget { } - /** * Visible or invisible data elements * @@ -154,7 +152,7 @@ class Form extends Widget function action() { } - + /** * Class of the form. * @@ -163,6 +161,6 @@ class Form extends Widget function formClass() { - return 'form'; + return 'form'; } } -- cgit v1.2.3-54-g00ecf