| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * StatusNet, the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Upload an avatar | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * LICENCE: This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Settings | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @package   StatusNet | 
					
						
							| 
									
										
										
										
											2009-08-25 18:19:04 -04:00
										 |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @author    Zach Copley <zach@status.net> | 
					
						
							| 
									
										
										
										
											2011-06-09 16:20:19 -04:00
										 |  |  |  * @copyright 2008-2011 StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:16:46 -04:00
										 |  |  |  * @link      http://status.net/ | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-12 20:47:07 +01:00
										 |  |  | if (!defined('GNUSOCIAL')) { exit(1); } | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Upload an avatar | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * We use jCrop plugin for jQuery to crop the image after upload. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category Settings | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @package  StatusNet | 
					
						
							| 
									
										
										
										
											2009-08-25 18:19:04 -04:00
										 |  |  |  * @author   Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @author   Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @author   Sarven Capadisli <csarven@status.net> | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:16:46 -04:00
										 |  |  |  * @link     http://status.net/ | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2011-06-09 16:20:19 -04:00
										 |  |  | class GrouplogoAction extends GroupAction | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     var $mode = null; | 
					
						
							|  |  |  |     var $imagefile = null; | 
					
						
							|  |  |  |     var $filename = null; | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |     var $msg = null; | 
					
						
							|  |  |  |     var $success = null; | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Prepare to run | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-03-01 11:55:06 +01:00
										 |  |  |     protected function prepare(array $args=array()) | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         parent::prepare($args); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!common_logged_in()) { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Client error displayed when trying to create a group while not logged in.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             $this->clientError(_('You must be logged in to create a group.')); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $nickname_arg = $this->trimmed('nickname'); | 
					
						
							|  |  |  |         $nickname = common_canonical_nickname($nickname_arg); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Permanent redirect on non-canonical nickname
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($nickname_arg != $nickname) { | 
					
						
							|  |  |  |             $args = array('nickname' => $nickname); | 
					
						
							| 
									
										
										
										
											2009-03-08 01:30:11 +01:00
										 |  |  |             common_redirect(common_local_url('grouplogo', $args), 301); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!$nickname) { | 
					
						
							| 
									
										
										
										
											2011-01-31 16:39:54 +01:00
										 |  |  |             // TRANS: Client error displayed when trying to change group logo settings without providing a nickname.
 | 
					
						
							| 
									
										
										
										
											2010-01-10 12:26:24 +01:00
										 |  |  |             $this->clientError(_('No nickname.'), 404); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $groupid = $this->trimmed('groupid'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($groupid) { | 
					
						
							| 
									
										
										
										
											2013-08-18 13:04:58 +02:00
										 |  |  |             $this->group = User_group::getKV('id', $groupid); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2013-08-18 13:04:58 +02:00
										 |  |  |             $local = Local_group::getKV('nickname', $nickname); | 
					
						
							| 
									
										
										
										
											2010-02-25 08:44:15 -05:00
										 |  |  |             if ($local) { | 
					
						
							| 
									
										
										
										
											2013-08-18 13:04:58 +02:00
										 |  |  |                 $this->group = User_group::getKV('id', $local->group_id); | 
					
						
							| 
									
										
										
										
											2010-02-25 08:44:15 -05:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!$this->group) { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Client error displayed when trying to update logo settings for a non-existing group.
 | 
					
						
							| 
									
										
										
										
											2010-01-10 12:26:24 +01:00
										 |  |  |             $this->clientError(_('No such group.'), 404); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cur = common_current_user(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!$cur->isAdmin($this->group)) { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Client error displayed when trying to change group logo settings while not being a group admin.
 | 
					
						
							| 
									
										
										
										
											2010-01-10 12:26:24 +01:00
										 |  |  |             $this->clientError(_('You must be an admin to edit the group.'), 403); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-01 11:55:06 +01:00
										 |  |  |     protected function handle() | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2014-03-01 11:55:06 +01:00
										 |  |  |         parent::handle(); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         if ($_SERVER['REQUEST_METHOD'] == 'POST') { | 
					
						
							|  |  |  |             $this->handlePost(); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $this->showForm(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |     function showForm($msg = null, $success = false) | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |         $this->msg     = $msg; | 
					
						
							|  |  |  |         $this->success = $success; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         $this->showPage(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Title of the page | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string Title of the page | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function title() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Title for group logo settings page.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         return _('Group logo'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Instructions for use | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return instructions for use | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function getInstructions() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Instructions for group logo page.
 | 
					
						
							|  |  |  |         // TRANS: %s is the maximum file size for that site.
 | 
					
						
							| 
									
										
										
										
											2009-02-05 16:32:58 -05:00
										 |  |  |         return sprintf(_('You can upload a logo image for your group. The maximum file size is %s.'), ImageFile::maxFileSize()); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Content area of the page | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Shows a form for uploading an avatar. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function showContent() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($this->mode == 'crop') { | 
					
						
							|  |  |  |             $this->showCropForm(); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $this->showUploadForm(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showUploadForm() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $user = common_current_user(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $profile = $user->getProfile(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!$profile) { | 
					
						
							|  |  |  |             common_log_db_error($user, 'SELECT', __FILE__); | 
					
						
							| 
									
										
										
										
											2011-04-25 14:48:19 +02:00
										 |  |  |             // TRANS: Error message displayed when referring to a user without a profile.
 | 
					
						
							|  |  |  |             $this->serverError(_('User has no profile.')); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $original = $this->group->original_logo; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementStart('form', array('enctype' => 'multipart/form-data', | 
					
						
							|  |  |  |                                           'method' => 'post', | 
					
						
							| 
									
										
										
										
											2009-01-23 10:47:11 +00:00
										 |  |  |                                           'id' => 'form_settings_avatar', | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |                                           'class' => 'form_settings', | 
					
						
							|  |  |  |                                           'action' => | 
					
						
							|  |  |  |                                           common_local_url('grouplogo', | 
					
						
							|  |  |  |                                                            array('nickname' => $this->group->nickname)))); | 
					
						
							|  |  |  |         $this->elementStart('fieldset'); | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Group logo form legend.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         $this->element('legend', null, _('Group logo')); | 
					
						
							|  |  |  |         $this->hidden('token', common_session_token()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementStart('ul', 'form_data'); | 
					
						
							|  |  |  |         if ($original) { | 
					
						
							|  |  |  |             $this->elementStart('li', array('id' => 'avatar_original', | 
					
						
							|  |  |  |                                             'class' => 'avatar_view')); | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Uploaded original file in group logo form.
 | 
					
						
							| 
									
										
										
										
											2011-02-17 00:39:53 +01:00
										 |  |  |             $this->element('h2', null, _('Original')); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             $this->elementStart('div', array('id'=>'avatar_original_view')); | 
					
						
							|  |  |  |             $this->element('img', array('src' => $this->group->original_logo, | 
					
						
							|  |  |  |                                         'alt' => $this->group->nickname)); | 
					
						
							|  |  |  |             $this->elementEnd('div'); | 
					
						
							|  |  |  |             $this->elementEnd('li'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->group->homepage_logo) { | 
					
						
							|  |  |  |             $this->elementStart('li', array('id' => 'avatar_preview', | 
					
						
							|  |  |  |                                             'class' => 'avatar_view')); | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Header for preview of to be displayed group logo.
 | 
					
						
							| 
									
										
										
										
											2011-02-17 00:39:53 +01:00
										 |  |  |             $this->element('h2', null, _('Preview')); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             $this->elementStart('div', array('id'=>'avatar_preview_view')); | 
					
						
							|  |  |  |             $this->element('img', array('src' => $this->group->homepage_logo, | 
					
						
							|  |  |  |                                         'width' => AVATAR_PROFILE_SIZE, | 
					
						
							|  |  |  |                                         'height' => AVATAR_PROFILE_SIZE, | 
					
						
							|  |  |  |                                         'alt' => $this->group->nickname)); | 
					
						
							|  |  |  |             $this->elementEnd('div'); | 
					
						
							|  |  |  |             $this->elementEnd('li'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementStart('li', array ('id' => 'settings_attach')); | 
					
						
							|  |  |  |         $this->element('input', array('name' => 'MAX_FILE_SIZE', | 
					
						
							|  |  |  |                                       'type' => 'hidden', | 
					
						
							|  |  |  |                                       'id' => 'MAX_FILE_SIZE', | 
					
						
							| 
									
										
										
										
											2009-02-05 16:32:58 -05:00
										 |  |  |                                       'value' => ImageFile::maxFileSizeInt())); | 
					
						
							| 
									
										
										
										
											2011-01-26 15:49:57 -08:00
										 |  |  |         $this->element('input', array('name' => 'avatarfile', | 
					
						
							|  |  |  |                                       'type' => 'file', | 
					
						
							|  |  |  |                                       'id' => 'avatarfile')); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         $this->elementEnd('li'); | 
					
						
							|  |  |  |         $this->elementEnd('ul'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementStart('ul', 'form_actions'); | 
					
						
							|  |  |  |         $this->elementStart('li'); | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Submit button for uploading a group logo.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         $this->submit('upload', _('Upload')); | 
					
						
							|  |  |  |         $this->elementEnd('li'); | 
					
						
							|  |  |  |         $this->elementEnd('ul'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementEnd('fieldset'); | 
					
						
							|  |  |  |         $this->elementEnd('form'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showCropForm() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->elementStart('form', array('method' => 'post', | 
					
						
							|  |  |  |                                           'id' => 'form_settings_avatar', | 
					
						
							|  |  |  |                                           'class' => 'form_settings', | 
					
						
							|  |  |  |                                           'action' => | 
					
						
							|  |  |  |                                           common_local_url('grouplogo', | 
					
						
							|  |  |  |                                                            array('nickname' => $this->group->nickname)))); | 
					
						
							|  |  |  |         $this->elementStart('fieldset'); | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Legend for group logo settings fieldset.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         $this->element('legend', null, _('Avatar settings')); | 
					
						
							|  |  |  |         $this->hidden('token', common_session_token()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementStart('ul', 'form_data'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementStart('li', | 
					
						
							|  |  |  |                             array('id' => 'avatar_original', | 
					
						
							|  |  |  |                                   'class' => 'avatar_view')); | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Header for originally uploaded file before a crop on the group logo page.
 | 
					
						
							| 
									
										
										
										
											2011-02-17 00:39:53 +01:00
										 |  |  |         $this->element('h2', null, _('Original')); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         $this->elementStart('div', array('id'=>'avatar_original_view')); | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |         $this->element('img', array('src' => Avatar::url($this->filedata['filename']), | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |                                     'width' => $this->filedata['width'], | 
					
						
							|  |  |  |                                     'height' => $this->filedata['height'], | 
					
						
							|  |  |  |                                     'alt' => $this->group->nickname)); | 
					
						
							|  |  |  |         $this->elementEnd('div'); | 
					
						
							|  |  |  |         $this->elementEnd('li'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementStart('li', | 
					
						
							|  |  |  |                             array('id' => 'avatar_preview', | 
					
						
							|  |  |  |                                   'class' => 'avatar_view')); | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Header for the cropped group logo on the group logo page.
 | 
					
						
							| 
									
										
										
										
											2011-02-17 00:39:53 +01:00
										 |  |  |         $this->element('h2', null, _('Preview')); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         $this->elementStart('div', array('id'=>'avatar_preview_view')); | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |         $this->element('img', array('src' => Avatar::url($this->filedata['filename']), | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |                                     'width' => AVATAR_PROFILE_SIZE, | 
					
						
							|  |  |  |                                     'height' => AVATAR_PROFILE_SIZE, | 
					
						
							|  |  |  |                                     'alt' => $this->group->nickname)); | 
					
						
							|  |  |  |         $this->elementEnd('div'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach (array('avatar_crop_x', 'avatar_crop_y', | 
					
						
							|  |  |  |                        'avatar_crop_w', 'avatar_crop_h') as $crop_info) { | 
					
						
							|  |  |  |             $this->element('input', array('name' => $crop_info, | 
					
						
							|  |  |  |                                           'type' => 'hidden', | 
					
						
							|  |  |  |                                           'id' => $crop_info)); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Button text for cropping an uploaded group logo.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         $this->submit('crop', _('Crop')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementEnd('li'); | 
					
						
							|  |  |  |         $this->elementEnd('ul'); | 
					
						
							|  |  |  |         $this->elementEnd('fieldset'); | 
					
						
							|  |  |  |         $this->elementEnd('form'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Handle a post | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * We mux on the button name to figure out what the user actually wanted. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function handlePost() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // CSRF protection
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $token = $this->trimmed('token'); | 
					
						
							|  |  |  |         if (!$token || $token != common_session_token()) { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Form validation error message.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             $this->show_form(_('There was a problem with your session token. '. | 
					
						
							|  |  |  |                                'Try again, please.')); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->arg('upload')) { | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |             $this->uploadLogo(); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } else if ($this->arg('crop')) { | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |             $this->cropLogo(); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Form validation error message when an unsupported argument is used.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             $this->showForm(_('Unexpected form submission.')); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Handle an image upload | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Does all the magic for handling an image upload, and crops the | 
					
						
							|  |  |  |      * image by default. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |     function uploadLogo() | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $imagefile = ImageFile::fromUpload('avatarfile'); | 
					
						
							|  |  |  |         } catch (Exception $e) { | 
					
						
							|  |  |  |             $this->showForm($e->getMessage()); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-24 12:22:47 -08:00
										 |  |  |         $type = $imagefile->preferredType(); | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |         $filename = Avatar::filename($this->group->id, | 
					
						
							| 
									
										
										
										
											2011-01-24 12:22:47 -08:00
										 |  |  |                                      image_type_to_extension($type), | 
					
						
							| 
									
										
										
										
											2009-02-06 03:54:51 -05:00
										 |  |  |                                      null, | 
					
						
							|  |  |  |                                      'group-temp-'.common_timestamp()); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |         $filepath = Avatar::path($filename); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-24 12:22:47 -08:00
										 |  |  |         $imagefile->copyTo($filepath); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $filedata = array('filename' => $filename, | 
					
						
							|  |  |  |                           'filepath' => $filepath, | 
					
						
							|  |  |  |                           'width' => $imagefile->width, | 
					
						
							|  |  |  |                           'height' => $imagefile->height, | 
					
						
							| 
									
										
										
										
											2011-01-24 12:22:47 -08:00
										 |  |  |                           'type' => $type); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $_SESSION['FILEDATA'] = $filedata; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->filedata = $filedata; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->mode = 'crop'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |         // TRANS: Form instructions on the group logo page.
 | 
					
						
							| 
									
										
										
										
											2009-02-04 14:44:12 -05:00
										 |  |  |         $this->showForm(_('Pick a square area of the image to be the logo.'), | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |                         true); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Handle the results of jcrop. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |     function cropLogo() | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         $filedata = $_SESSION['FILEDATA']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!$filedata) { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Server error displayed trying to crop an uploaded group logo that is no longer present.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             $this->serverError(_('Lost our file data.')); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-02-05 16:32:58 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-04 14:44:12 -05:00
										 |  |  |         // If image is not being cropped assume pos & dimentions of original
 | 
					
						
							|  |  |  |         $dest_x = $this->arg('avatar_crop_x') ? $this->arg('avatar_crop_x'):0; | 
					
						
							|  |  |  |         $dest_y = $this->arg('avatar_crop_y') ? $this->arg('avatar_crop_y'):0; | 
					
						
							|  |  |  |         $dest_w = $this->arg('avatar_crop_w') ? $this->arg('avatar_crop_w'):$filedata['width']; | 
					
						
							|  |  |  |         $dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$filedata['height']; | 
					
						
							| 
									
										
										
										
											2015-03-12 20:47:07 +01:00
										 |  |  |         $size = min($dest_w, $dest_h, common_config('avatar', 'maxsize')); | 
					
						
							|  |  |  |         $box = array('width' => $size, 'height' => $size, | 
					
						
							|  |  |  |                      'x' => $dest_x,   'y' => $dest_y, | 
					
						
							|  |  |  |                      'w' => $dest_w,   'h' => $dest_h); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $profile = $this->group->getProfile(); | 
					
						
							| 
									
										
										
										
											2009-02-05 16:32:58 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-11 00:20:48 +01:00
										 |  |  |         $imagefile = new ImageFile(null, $filedata['filepath']); | 
					
						
							| 
									
										
										
										
											2015-03-12 20:47:07 +01:00
										 |  |  |         $filename = Avatar::filename($profile->getID(), image_type_to_extension($imagefile->preferredType()), | 
					
						
							|  |  |  |                                      $size, common_timestamp()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $imagefile->resizeTo(Avatar::path($filename), $box); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-12 20:47:07 +01:00
										 |  |  |         if ($profile->setOriginal($filename)) { | 
					
						
							| 
									
										
										
										
											2009-02-04 19:32:15 -05:00
										 |  |  |             @unlink($filedata['filepath']); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             unset($_SESSION['FILEDATA']); | 
					
						
							|  |  |  |             $this->mode = 'upload'; | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Form success message after updating a group logo.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             $this->showForm(_('Logo updated.'), true); | 
					
						
							|  |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             // TRANS: Form failure message after failing to update a group logo.
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |             $this->showForm(_('Failed updating logo.')); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showPageNotice() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($this->msg) { | 
					
						
							|  |  |  |             $this->element('div', ($this->success) ? 'success' : 'error', | 
					
						
							|  |  |  |                            $this->msg); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $inst   = $this->getInstructions(); | 
					
						
							|  |  |  |             $output = common_markup_to_html($inst); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $this->elementStart('div', 'instructions'); | 
					
						
							|  |  |  |             $this->raw($output); | 
					
						
							|  |  |  |             $this->elementEnd('div'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Add the jCrop stylesheet | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function showStylesheets() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::showStylesheets(); | 
					
						
							| 
									
										
										
										
											2013-09-14 12:31:53 +02:00
										 |  |  |         $this->cssLink('js/extlib/jquery-jcrop/css/jcrop.css','base','screen, projection, tv'); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Add the jCrop scripts | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function showScripts() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::showScripts(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |         if ($this->mode == 'crop') { | 
					
						
							| 
									
										
										
										
											2013-09-14 12:31:53 +02:00
										 |  |  |             $this->script('extlib/jquery-jcrop/jcrop.js'); | 
					
						
							|  |  |  |             $this->script('jcrop.go.js'); | 
					
						
							| 
									
										
										
										
											2009-01-28 23:00:01 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-09-03 19:42:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->autofocus('avatarfile'); | 
					
						
							| 
									
										
										
										
											2009-01-23 08:15:29 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | } |