]> git.mxchange.org Git - friendica.git/blob - mod/profile_photo.php
Merge pull request #4 from fabrixxm/master
[friendica.git] / mod / profile_photo.php
1 <?php
2
3 require_once("Photo.php");
4
5 function profile_photo_init(&$a) {
6
7         if(! local_user()) {
8                 return;
9         }
10
11         profile_load($a,$a->user['nickname']);
12
13 }
14
15
16 function profile_photo_post(&$a) {
17
18         if(! local_user()) {
19                 notice ( t('Permission denied.') . EOL );
20                 return;
21         }
22
23         if((x($_POST,'cropfinal')) && ($_POST['cropfinal'] == 1)) {
24
25                 // phase 2 - we have finished cropping
26
27                 if($a->argc != 2) {
28                         notice( t('Image uploaded but image cropping failed.') . EOL );
29                         return;
30                 }
31
32                 $image_id = $a->argv[1];
33
34                 if(substr($image_id,-2,1) == '-') {
35                         $scale = substr($image_id,-1,1);
36                         $image_id = substr($image_id,0,-2);
37                 }
38                         
39
40                 $srcX = $_POST['xstart'];
41                 $srcY = $_POST['ystart'];
42                 $srcW = $_POST['xfinal'] - $srcX;
43                 $srcH = $_POST['yfinal'] - $srcY;
44
45                 $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = %d LIMIT 1",
46                         dbesc($image_id),
47                         dbesc(local_user()),
48                         intval($scale));
49
50                 if(count($r)) {
51
52                         $base_image = $r[0];
53
54                         $im = new Photo($base_image['data']);
55                         if($im->is_valid()) {
56                                 $im->cropImage(175,$srcX,$srcY,$srcW,$srcH);
57
58                                 $r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 4, 1);
59
60                                 if($r === false)
61                                         notice ( sprintf(t('Image size reduction [%s] failed.'),"175") . EOL );
62
63                                 $im->scaleImage(80);
64
65                                 $r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 5, 1);
66                         
67                                 if($r === false)
68                                         notice( sprintf(t('Image size reduction [%s] failed.'),"80") . EOL );
69
70                                 $im->scaleImage(48);
71
72                                 $r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 6, 1);
73                         
74                                 if($r === false)
75                                         notice( sprintf(t('Image size reduction [%s] failed.'),"48") . EOL );
76
77                                 // Unset the profile photo flag from any other photos I own
78
79                                 $r = q("UPDATE `photo` SET `profile` = 0 WHERE `profile` = 1 AND `resource-id` != '%s' AND `uid` = %d",
80                                         dbesc($base_image['resource-id']),
81                                         intval(local_user())
82                                 );
83
84                                 $r = q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d LIMIT 1",
85                                         dbesc(datetime_convert()),
86                                         intval(local_user())
87                                 );
88
89                                 info( t('Shift-reload the page or clear browser cache if the new photo does not display immediately.') . EOL);
90                                 // Update global directory in background
91                                 $url = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
92                                 if($url && strlen(get_config('system','directory_submit_url')))
93                                         proc_run('php',"include/directory.php","$url");
94
95                                 require_once('include/profile_update.php');
96                                 profile_change();
97                         }
98                         else
99                                 notice( t('Unable to process image') . EOL);
100                 }
101
102                 goaway($a->get_baseurl() . '/profiles');
103                 return; // NOTREACHED
104         }
105
106         $src      = $_FILES['userfile']['tmp_name'];
107         $filename = basename($_FILES['userfile']['name']);
108         $filesize = intval($_FILES['userfile']['size']);
109
110         $maximagesize = get_config('system','maximagesize');
111
112         if(($maximagesize) && ($filesize > $maximagesize)) {
113                 notice( sprintf(t('Image exceeds size limit of %d'), $maximagesize) . EOL);
114                 @unlink($src);
115                 return;
116         }
117
118         $imagedata = @file_get_contents($src);
119         $ph = new Photo($imagedata);
120
121         if(! $ph->is_valid()) {
122                 notice( t('Unable to process image.') . EOL );
123                 @unlink($src);
124                 return;
125         }
126
127         @unlink($src);
128         return profile_photo_crop_ui_head($a, $ph);
129         
130 }
131
132
133 if(! function_exists('profile_photo_content')) {
134 function profile_photo_content(&$a) {
135
136         if(! local_user()) {
137                 notice( t('Permission denied.') . EOL );
138                 return;
139         }
140         
141         $newuser = false;
142
143         if($a->argc == 2 && $a->argv[1] === 'new')
144                 $newuser = true;
145
146         if( $a->argv[1]=='use'){
147                 if ($a->argc<3){
148                         notice( t('Permission denied.') . EOL );
149                         return;
150                 };
151                         
152                 $resource_id = $a->argv[2];
153                 //die(":".local_user());
154                 $r=q("SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' ORDER BY `scale` ASC",
155                         intval(local_user()),
156                         dbesc($resource_id)
157                         );
158                 if (!count($r)){
159                         notice( t('Permission denied.') . EOL );
160                         return;
161                 }
162                 $havescale = false;
163                 foreach($r as $rr) {
164                         if($rr['scale'] == 5)
165                                 $havescale = true;
166                 }
167
168                 // set an already uloaded photo as profile photo
169                 // if photo is in 'Profile Photos', change it in db
170                 if (($r[0]['album']== t('Profile Photos')) && ($havescale)){
171                         $r=q("UPDATE `photo` SET `profile`=0 WHERE `profile`=1 AND `uid`=%d",
172                                 intval(local_user()));
173                         
174                         $r=q("UPDATE `photo` SET `profile`=1 WHERE `uid` = %d AND `resource-id` = '%s'",
175                                 intval(local_user()),
176                                 dbesc($resource_id)
177                                 );
178                         
179                         $r = q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d LIMIT 1",
180                                 dbesc(datetime_convert()),
181                                 intval(local_user())
182                         );
183                         
184                         // Update global directory in background
185                         $url = $_SESSION['my_url'];
186                         if($url && strlen(get_config('system','directory_submit_url')))
187                                 proc_run('php',"include/directory.php","$url");
188                         
189                         goaway($a->get_baseurl() . '/profiles');
190                         return; // NOTREACHED
191                 }
192                 $ph = new Photo($r[0]['data']);
193                 profile_photo_crop_ui_head($a, $ph);
194                 // go ahead as we have jus uploaded a new photo to crop
195         }
196
197         if(! x($a->config,'imagecrop')) {
198         
199                 $tpl = get_markup_template('profile_photo.tpl');
200
201                 $o .= replace_macros($tpl,array(
202                         '$user' => $a->user['nickname'],
203                         '$lbl_upfile' => t('Upload File:'),
204                         '$title' => t('Upload Profile Photo'),
205                         '$submit' => t('Upload'),
206                         '$select' => sprintf('%s %s', t('or'), ($newuser) ? '<a href="' . $a->get_baseurl() . '">' . t('skip this step') . '</a>' : '<a href="'. $a->get_baseurl() . '/photos/' . $a->user['nickname'] . '">' . t('select a photo from your photo albums') . '</a>')
207                 ));
208
209                 return $o;
210         }
211         else {
212                 $filename = $a->config['imagecrop'] . '-' . $a->config['imagecrop_resolution'] . '.jpg';
213                 $resolution = $a->config['imagecrop_resolution'];
214                 $tpl = get_markup_template("cropbody.tpl");
215                 $o .= replace_macros($tpl,array(
216                         '$filename' => $filename,
217                         '$resource' => $a->config['imagecrop'] . '-' . $a->config['imagecrop_resolution'],
218                         '$image_url' => $a->get_baseurl() . '/photo/' . $filename,
219                         '$title' => t('Crop Image'),
220                         '$desc' => t('Please adjust the image cropping for optimum viewing.'),
221                         '$done' => t('Done Editing')
222                 ));
223                 return $o;
224         }
225
226         return; // NOTREACHED
227 }}
228
229
230 if(! function_exists('_crop_ui_head')) {
231 function profile_photo_crop_ui_head(&$a, $ph){
232         $width = $ph->getWidth();
233         $height = $ph->getHeight();
234
235         if($width < 175 || $height < 175) {
236                 $ph->scaleImageUp(200);
237                 $width = $ph->getWidth();
238                 $height = $ph->getHeight();
239         }
240
241         $hash = photo_new_resource();
242         
243
244         $smallest = 0;
245
246         $r = $ph->store(local_user(), 0 , $hash, $filename, t('Profile Photos'), 0 );   
247
248         if($r)
249                 info( t('Image uploaded successfully.') . EOL );
250         else
251                 notice( t('Image upload failed.') . EOL );
252
253         if($width > 640 || $height > 640) {
254                 $ph->scaleImage(640);
255                 $r = $ph->store(local_user(), 0 , $hash, $filename, t('Profile Photos'), 1 );   
256                 
257                 if($r === false)
258                         notice( sprintf(t('Image size reduction [%s] failed.'),"640") . EOL );
259                 else
260                         $smallest = 1;
261         }
262
263         $a->config['imagecrop'] = $hash;
264         $a->config['imagecrop_resolution'] = $smallest;
265         $a->page['htmlhead'] .= get_markup_template("crophead.tpl");
266         return;
267 }}
268