]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/Gravatar/GravatarPlugin.php
b18f627266ae50dab223ced726d0464705b62708
[quix0rs-gnu-social.git] / plugins / Gravatar / GravatarPlugin.php
1 <?php
2 /*
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2009, StatusNet, Inc.
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 /**
21  * @package GravatarPlugin
22  * @maintainer Eric Helgeson <erichelgeson@gmail.com>
23  */
24
25 if (!defined('STATUSNET') && !defined('LACONICA')) {
26     // This check helps protect against security problems;
27     // your code file can't be executed directly from the web.
28     exit(1);
29 }
30
31 class GravatarPlugin extends Plugin
32 {
33     function onInitializePlugin() {
34         return true;
35     }
36     
37     function onStartAvatarFormData($action) {
38         $user = common_current_user();
39         $hasGravatar = $this->hasGravatar($user->id);
40         
41         if($hasGravatar) {
42             return false;
43         }
44     }
45     
46     function onEndAvatarFormData(&$action) {
47         $user = common_current_user();
48         $hasGravatar = $this->hasGravatar($user->id);
49
50         if(!empty($user->email) && !$hasGravatar) { //and not gravatar already set
51             $action->elementStart('form', array('method' => 'post',
52                                                 'id' => 'form_settings_gravatar_add',
53                                                 'class' => 'form_settings',
54                                                 'action' =>
55                                                 common_local_url('avatarsettings')));
56             $action->elementStart('fieldset', array('id' => 'settings_gravatar_add'));
57             $action->element('legend', null, _m('Set Gravatar'));
58             $action->hidden('token', common_session_token());
59             $action->element('p', 'form_guide',
60                              _m('If you want to use your Gravatar image, click "Add".'));
61             $action->element('input', array('type' => 'submit',
62                                             'id' => 'settings_gravatar_add_action-submit',
63                                             'name' => 'add',
64                                             'class' => 'submit',
65                                             'value' => _m('Add')));
66             $action->elementEnd('fieldset');
67             $action->elementEnd('form');
68         } elseif($hasGravatar) {
69             $action->elementStart('form', array('method' => 'post',
70                                                 'id' => 'form_settings_gravatar_remove',
71                                                 'class' => 'form_settings',
72                                                 'action' =>
73                                                 common_local_url('avatarsettings')));
74             $action->elementStart('fieldset', array('id' => 'settings_gravatar_remove'));
75             $action->element('legend', null, _m('Remove Gravatar'));
76             $action->hidden('token', common_session_token());
77             $action->element('p', 'form_guide',
78                              _m('If you want to remove your Gravatar image, click "Remove".'));
79             $action->element('input', array('type' => 'submit',
80                                             'id' => 'settings_gravatar_remove_action-submit',
81                                             'name' => 'remove',
82                                             'class' => 'submit',
83                                             'value' => _m('Remove')));
84             $action->elementEnd('fieldset');
85             $action->elementEnd('form');
86         } else {
87             $action->element('p', 'form_guide',
88                              _m('To use a Gravatar first enter in an email address.'));
89         }
90     }
91     
92     function onStartAvatarSaveForm($action) {
93         if ($action->arg('add')) {
94             $result = $this->gravatar_save();
95             $action->showForm($result['message'], $result['success']);
96             return false;
97         } else if ($action->arg('remove')) {
98             $result = $this->gravatar_remove();
99             $action->showForm($result['message'], $result['success']);
100             return false;
101         } else {
102             return true;
103         }
104     }
105
106     function hasGravatar($id) {
107         $avatar = new Avatar();
108         $avatar->profile_id = $id;
109         if ($avatar->find()) {
110             while ($avatar->fetch()) {
111                 if($avatar->filename == null) {
112                     return true;
113                 }
114             }
115         }
116         return false;
117      }
118  
119
120     function gravatar_save()
121     {
122         $cur = common_current_user();
123         
124         if(empty($cur->email)) {
125             return array('message' => _m('You do not have a email set in your profile.'),
126                          'success' => false);
127         }
128         //Get rid of previous Avatar
129         $this->gravatar_remove();
130         
131         foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) {
132             $gravatar = new Avatar();
133             $gravatar->profile_id = $cur->id;
134             $gravatar->width = $size;
135             $gravatar->height = $size;
136             $gravatar->original = false; //No file, so no original
137             $gravatar->mediatype = 'img';//XXX: Unsure what to put here
138             //$gravatar->filename = null;//No filename. Remote
139             $gravatar->url = $this->gravatar_url($cur->email, $size);
140             $gravatar->created = DB_DataObject_Cast::dateTime(); # current time
141
142             if (!$gravatar->insert()) {
143                 return array('message' => _m('Failed to save Gravatar to the DB.'),
144                              'success' => false);
145             }
146         }
147         return array('message' => _m('Gravatar added.'),
148                      'success' => true);
149      }
150
151     function gravatar_remove()
152     {
153         $user = common_current_user();
154         $profile = $user->getProfile();
155
156         $avatar = $profile->getOriginalAvatar();
157         if($avatar) $avatar->delete();
158         $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
159         if($avatar) $avatar->delete();
160         $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
161         if($avatar) $avatar->delete();
162         $avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
163         if($avatar) $avatar->delete();
164
165         return array('message' => _m('Gravatar removed.'),
166                      'success' => true);
167     }
168  
169     function gravatar_url($email, $size) {
170         $url = "http://www.gravatar.com/avatar.php?gravatar_id=".
171                 md5(strtolower($email)).
172                 "&default=".urlencode(Avatar::defaultImage($size)).
173                 "&size=".$size;
174             return $url;
175     }
176 }