From e9225fabddb4c7dc2fef2c66b4ba3ecfd8c2f07d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sun, 15 Nov 2009 15:57:37 +0100 Subject: common superclass for forms that operate on a profile --- lib/profileactionform.php | 187 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 lib/profileactionform.php (limited to 'lib/profileactionform.php') diff --git a/lib/profileactionform.php b/lib/profileactionform.php new file mode 100644 index 000000000..fb183b6b6 --- /dev/null +++ b/lib/profileactionform.php @@ -0,0 +1,187 @@ +. + * + * @category Form + * @package StatusNet + * @author Evan Prodromou + * @copyright 2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Superclass for forms that operate on a profile + * + * Certain forms (block, silence, userflag, sandbox, delete) work on + * a single profile and work almost the same. So, this form extracts + * a lot of the common code to simplify those forms. + * + * @category Form + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class ProfileActionForm extends Form +{ + /** + * Profile of user to act on + */ + + var $profile = null; + + /** + * Return-to args + */ + + var $args = null; + + /** + * Constructor + * + * @param HTMLOutputter $out output channel + * @param Profile $profile profile of user to act on + * @param array $args return-to args + */ + + function __construct($out=null, $profile=null, $args=null) + { + parent::__construct($out); + + $this->profile = $profile; + $this->args = $args; + } + + /** + * ID of the form + * + * @return int ID of the form + */ + + function id() + { + return $this->target() . '-' . $this->profile->id; + } + + /** + * class of the form + * + * @return string class of the form + */ + + function formClass() + { + return 'form_user_'.$this->target(); + } + + /** + * Action of the form + * + * @return string URL of the action + */ + + function action() + { + return common_local_url($this->target()); + } + + /** + * Legend of the Form + * + * @return void + */ + + function formLegend() + { + $this->out->element('legend', null, $this->description()); + } + + /** + * Data elements of the form + * + * @return void + */ + + function formData() + { + $action = $this->target(); + + $this->out->hidden($action.'to-' . $this->profile->id, + $this->profile->id, + $action.'to'); + + if ($this->args) { + foreach ($this->args as $k => $v) { + $this->out->hidden('returnto-' . $k, $v); + } + } + } + + /** + * Action elements + * + * @return void + */ + + function formActions() + { + $this->out->submit('submit', $this->title(), 'submit', + null, $this->description()); + } + + /** + * Action this form targets + * + * @return string Name of the action, lowercased. + */ + + function target() + { + return null; + } + + /** + * Title of the form + * + * @return string Title of the form, internationalized + */ + + function title() + { + return null; + } + + /** + * Description of the form + * + * @return string description of the form, internationalized + */ + + function description() + { + return null; + } +} -- cgit v1.2.3-54-g00ecf From 64677fc09a54546274a001ce9bec0fa4bc8132f7 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 16 Nov 2009 14:28:58 +0100 Subject: common superclass for actions that operate on a profile and return --- lib/profileactionform.php | 2 +- lib/profileformaction.php | 139 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 lib/profileformaction.php (limited to 'lib/profileactionform.php') diff --git a/lib/profileactionform.php b/lib/profileactionform.php index fb183b6b6..24d4595c0 100644 --- a/lib/profileactionform.php +++ b/lib/profileactionform.php @@ -131,7 +131,7 @@ class ProfileActionForm extends Form $this->out->hidden($action.'to-' . $this->profile->id, $this->profile->id, - $action.'to'); + 'profileid'); if ($this->args) { foreach ($this->args as $k => $v) { diff --git a/lib/profileformaction.php b/lib/profileformaction.php new file mode 100644 index 000000000..92e8611b9 --- /dev/null +++ b/lib/profileformaction.php @@ -0,0 +1,139 @@ +. + * + * @category Action + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * Superclass for actions that operate on a user + * + * @category Action + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + */ + +class ProfileFormAction extends Action +{ + var $profile = null; + + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + */ + + function prepare($args) + { + parent::prepare($args); + + $this->checkSessionToken(); + + if (!common_logged_in()) { + $this->clientError(_('Not logged in.')); + return false; + } + + $id = $this->trimmed('profileid'); + + if (!$id) { + $this->clientError(_('No profile specified.')); + return false; + } + + $this->profile = Profile::staticGet('id', $id); + + if (!$this->profile) { + $this->clientError(_('No profile with that ID.')); + return false; + } + + return true; + } + + /** + * Handle request + * + * Shows a page with list of favorite notices + * + * @param array $args $_REQUEST args; handled in prepare() + * + * @return void + */ + + function handle($args) + { + parent::handle($args); + + if ($_SERVER['REQUEST_METHOD'] == 'POST') { + $this->handlePost(); + $this->returnToArgs(); + } + } + + /** + * Return to the calling page based on hidden arguments + * + * @return void + */ + + function returnToArgs() + { + foreach ($this->args as $k => $v) { + if ($k == 'returnto-action') { + $action = $v; + } else if (substr($k, 0, 9) == 'returnto-') { + $args[substr($k, 9)] = $v; + } + } + + if ($action) { + common_redirect(common_local_url($action, $args), 303); + } else { + $this->clientError(_("No return-to arguments")); + } + } + + /** + * handle a POST request + * + * sub-classes should overload this request + * + * @return void + */ + + function handlePost() + { + return; + } +} -- cgit v1.2.3-54-g00ecf