X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fnoticeform.php;h=ee4e2ca9670fe8dbf29b16f29dbe21641099641e;hb=dca5e20b9122361b9cf0ea74bec5808f3d4a7ed2;hp=e604ee9fc48fe6b9d5639c1d205895c21a6d42c5;hpb=3730b650ab32e03eb5365e56ce87d43164d59946;p=quix0rs-gnu-social.git diff --git a/lib/noticeform.php b/lib/noticeform.php index e604ee9fc4..ee4e2ca967 100644 --- a/lib/noticeform.php +++ b/lib/noticeform.php @@ -53,7 +53,7 @@ class NoticeForm extends Form /** * Current action, used for returning to this page. */ - var $action = null; + var $actionName = null; /** * Pre-filled content of the form @@ -79,29 +79,66 @@ class NoticeForm extends Form var $location_id; var $location_ns; + /** select this group from the drop-down by default. */ + var $to_group; + + /** select this user from the drop-down by default. */ + var $to_profile; + + /** Pre-click the private checkbox. */ + var $private; + /** * Constructor * - * @param HTMLOutputter $out output channel - * @param string $action action to return to, if any - * @param string $content content to pre-fill + * @param Action $action Action we're being embedded into + * @param array $options Array of optional parameters + * 'user' a user instead of current + * 'content' notice content + * 'inreplyto' ID of notice to reply to + * 'lat' Latitude + * 'lon' Longitude + * 'location_id' ID of location + * 'location_ns' Namespace of location */ - function __construct($out=null, $action=null, $content=null, $user=null, $inreplyto=null, $lat=null, $lon=null, $location_id=null, $location_ns=null) + function __construct($action, $options=null) { + // XXX: ??? Is this to keep notice forms distinct? + // Do we have to worry about sub-second race conditions? + // XXX: Needs to be above the parent::__construct() call...? + $this->id_suffix = time(); - parent::__construct($out); + parent::__construct($action); + + if (is_null($options)) { + $options = array(); + } + + $this->actionName = $action->trimmed('action'); + + $prefill = array('content', 'inreplyto', 'lat', + 'lon', 'location_id', 'location_ns', + 'to_group', 'to_profile', 'private'); + + foreach ($prefill as $fieldName) { + if (array_key_exists($fieldName, $options)) { + $this->$fieldName = $options[$fieldName]; + } + } + + // Prefill the profile if we're replying - $this->action = $action; - $this->content = $content; - $this->inreplyto = $inreplyto; - $this->lat = $lat; - $this->lon = $lon; - $this->location_id = $location_id; - $this->location_ns = $location_ns; + if (empty($this->to_profile) && + !empty($this->inreplyto)) { + $notice = Notice::staticGet('id', $this->inreplyto); + if (!empty($notice)) { + $this->to_profile = $notice->getProfile(); + } + } - if ($user) { - $this->user = $user; + if (array_key_exists('user', $options)) { + $this->user = $options['user']; } else { $this->user = common_current_user(); } @@ -186,8 +223,8 @@ class NoticeForm extends Form if (common_config('attachments', 'uploads')) { $this->out->hidden('MAX_FILE_SIZE', common_config('attachments', 'file_quota')); - // TRANS: Input label in notice form for adding an attachment. $this->out->elementStart('label', array('class' => 'notice_data-attach')); + // TRANS: Input label in notice form for adding an attachment. $this->out->text(_('Attach')); $this->out->element('input', array('class' => 'notice_data-attach', 'type' => 'file', @@ -196,11 +233,19 @@ class NoticeForm extends Form 'title' => _('Attach a file.'))); $this->out->elementEnd('label'); } - if ($this->action) { - $this->out->hidden('notice_return-to', $this->action, 'returnto'); + if (!empty($this->actionName)) { + $this->out->hidden('notice_return-to', $this->actionName, 'returnto'); } $this->out->hidden('notice_in-reply-to', $this->inreplyto, 'inreplyto'); + $this->out->elementStart('div', 'to-selector'); + $toWidget = new ToSelector($this->out, + $this->user, + (!empty($this->to_group) ? $this->to_group : $this->to_profile)); + + $toWidget->show(); + $this->out->elementEnd('div'); + if ($this->user->shareLocation()) { $this->out->hidden('notice_data-lat', empty($this->lat) ? (empty($this->profile->lat) ? null : $this->profile->lat) : $this->lat, 'lat'); $this->out->hidden('notice_data-lon', empty($this->lon) ? (empty($this->profile->lon) ? null : $this->profile->lon) : $this->lon, 'lon');