From 4bb522c3faa23a738c1a47440759aff741925d78 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 6 Jan 2009 15:57:38 -0500 Subject: [PATCH] trac750 better settings tab workflow darcs-hash:20090106205738-7b5ce-e80f73130a1f699e8d33f31c63cf90ee259b72cd.gz --- _darcs/inventory | 4 +- ...80f73130a1f699e8d33f31c63cf90ee259b72cd.gz | Bin 0 -> 436 bytes _darcs/pristine/actions/facebookhome.php | 2 +- _darcs/pristine/actions/facebooksettings.php | 8 +- _darcs/pristine/lib/facebookaction.php | 2 +- _darcs/tentative_pristine | 300 +----------------- actions/facebookhome.php | 2 +- actions/facebooksettings.php | 8 +- lib/facebookaction.php | 2 +- 9 files changed, 34 insertions(+), 294 deletions(-) create mode 100644 _darcs/patches/20090106205738-7b5ce-e80f73130a1f699e8d33f31c63cf90ee259b72cd.gz diff --git a/_darcs/inventory b/_darcs/inventory index 22b47336e1..70a030e46f 100644 --- a/_darcs/inventory +++ b/_darcs/inventory @@ -126,4 +126,6 @@ csarven@controlyourself.ca**20081210025922] [Actually crop your avatar when hitting 'crop' button on profile Zach Copley **20081212043018] [Some fixups of patches not already migrated to trunk to bring inline with PEAR coding stds -Zach Copley **20081225144601] \ No newline at end of file +Zach Copley **20081225144601] +[trac750 better settings tab workflow +Zach Copley **20090106205738] \ No newline at end of file diff --git a/_darcs/patches/20090106205738-7b5ce-e80f73130a1f699e8d33f31c63cf90ee259b72cd.gz b/_darcs/patches/20090106205738-7b5ce-e80f73130a1f699e8d33f31c63cf90ee259b72cd.gz new file mode 100644 index 0000000000000000000000000000000000000000..74db175f1c526c895da6c1c8491c0c92c98c345d GIT binary patch literal 436 zcmV;l0ZaZLiwFP!000001I1HYYuhjse)q39Gl3*6zAPh4m)T}vFxcB(w^4#DA6Fu> zBqW)TjsEwkQJThVrhOPx50-`Wo$qp_pUx1vTINurb7;W&iOV|+j?}PMX4eX}kA4u! z;Iq;K4^aH_i%(QZXOuXo-dGfEN=bEfwaD`i`P=;cB44iF-Q2?Oi1l&@X-25yO4_U? z6l|>fAB%GFItc_~9z}Qm^ zO?arTUXCs@?JK-U#yYs=U=;(EL7bweD+Rlye3 zM);d^5t&mEwxK(mqk{k}G7l)Se=!VtccCU&e+@y$Aibz3S-geWinsert(); if ($flink_id) { - echo ''; + echo ''; } $this->show_home($facebook, $fbuid, $user); diff --git a/_darcs/pristine/actions/facebooksettings.php b/_darcs/pristine/actions/facebooksettings.php index 469bcfc459..d28b1aa5ca 100644 --- a/_darcs/pristine/actions/facebooksettings.php +++ b/_darcs/pristine/actions/facebooksettings.php @@ -69,10 +69,12 @@ class FacebooksettingsAction extends FacebookAction $fbml = '' .'

Add an Identi.ca box to my profile

' - .'' + .'

' .'
'; - $fbml .= '

Allow Identi.ca to update my Facebook status

'; + $fbml .= '

Allow Identi.ca to update my Facebook status

'; + + if ($facebook->api_client->users_hasAppPermission('status_update')) { $fbml .= '
' .'

Sync preferences

' @@ -101,6 +103,8 @@ class FacebooksettingsAction extends FacebookAction .'

' .'
'; + } + echo $fbml; $this->show_footer(); diff --git a/_darcs/pristine/lib/facebookaction.php b/_darcs/pristine/lib/facebookaction.php index 7fa097587d..9230bad593 100644 --- a/_darcs/pristine/lib/facebookaction.php +++ b/_darcs/pristine/lib/facebookaction.php @@ -72,7 +72,7 @@ class FacebookAction extends Action } '; - $html = Facebookaction::Aender_notice($notice); + $html = Facebookaction::render_notice($notice); $fbml = "$style $html"; diff --git a/_darcs/tentative_pristine b/_darcs/tentative_pristine index 04a3f84cd7..66a843163a 100644 --- a/_darcs/tentative_pristine +++ b/_darcs/tentative_pristine @@ -1,287 +1,17 @@ -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']); +hunk ./actions/facebookhome.php 78 +- echo ''; ++ echo ''; +hunk ./actions/facebooksettings.php 72 +- .'' ++ .'

' +hunk ./actions/facebooksettings.php 75 +- $fbml .= '

Allow Identi.ca to update my Facebook status

'; ++ $fbml .= '

Allow Identi.ca to update my Facebook status

'; ++ ++ if ($facebook->api_client->users_hasAppPermission('status_update')) { +hunk ./actions/facebooksettings.php 106 + } + -+ 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'))); -+ } +hunk ./lib/facebookaction.php 75 +- $html = Facebookaction::Aender_notice($notice); ++ $html = Facebookaction::render_notice($notice); diff --git a/actions/facebookhome.php b/actions/facebookhome.php index 069ea5e75c..6206fb6c27 100644 --- a/actions/facebookhome.php +++ b/actions/facebookhome.php @@ -75,7 +75,7 @@ class FacebookhomeAction extends FacebookAction $flink_id = $flink->insert(); if ($flink_id) { - echo ''; + echo ''; } $this->show_home($facebook, $fbuid, $user); diff --git a/actions/facebooksettings.php b/actions/facebooksettings.php index 469bcfc459..d28b1aa5ca 100644 --- a/actions/facebooksettings.php +++ b/actions/facebooksettings.php @@ -69,10 +69,12 @@ class FacebooksettingsAction extends FacebookAction $fbml = '' .'

Add an Identi.ca box to my profile

' - .'' + .'

' .'
'; - $fbml .= '

Allow Identi.ca to update my Facebook status

'; + $fbml .= '

Allow Identi.ca to update my Facebook status

'; + + if ($facebook->api_client->users_hasAppPermission('status_update')) { $fbml .= '
' .'

Sync preferences

' @@ -101,6 +103,8 @@ class FacebooksettingsAction extends FacebookAction .'

' .'
'; + } + echo $fbml; $this->show_footer(); diff --git a/lib/facebookaction.php b/lib/facebookaction.php index 7fa097587d..9230bad593 100644 --- a/lib/facebookaction.php +++ b/lib/facebookaction.php @@ -72,7 +72,7 @@ class FacebookAction extends Action } '; - $html = Facebookaction::Aender_notice($notice); + $html = Facebookaction::render_notice($notice); $fbml = "$style $html";