| 
									
										
										
										
											2008-12-25 09:46:01 -05:00
										 |  |  | hunk ./actions/profilesettings.php 57 | 
					
						
							|  |  |  | -		if ($this->arg('save')) { | 
					
						
							|  |  |  | -			$this->save_profile(); | 
					
						
							|  |  |  | -		} else if ($this->arg('upload')) { | 
					
						
							|  |  |  | -			$this->upload_avatar(); | 
					
						
							|  |  |  | -		} else if ($this->arg('changepass')) { | 
					
						
							|  |  |  | -			$this->change_password(); | 
					
						
							|  |  |  | -		} | 
					
						
							|  |  |  | +        if ($this->arg('save')) { | 
					
						
							|  |  |  | +            $this->save_profile(); | 
					
						
							|  |  |  | +        } else if ($this->arg('upload')) { | 
					
						
							|  |  |  | +            $this->upload_avatar(); | 
					
						
							|  |  |  | +        } else if ($this->arg('crop')) { | 
					
						
							|  |  |  | +            $this->crop_avatar(); | 
					
						
							|  |  |  | +        } else if ($this->arg('changepass')) { | 
					
						
							|  |  |  | +            $this->change_password(); | 
					
						
							|  |  |  | +        } else { | 
					
						
							|  |  |  | +            $this->show_form(_('Unexpected form submission.')); | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | hunk ./actions/profilesettings.php 77 | 
					
						
							|  |  |  | -		common_element_start('form', array('method' => 'POST', | 
					
						
							|  |  |  | -										   'id' => 'profilesettings', | 
					
						
							|  |  |  | -										   'action' => | 
					
						
							|  |  |  | -										   common_local_url('profilesettings'))); | 
					
						
							|  |  |  | -		common_hidden('token', common_session_token()); | 
					
						
							|  |  |  | -		 | 
					
						
							|  |  |  | -		# too much common patterns here... abstractable? | 
					
						
							|  |  |  | -		 | 
					
						
							|  |  |  | -		common_input('nickname', _('Nickname'), | 
					
						
							|  |  |  | -					 ($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname, | 
					
						
							|  |  |  | -					 _('1-64 lowercase letters or numbers, no punctuation or spaces')); | 
					
						
							|  |  |  | -		common_input('fullname', _('Full name'), | 
					
						
							|  |  |  | -					 ($this->arg('fullname')) ? $this->arg('fullname') : $profile->fullname); | 
					
						
							|  |  |  | -		common_input('homepage', _('Homepage'), | 
					
						
							|  |  |  | -					 ($this->arg('homepage')) ? $this->arg('homepage') : $profile->homepage, | 
					
						
							|  |  |  | -					 _('URL of your homepage, blog, or profile on another site')); | 
					
						
							|  |  |  | -		common_textarea('bio', _('Bio'), | 
					
						
							|  |  |  | -						($this->arg('bio')) ? $this->arg('bio') : $profile->bio, | 
					
						
							|  |  |  | -						_('Describe yourself and your interests in 140 chars')); | 
					
						
							|  |  |  | -		common_input('location', _('Location'), | 
					
						
							|  |  |  | -					 ($this->arg('location')) ? $this->arg('location') : $profile->location, | 
					
						
							|  |  |  | -					 _('Where you are, like "City, State (or Region), Country"')); | 
					
						
							|  |  |  | -		common_input('tags', _('Tags'), | 
					
						
							|  |  |  | -					 ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()), | 
					
						
							|  |  |  | -					 _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated')); | 
					
						
							|  |  |  | +        common_element_start('form', array('method' => 'POST', | 
					
						
							|  |  |  | +                                           'id' => 'profilesettings', | 
					
						
							|  |  |  | +                                           'action' => common_local_url('profilesettings'))); | 
					
						
							|  |  |  | +        common_hidden('token', common_session_token()); | 
					
						
							|  |  |  | +         | 
					
						
							|  |  |  | +        # too much common patterns here... abstractable? | 
					
						
							|  |  |  | +         | 
					
						
							|  |  |  | +        common_input('nickname', _('Nickname'), | 
					
						
							|  |  |  | +                     ($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname, | 
					
						
							|  |  |  | +                     _('1-64 lowercase letters or numbers, no punctuation or spaces')); | 
					
						
							|  |  |  | +        common_input('fullname', _('Full name'), | 
					
						
							|  |  |  | +                     ($this->arg('fullname')) ? $this->arg('fullname') : $profile->fullname); | 
					
						
							|  |  |  | +        common_input('homepage', _('Homepage'), | 
					
						
							|  |  |  | +                     ($this->arg('homepage')) ? $this->arg('homepage') : $profile->homepage, | 
					
						
							|  |  |  | +                     _('URL of your homepage, blog, or profile on another site')); | 
					
						
							|  |  |  | +        common_textarea('bio', _('Bio'), | 
					
						
							|  |  |  | +                        ($this->arg('bio')) ? $this->arg('bio') : $profile->bio, | 
					
						
							|  |  |  | +                        _('Describe yourself and your interests in 140 chars')); | 
					
						
							|  |  |  | +        common_input('location', _('Location'), | 
					
						
							|  |  |  | +                     ($this->arg('location')) ? $this->arg('location') : $profile->location, | 
					
						
							|  |  |  | +                     _('Where you are, like "City, State (or Region), Country"')); | 
					
						
							|  |  |  | +        common_input('tags', _('Tags'), | 
					
						
							|  |  |  | +                     ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()), | 
					
						
							|  |  |  | +                     _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated')); | 
					
						
							|  |  |  | hunk ./actions/profilesettings.php 118 | 
					
						
							|  |  |  | - | 
					
						
							|  |  |  | hunk ./actions/profilesettings.php 142 | 
					
						
							|  |  |  | -		if ($original) { | 
					
						
							|  |  |  | -			common_element('img', array('src' => $original->url, | 
					
						
							|  |  |  | -										'class' => 'avatar original', | 
					
						
							|  |  |  | -										'width' => $original->width, | 
					
						
							|  |  |  | -										'height' => $original->height, | 
					
						
							|  |  |  | -										'alt' => $user->nickname)); | 
					
						
							|  |  |  | -		} | 
					
						
							|  |  |  | +        if ($original) { | 
					
						
							|  |  |  | +            common_element_start('div', array('id'=>'avatar_original', 'class'=>'avatar_view')); | 
					
						
							|  |  |  | +            common_element('h3', null, _("Original:")); | 
					
						
							|  |  |  | +            common_element_start('div', array('id'=>'avatar_original_view')); | 
					
						
							|  |  |  | +            common_element('img', array('src' => $original->url, | 
					
						
							|  |  |  | +                                        'class' => 'avatar original', | 
					
						
							|  |  |  | +                                        'width' => $original->width, | 
					
						
							|  |  |  | +                                        'height' => $original->height, | 
					
						
							|  |  |  | +                                        'alt' => $user->nickname)); | 
					
						
							|  |  |  | +            common_element_end('div'); | 
					
						
							|  |  |  | +            common_element_end('div'); | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | hunk ./actions/profilesettings.php 157 | 
					
						
							|  |  |  | -		if ($avatar) { | 
					
						
							|  |  |  | -			common_element('img', array('src' => $avatar->url, | 
					
						
							|  |  |  | -										'class' => 'avatar profile', | 
					
						
							|  |  |  | -										'width' => AVATAR_PROFILE_SIZE, | 
					
						
							|  |  |  | -										'height' => AVATAR_PROFILE_SIZE, | 
					
						
							|  |  |  | -										'alt' => $user->nickname)); | 
					
						
							|  |  |  | -		} | 
					
						
							|  |  |  | +        if ($avatar) { | 
					
						
							|  |  |  | +            common_element_start('div', array('id'=>'avatar_preview', 'class'=>'avatar_view')); | 
					
						
							|  |  |  | +            common_element('h3', null, _("Preview:")); | 
					
						
							|  |  |  | +            common_element_start('div', array('id'=>'avatar_preview_view')); | 
					
						
							|  |  |  | +            common_element('img', array('src' => $original->url,//$avatar->url, | 
					
						
							|  |  |  | +                                        'class' => 'avatar profile', | 
					
						
							|  |  |  | +                                        'width' => AVATAR_PROFILE_SIZE, | 
					
						
							|  |  |  | +                                        'height' => AVATAR_PROFILE_SIZE, | 
					
						
							|  |  |  | +                                        'alt' => $user->nickname)); | 
					
						
							|  |  |  | +            common_element_end('div'); | 
					
						
							|  |  |  | +            common_element_end('div'); | 
					
						
							|  |  |  | hunk ./actions/profilesettings.php 169 | 
					
						
							|  |  |  | +            foreach(array('avatar_crop_x', 'avatar_crop_y', 'avatar_crop_w', 'avatar_crop_h') as $crop_info) { | 
					
						
							|  |  |  | +                common_element('input', array('name' => $crop_info, | 
					
						
							|  |  |  | +                                              'type' => 'hidden', | 
					
						
							|  |  |  | +                                              'id' => $crop_info)); | 
					
						
							|  |  |  | +            } | 
					
						
							|  |  |  | +            common_submit('crop', _('Crop')); | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | hunk ./actions/profilesettings.php 184 | 
					
						
							|  |  |  | - | 
					
						
							|  |  |  | hunk ./actions/profilesettings.php 410 | 
					
						
							|  |  |  | -		@unlink($_FILES['avatarfile']['tmp_name']); | 
					
						
							|  |  |  | -	} | 
					
						
							|  |  |  | +        @unlink($_FILES['avatarfile']['tmp_name']); | 
					
						
							|  |  |  | +    } | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +    function crop_avatar() { | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        $user = common_current_user(); | 
					
						
							|  |  |  | +        $profile = $user->getProfile(); | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        $x = $this->arg('avatar_crop_x'); | 
					
						
							|  |  |  | +        $y = $this->arg('avatar_crop_y'); | 
					
						
							|  |  |  | +        $w = $this->arg('avatar_crop_w'); | 
					
						
							|  |  |  | +        $h = $this->arg('avatar_crop_h'); | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        if ($profile->crop_avatars($x, $y, $w, $h)) { | 
					
						
							|  |  |  | +            $this->show_form(_('Avatar updated.'), true); | 
					
						
							|  |  |  | +        } else { | 
					
						
							|  |  |  | +            $this->show_form(_('Failed updating avatar.')); | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | +    } | 
					
						
							|  |  |  | hunk ./classes/Avatar.php 82 | 
					
						
							|  |  |  | -	function to_image() { | 
					
						
							|  |  |  | -		$filepath = common_avatar_path($this->filename); | 
					
						
							|  |  |  | -		if ($this->mediatype == 'image/gif') { | 
					
						
							|  |  |  | -			return imagecreatefromgif($filepath); | 
					
						
							|  |  |  | -		} else if ($this->mediatype == 'image/jpeg') { | 
					
						
							|  |  |  | -			return imagecreatefromjpeg($filepath); | 
					
						
							|  |  |  | -		} else if ($this->mediatype == 'image/png') { | 
					
						
							|  |  |  | -			return imagecreatefrompng($filepath); | 
					
						
							|  |  |  | -		} else { | 
					
						
							|  |  |  | -			return NULL; | 
					
						
							|  |  |  | -		} | 
					
						
							|  |  |  | -	} | 
					
						
							|  |  |  | -	 | 
					
						
							|  |  |  | -	function &pkeyGet($kv) { | 
					
						
							|  |  |  | -		return Memcached_DataObject::pkeyGet('Avatar', $kv); | 
					
						
							|  |  |  | -	} | 
					
						
							|  |  |  | +    function scale_and_crop($size, $x, $y, $w, $h)  | 
					
						
							|  |  |  | +    { | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        $image_s = imagecreatetruecolor($size, $size); | 
					
						
							|  |  |  | +        $image_a = $this->to_image(); | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        # Retain alpha channel info if possible for .pngs | 
					
						
							|  |  |  | +        $background = imagecolorallocate($image_s, 0, 0, 0); | 
					
						
							|  |  |  | +        ImageColorTransparent($image_s, $background); | 
					
						
							|  |  |  | +        imagealphablending($image_s, false); | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        imagecopyresized($image_s, $image_a, 0, 0, $x, $y, $size, $size, $w, $h); | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        $ext = ($this->mediattype == 'image/jpeg') ? ".jpeg" : ".png"; | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        $filename = common_avatar_filename($this->profile_id, $ext, $size, common_timestamp()); | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        if ($this->mediatype == 'image/jpeg') { | 
					
						
							|  |  |  | +            imagejpeg($image_s, common_avatar_path($filename)); | 
					
						
							|  |  |  | +        } else { | 
					
						
							|  |  |  | +            imagepng($image_s, common_avatar_path($filename)); | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        $cropped = DB_DataObject::factory('avatar'); | 
					
						
							|  |  |  | +        $cropped->profile_id = $this->profile_id; | 
					
						
							|  |  |  | +        $cropped->width = $size; | 
					
						
							|  |  |  | +        $cropped->height = $size; | 
					
						
							|  |  |  | +        $cropped->original = false; | 
					
						
							|  |  |  | +        $cropped->mediatype = ($this->mediattype == 'image/jpeg') ? 'image/jpeg' : 'image/png'; | 
					
						
							|  |  |  | +        $cropped->filename = $filename; | 
					
						
							|  |  |  | +        $cropped->url = common_avatar_url($filename); | 
					
						
							|  |  |  | +        $cropped->created = DB_DataObject_Cast::dateTime(); # current time | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        if ($cropped->insert()) { | 
					
						
							|  |  |  | +            return $cropped; | 
					
						
							|  |  |  | +        } else { | 
					
						
							|  |  |  | +            return NULL; | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | +    } | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +    function to_image()  | 
					
						
							|  |  |  | +    { | 
					
						
							|  |  |  | +        $filepath = common_avatar_path($this->filename); | 
					
						
							|  |  |  | +        if ($this->mediatype == 'image/gif') { | 
					
						
							|  |  |  | +            return imagecreatefromgif($filepath); | 
					
						
							|  |  |  | +        } else if ($this->mediatype == 'image/jpeg') { | 
					
						
							|  |  |  | +            return imagecreatefromjpeg($filepath); | 
					
						
							|  |  |  | +        } else if ($this->mediatype == 'image/png') { | 
					
						
							|  |  |  | +            return imagecreatefrompng($filepath); | 
					
						
							|  |  |  | +        } else { | 
					
						
							|  |  |  | +            return NULL; | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | +    } | 
					
						
							|  |  |  | +     | 
					
						
							|  |  |  | +    function &pkeyGet($kv)  | 
					
						
							|  |  |  | +    { | 
					
						
							|  |  |  | +        return Memcached_DataObject::pkeyGet('Avatar', $kv); | 
					
						
							|  |  |  | +    } | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | hunk ./classes/Profile.php 124 | 
					
						
							|  |  |  | -	function delete_avatars() { | 
					
						
							|  |  |  | -		$avatar = new Avatar(); | 
					
						
							|  |  |  | -		$avatar->profile_id = $this->id; | 
					
						
							|  |  |  | -		$avatar->find(); | 
					
						
							|  |  |  | -		while ($avatar->fetch()) { | 
					
						
							|  |  |  | -			$avatar->delete(); | 
					
						
							|  |  |  | -		} | 
					
						
							|  |  |  | -		return true; | 
					
						
							|  |  |  | -	} | 
					
						
							|  |  |  | +    function crop_avatars($x, $y, $w, $h)  | 
					
						
							|  |  |  | +    { | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        $avatar = $this->getOriginalAvatar(); | 
					
						
							|  |  |  | +        $this->delete_avatars(false); # don't delete original | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +        foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { | 
					
						
							|  |  |  | +            # We don't do a scaled one if original is our scaled size | 
					
						
							|  |  |  | +            if (!($avatar->width == $size && $avatar->height == $size)) { | 
					
						
							|  |  |  | +                $s = $avatar->scale_and_crop($size, $x, $y, $w, $h); | 
					
						
							|  |  |  | +                if (!$s) { | 
					
						
							|  |  |  | +                    return NULL; | 
					
						
							|  |  |  | +                } | 
					
						
							|  |  |  | +            } | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | +        return true; | 
					
						
							|  |  |  | +    } | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +    function delete_avatars($original=true)  | 
					
						
							|  |  |  | +    { | 
					
						
							|  |  |  | +        $avatar = new Avatar(); | 
					
						
							|  |  |  | +        $avatar->profile_id = $this->id; | 
					
						
							|  |  |  | +        $avatar->find(); | 
					
						
							|  |  |  | +        while ($avatar->fetch()) { | 
					
						
							|  |  |  | +            if ($avatar->original) { | 
					
						
							|  |  |  | +                if ($original == false) { | 
					
						
							|  |  |  | +                    continue; | 
					
						
							|  |  |  | +                } | 
					
						
							|  |  |  | +            } | 
					
						
							|  |  |  | +            $avatar->delete(); | 
					
						
							|  |  |  | +        } | 
					
						
							|  |  |  | +        return true; | 
					
						
							|  |  |  | +    } | 
					
						
							|  |  |  | hunk ./lib/settingsaction.php 63 | 
					
						
							|  |  |  | -	function form_header($title, $msg=NULL, $success=false) { | 
					
						
							|  |  |  | -		common_show_header($title, | 
					
						
							|  |  |  | -		                   NULL, | 
					
						
							|  |  |  | -		                   array($msg, $success), | 
					
						
							|  |  |  | -						   array($this, 'show_top')); | 
					
						
							|  |  |  | -	} | 
					
						
							|  |  |  | +    function form_header($title, $msg=NULL, $success=false)  | 
					
						
							|  |  |  | +    { | 
					
						
							|  |  |  | +        common_show_header($title, | 
					
						
							|  |  |  | +                           array($this, 'show_header'), | 
					
						
							|  |  |  | +                           array($msg, $success), | 
					
						
							|  |  |  | +                           array($this, 'show_top')); | 
					
						
							|  |  |  | +    } | 
					
						
							|  |  |  | + | 
					
						
							|  |  |  | +    function show_header()  | 
					
						
							|  |  |  | +    { | 
					
						
							|  |  |  | +        common_element('link', array('rel' => 'stylesheet', | 
					
						
							|  |  |  | +                                     'type' => 'text/css', | 
					
						
							|  |  |  | +                                     'href' => common_path('js/jcrop/jquery.Jcrop.css?version='.LACONICA_VERSION), | 
					
						
							|  |  |  | +                                     'media' => 'screen, projection, tv')); | 
					
						
							|  |  |  | +        common_element('script', array('type' => 'text/javascript', | 
					
						
							|  |  |  | +                                       'src' => common_path('js/jcrop/jquery.Jcrop.pack.js'))); | 
					
						
							|  |  |  | +        common_element('script', array('type' => 'text/javascript', | 
					
						
							|  |  |  | +                                       'src' => common_path('js/jcrop/jquery.Jcrop.go.js'))); | 
					
						
							|  |  |  | +    } |