2010-08-06 06:15:24 +02:00
< ? php
2017-11-29 13:52:27 +01:00
/**
* @ file mod / photos . php
*/
2018-01-25 03:08:45 +01:00
2017-04-30 06:07:00 +02:00
use Friendica\App ;
2017-12-04 15:04:36 +01:00
use Friendica\Content\Feature ;
2018-01-15 20:51:56 +01:00
use Friendica\Content\Nav ;
2018-02-15 03:33:55 +01:00
use Friendica\Content\Text\BBCode ;
2018-03-03 00:41:24 +01:00
use Friendica\Core\ACL ;
2018-01-17 19:42:40 +01:00
use Friendica\Core\Addon ;
2018-01-25 03:08:45 +01:00
use Friendica\Core\Config ;
2018-01-21 19:33:59 +01:00
use Friendica\Core\L10n ;
2017-08-26 08:04:21 +02:00
use Friendica\Core\System ;
2017-11-05 13:15:53 +01:00
use Friendica\Core\Worker ;
2018-07-20 14:19:26 +02:00
use Friendica\Database\DBA ;
2017-11-08 04:57:46 +01:00
use Friendica\Database\DBM ;
2017-12-07 15:04:24 +01:00
use Friendica\Model\Contact ;
2017-12-17 01:21:56 +01:00
use Friendica\Model\Group ;
2018-01-28 12:18:08 +01:00
use Friendica\Model\Item ;
2017-12-07 14:56:11 +01:00
use Friendica\Model\Photo ;
2018-01-15 03:22:39 +01:00
use Friendica\Model\Profile ;
2018-06-18 22:36:34 +02:00
use Friendica\Model\User ;
2017-05-07 20:44:30 +02:00
use Friendica\Network\Probe ;
2017-12-07 14:56:11 +01:00
use Friendica\Object\Image ;
2018-01-13 15:40:34 +01:00
use Friendica\Protocol\DFRN ;
2018-01-27 03:38:34 +01:00
use Friendica\Util\DateTimeFormat ;
2018-01-25 03:08:45 +01:00
use Friendica\Util\Map ;
2018-02-03 18:25:58 +01:00
use Friendica\Util\Temporal ;
2017-04-30 06:01:26 +02:00
2017-03-30 21:44:32 +02:00
require_once 'include/items.php' ;
require_once 'include/security.php' ;
2012-06-07 17:42:13 +02:00
2017-01-09 13:14:25 +01:00
function photos_init ( App $a ) {
2010-08-06 06:15:24 +02:00
2017-03-25 14:56:23 +01:00
if ( $a -> argc > 1 ) {
2018-01-13 15:40:34 +01:00
DFRN :: autoRedir ( $a , $a -> argv [ 1 ]);
2017-03-25 14:56:23 +01:00
}
2011-04-22 02:29:47 +02:00
2017-12-28 21:37:23 +01:00
if ( Config :: get ( 'system' , 'block_public' ) && ! local_user () && ! remote_user ()) {
2011-04-22 02:29:47 +02:00
return ;
}
2012-10-09 17:50:24 +02:00
2018-01-15 20:51:56 +01:00
Nav :: setSelected ( 'home' );
2015-09-30 18:50:44 +02:00
2016-10-22 12:14:41 +02:00
if ( $a -> argc > 1 ) {
2010-08-06 06:15:24 +02:00
$nick = $a -> argv [ 1 ];
2017-09-15 23:00:39 +02:00
$user = q ( " SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1 " ,
2010-08-06 06:15:24 +02:00
dbesc ( $nick )
);
2017-12-28 21:37:23 +01:00
if ( ! DBM :: is_result ( $user )) {
2010-08-06 06:15:24 +02:00
return ;
2017-03-25 14:56:23 +01:00
}
2010-08-06 06:15:24 +02:00
2015-12-01 18:31:08 +01:00
$a -> data [ 'user' ] = $user [ 0 ];
$a -> profile_uid = $user [ 0 ][ 'uid' ];
2015-09-29 19:44:26 +02:00
$is_owner = ( local_user () && ( local_user () == $a -> profile_uid ));
2012-11-09 09:21:16 +01:00
2018-01-15 05:44:39 +01:00
$profile = Profile :: getByNickname ( $nick , $a -> profile_uid );
2015-12-01 18:31:08 +01:00
2017-11-19 23:03:39 +01:00
$account_type = Contact :: getAccountType ( $profile );
2015-05-26 14:32:40 +02:00
2015-06-27 14:10:43 +02:00
$tpl = get_markup_template ( " vcard-widget.tpl " );
2015-05-26 14:32:40 +02:00
2018-01-15 14:05:12 +01:00
$vcard_widget = replace_macros ( $tpl , [
2015-12-01 19:47:23 +01:00
'$name' => $profile [ 'name' ],
'$photo' => $profile [ 'photo' ],
2018-01-01 22:47:00 +01:00
'$addr' => defaults ( $profile , 'addr' , '' ),
2015-12-01 18:31:08 +01:00
'$account_type' => $account_type ,
2018-01-01 22:47:00 +01:00
'$pdesc' => defaults ( $profile , 'pdesc' , '' ),
2018-01-15 14:05:12 +01:00
]);
2012-11-02 12:20:12 +01:00
2018-01-04 04:36:15 +01:00
$albums = Photo :: getAlbums ( $a -> data [ 'user' ][ 'uid' ]);
2010-08-06 06:15:24 +02:00
2017-12-28 21:37:23 +01:00
$albums_visible = (( intval ( $a -> data [ 'user' ][ 'hidewall' ]) && ! local_user () && ! remote_user ()) ? false : true );
2015-06-27 14:10:43 +02:00
// add various encodings to the array so we can just loop through and pick them out in a template
2018-01-15 14:05:12 +01:00
$ret = [ 'success' => false ];
2015-06-27 14:10:43 +02:00
2016-10-22 12:14:41 +02:00
if ( $albums ) {
2015-06-27 14:10:43 +02:00
$a -> data [ 'albums' ] = $albums ;
2017-03-25 14:56:23 +01:00
if ( $albums_visible ) {
2015-06-27 14:10:43 +02:00
$ret [ 'success' ] = true ;
2017-03-25 14:56:23 +01:00
}
2015-06-27 14:10:43 +02:00
2018-01-15 14:05:12 +01:00
$ret [ 'albums' ] = [];
2016-10-22 12:14:41 +02:00
foreach ( $albums as $k => $album ) {
2015-09-29 19:44:26 +02:00
//hide profile photos to others
2018-01-22 15:16:25 +01:00
if ( ! $is_owner && ! remote_user () && ( $album [ 'album' ] == L10n :: t ( 'Profile Photos' )))
2015-09-29 19:44:26 +02:00
continue ;
2018-01-15 14:05:12 +01:00
$entry = [
2015-06-27 14:10:43 +02:00
'text' => $album [ 'album' ],
'total' => $album [ 'total' ],
2016-02-17 23:47:32 +01:00
'url' => 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $album [ 'album' ]),
2015-06-27 14:10:43 +02:00
'urlencode' => urlencode ( $album [ 'album' ]),
'bin2hex' => bin2hex ( $album [ 'album' ])
2018-01-15 14:05:12 +01:00
];
2015-06-27 14:10:43 +02:00
$ret [ 'albums' ][] = $entry ;
}
}
2017-03-25 14:56:23 +01:00
if ( local_user () && $a -> data [ 'user' ][ 'uid' ] == local_user ()) {
2015-06-27 14:10:43 +02:00
$can_post = true ;
2018-07-10 14:27:56 +02:00
} else {
$can_post = false ;
2017-03-25 14:56:23 +01:00
}
2015-06-27 14:10:43 +02:00
2018-01-01 22:47:00 +01:00
if ( $ret [ 'success' ]) {
2018-01-15 14:05:12 +01:00
$photo_albums_widget = replace_macros ( get_markup_template ( 'photo_albums.tpl' ), [
2015-06-27 14:10:43 +02:00
'$nick' => $a -> data [ 'user' ][ 'nickname' ],
2018-01-22 15:16:25 +01:00
'$title' => L10n :: t ( 'Photo Albums' ),
'$recent' => L10n :: t ( 'Recent Photos' ),
2018-01-01 22:47:00 +01:00
'$albums' => $ret [ 'albums' ],
2017-08-26 09:32:10 +02:00
'$baseurl' => System :: baseUrl (),
2018-01-22 15:16:25 +01:00
'$upload' => [ L10n :: t ( 'Upload New Photos' ), 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/upload' ],
2015-06-27 14:10:43 +02:00
'$can_post' => $can_post
2018-01-15 14:05:12 +01:00
]);
2015-06-27 14:10:43 +02:00
}
2010-08-06 06:15:24 +02:00
2010-11-04 03:47:07 +01:00
2017-12-28 21:37:23 +01:00
if ( ! x ( $a -> page , 'aside' )) {
2010-11-04 03:47:07 +01:00
$a -> page [ 'aside' ] = '' ;
2017-03-25 14:56:23 +01:00
}
2015-06-27 14:10:43 +02:00
$a -> page [ 'aside' ] .= $vcard_widget ;
$a -> page [ 'aside' ] .= $photo_albums_widget ;
2011-06-02 07:06:53 +02:00
2012-07-28 17:57:16 +02:00
$tpl = get_markup_template ( " photos_head.tpl " );
2018-01-15 14:05:12 +01:00
$a -> page [ 'htmlhead' ] .= replace_macros ( $tpl ,[
2018-01-22 15:16:25 +01:00
'$ispublic' => L10n :: t ( 'everybody' )
2018-01-15 14:05:12 +01:00
]);
2010-08-06 06:15:24 +02:00
}
2010-12-06 03:08:36 +01:00
2010-09-09 05:14:17 +02:00
return ;
2010-08-06 06:15:24 +02:00
}
2018-01-01 22:47:00 +01:00
function photos_post ( App $a )
{
2012-02-21 23:15:10 +01:00
logger ( 'mod-photos: photos_post: begin' , LOGGER_DEBUG );
2018-01-01 22:47:00 +01:00
logger ( 'mod_photos: REQUEST ' . print_r ( $_REQUEST , true ), LOGGER_DATA );
logger ( 'mod_photos: FILES ' . print_r ( $_FILES , true ), LOGGER_DATA );
2011-01-28 03:45:19 +01:00
2017-12-07 14:56:11 +01:00
$phototypes = Image :: supportedTypes ();
2012-06-07 17:42:13 +02:00
2010-12-06 03:08:36 +01:00
$can_post = false ;
$visitor = 0 ;
$page_owner_uid = $a -> data [ 'user' ][ 'uid' ];
2018-01-01 22:47:00 +01:00
$community_page = $a -> data [ 'user' ][ 'page-flags' ] == PAGE_COMMUNITY ;
2010-12-06 03:08:36 +01:00
2017-12-28 21:37:23 +01:00
if ( local_user () && ( local_user () == $page_owner_uid )) {
2010-12-06 03:08:36 +01:00
$can_post = true ;
2017-03-25 14:56:23 +01:00
} else {
2016-10-22 12:14:41 +02:00
if ( $community_page && remote_user ()) {
2016-11-14 18:49:51 +01:00
$contact_id = 0 ;
2018-01-01 22:47:00 +01:00
if ( x ( $_SESSION , 'remote' ) && is_array ( $_SESSION [ 'remote' ])) {
2016-10-22 12:14:41 +02:00
foreach ( $_SESSION [ 'remote' ] as $v ) {
if ( $v [ 'uid' ] == $page_owner_uid ) {
2016-11-14 18:49:51 +01:00
$contact_id = $v [ 'cid' ];
2012-09-05 07:50:28 +02:00
break ;
}
}
}
2016-11-14 18:49:51 +01:00
if ( $contact_id ) {
2017-09-15 23:00:39 +02:00
$r = q ( " SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1 " ,
2016-11-14 18:49:51 +01:00
intval ( $contact_id ),
2012-09-05 07:50:28 +02:00
intval ( $page_owner_uid )
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2012-09-05 07:50:28 +02:00
$can_post = true ;
2016-11-14 18:49:51 +01:00
$visitor = $contact_id ;
2012-09-05 07:50:28 +02:00
}
2010-12-06 03:08:36 +01:00
}
}
}
2010-08-06 06:15:24 +02:00
2017-12-28 21:37:23 +01:00
if ( ! $can_post ) {
2018-06-19 21:06:17 +02:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2010-10-14 07:01:23 +02:00
killme ();
}
2010-08-09 02:08:39 +02:00
2018-06-18 22:36:34 +02:00
$owner_record = User :: getOwnerDataById ( $page_owner_uid );
2010-08-09 02:08:39 +02:00
2018-06-18 22:36:34 +02:00
if ( ! $owner_record ) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Contact information unavailable' ) . EOL );
2010-12-06 03:08:36 +01:00
logger ( 'photos_post: unable to locate contact record for page owner. uid=' . $page_owner_uid );
2010-11-03 00:24:23 +01:00
killme ();
}
2018-01-01 22:47:00 +01:00
if ( $a -> argc > 3 && $a -> argv [ 2 ] === 'album' ) {
2010-12-06 03:08:36 +01:00
$album = hex2bin ( $a -> argv [ 3 ]);
2010-08-09 02:08:39 +02:00
2018-01-22 15:16:25 +01:00
if ( $album === L10n :: t ( 'Profile Photos' ) || $album === 'Contact Photos' || $album === L10n :: t ( 'Contact Photos' )) {
2016-02-17 23:47:32 +01:00
goaway ( $_SESSION [ 'photo_return' ]);
2010-08-09 02:08:39 +02:00
return ; // NOTREACHED
}
2017-09-15 23:00:39 +02:00
$r = q ( " SELECT `album` FROM `photo` WHERE `album` = '%s' AND `uid` = %d " ,
2010-08-09 02:08:39 +02:00
dbesc ( $album ),
2010-12-06 03:08:36 +01:00
intval ( $page_owner_uid )
2010-08-09 02:08:39 +02:00
);
2017-11-08 04:57:46 +01:00
if ( ! DBM :: is_result ( $r )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Album not found.' ) . EOL );
2016-02-17 23:47:32 +01:00
goaway ( $_SESSION [ 'photo_return' ]);
2010-08-09 02:08:39 +02:00
return ; // NOTREACHED
}
2013-01-26 20:52:21 +01:00
// Check if the user has responded to a delete confirmation query
2016-10-22 12:14:41 +02:00
if ( $_REQUEST [ 'canceled' ]) {
2016-02-17 23:47:32 +01:00
goaway ( $_SESSION [ 'photo_return' ]);
2013-01-26 20:52:21 +01:00
}
2018-01-01 22:47:00 +01:00
// RENAME photo album
2010-08-09 02:08:39 +02:00
$newalbum = notags ( trim ( $_POST [ 'albumname' ]));
2016-10-22 12:14:41 +02:00
if ( $newalbum != $album ) {
2010-08-09 02:08:39 +02:00
q ( " UPDATE `photo` SET `album` = '%s' WHERE `album` = '%s' AND `uid` = %d " ,
dbesc ( $newalbum ),
dbesc ( $album ),
2010-12-06 03:08:36 +01:00
intval ( $page_owner_uid )
2010-08-09 02:08:39 +02:00
);
2016-12-25 16:58:38 +01:00
// Update the photo albums cache
2018-01-04 04:36:15 +01:00
Photo :: clearAlbumCache ( $page_owner_uid );
2016-12-25 16:58:38 +01:00
2018-07-20 21:23:51 +02:00
$newurl = System :: baseUrl () . '/photos/' . $a -> user [ 'nickname' ] . '/album/' . bin2hex ( $newalbum );
2016-02-17 23:47:32 +01:00
goaway ( $newurl );
2010-08-09 02:08:39 +02:00
return ; // NOTREACHED
}
2015-09-30 00:19:54 +02:00
/*
* DELETE photo album and all its photos
*/
2010-12-06 03:08:36 +01:00
2018-01-22 15:16:25 +01:00
if ( $_POST [ 'dropalbum' ] == L10n :: t ( 'Delete Album' )) {
2013-01-26 20:52:21 +01:00
// Check if we should do HTML-based delete confirmation
2018-01-01 22:47:00 +01:00
if ( x ( $_REQUEST , 'confirm' )) {
2013-01-26 20:52:21 +01:00
$drop_url = $a -> query_string ;
2018-01-15 14:05:12 +01:00
$extra_inputs = [
[ 'name' => 'albumname' , 'value' => $_POST [ 'albumname' ]],
];
$a -> page [ 'content' ] = replace_macros ( get_markup_template ( 'confirm.tpl' ), [
2013-01-26 20:52:21 +01:00
'$method' => 'post' ,
2018-01-22 15:16:25 +01:00
'$message' => L10n :: t ( 'Do you really want to delete this photo album and all its photos?' ),
2013-01-26 20:52:21 +01:00
'$extra_inputs' => $extra_inputs ,
2018-01-22 15:16:25 +01:00
'$confirm' => L10n :: t ( 'Delete Album' ),
2013-01-26 20:52:21 +01:00
'$confirm_url' => $drop_url ,
'$confirm_name' => 'dropalbum' , // Needed so that confirmation will bring us back into this if statement
2018-01-22 15:16:25 +01:00
'$cancel' => L10n :: t ( 'Cancel' ),
2018-01-15 14:05:12 +01:00
]);
2013-01-26 20:52:21 +01:00
$a -> error = 1 ; // Set $a->error so the other module functions don't execute
return ;
}
2018-01-15 14:05:12 +01:00
$res = [];
2010-12-06 03:08:36 +01:00
// get the list of photos we are about to delete
2016-10-22 12:14:41 +02:00
if ( $visitor ) {
2010-12-06 03:08:36 +01:00
$r = q ( " SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d AND `album` = '%s' " ,
intval ( $visitor ),
intval ( $page_owner_uid ),
dbesc ( $album )
);
2016-10-22 12:14:41 +02:00
} else {
2010-12-06 03:08:36 +01:00
$r = q ( " SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `uid` = %d AND `album` = '%s' " ,
intval ( local_user ()),
dbesc ( $album )
);
}
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2016-12-20 21:15:53 +01:00
foreach ( $r as $rr ) {
2010-08-09 02:08:39 +02:00
$res [] = " ' " . dbesc ( $rr [ 'rid' ]) . " ' " ;
}
2016-10-22 12:14:41 +02:00
} else {
2016-02-17 23:47:32 +01:00
goaway ( $_SESSION [ 'photo_return' ]);
2010-08-09 02:08:39 +02:00
return ; // NOTREACHED
}
2010-12-06 03:08:36 +01:00
2010-08-09 02:08:39 +02:00
$str_res = implode ( ',' , $res );
2010-12-06 03:08:36 +01:00
// remove the associated photos
2018-06-19 21:06:17 +02:00
q ( " DELETE FROM `photo` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d " ,
2010-12-06 03:08:36 +01:00
intval ( $page_owner_uid )
2010-08-09 02:08:39 +02:00
);
2010-12-06 03:08:36 +01:00
// find and delete the corresponding item with all the comments and likes/dislikes
2018-05-29 07:22:57 +02:00
Item :: deleteForUser ([ 'resource-id' => $res , 'uid' => $page_owner_uid ], $page_owner_uid );
2016-12-25 16:58:38 +01:00
// Update the photo albums cache
2018-01-04 04:36:15 +01:00
Photo :: clearAlbumCache ( $page_owner_uid );
2010-08-09 02:08:39 +02:00
}
2016-12-25 16:58:38 +01:00
2016-02-17 23:47:32 +01:00
goaway ( 'photos/' . $a -> data [ 'user' ][ 'nickname' ]);
2010-08-09 02:08:39 +02:00
return ; // NOTREACHED
}
2013-01-26 20:52:21 +01:00
// Check if the user has responded to a delete confirmation query for a single photo
2018-01-01 22:47:00 +01:00
if ( $a -> argc > 2 && x ( $_REQUEST , 'canceled' )) {
2016-02-17 23:47:32 +01:00
goaway ( $_SESSION [ 'photo_return' ]);
2013-01-26 20:52:21 +01:00
}
2018-01-22 15:16:25 +01:00
if ( $a -> argc > 2 && defaults ( $_POST , 'delete' , '' ) === L10n :: t ( 'Delete Photo' )) {
2010-12-06 03:08:36 +01:00
// same as above but remove single photo
2013-01-26 20:52:21 +01:00
// Check if we should do HTML-based delete confirmation
2018-01-01 22:47:00 +01:00
if ( x ( $_REQUEST , 'confirm' )) {
2013-01-26 20:52:21 +01:00
$drop_url = $a -> query_string ;
2018-01-15 14:05:12 +01:00
$a -> page [ 'content' ] = replace_macros ( get_markup_template ( 'confirm.tpl' ), [
2013-01-26 20:52:21 +01:00
'$method' => 'post' ,
2018-01-22 15:16:25 +01:00
'$message' => L10n :: t ( 'Do you really want to delete this photo?' ),
2018-01-15 14:05:12 +01:00
'$extra_inputs' => [],
2018-01-22 15:16:25 +01:00
'$confirm' => L10n :: t ( 'Delete Photo' ),
2013-01-26 20:52:21 +01:00
'$confirm_url' => $drop_url ,
'$confirm_name' => 'delete' , // Needed so that confirmation will bring us back into this if statement
2018-01-22 15:16:25 +01:00
'$cancel' => L10n :: t ( 'Cancel' ),
2018-01-15 14:05:12 +01:00
]);
2013-01-26 20:52:21 +01:00
$a -> error = 1 ; // Set $a->error so the other module functions don't execute
return ;
}
2016-10-22 12:14:41 +02:00
if ( $visitor ) {
2010-12-06 03:08:36 +01:00
$r = q ( " SELECT `id`, `resource-id` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d AND `resource-id` = '%s' LIMIT 1 " ,
intval ( $visitor ),
intval ( $page_owner_uid ),
dbesc ( $a -> argv [ 2 ])
);
2016-10-22 12:14:41 +02:00
} else {
2010-12-06 03:08:36 +01:00
$r = q ( " SELECT `id`, `resource-id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' LIMIT 1 " ,
intval ( local_user ()),
dbesc ( $a -> argv [ 2 ])
);
}
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2010-08-09 02:08:39 +02:00
q ( " DELETE FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' " ,
2010-12-06 03:08:36 +01:00
intval ( $page_owner_uid ),
2010-08-09 02:08:39 +02:00
dbesc ( $r [ 0 ][ 'resource-id' ])
);
2018-05-29 07:22:57 +02:00
Item :: deleteForUser ([ 'resource-id' => $r [ 0 ][ 'resource-id' ], 'uid' => $page_owner_uid ], $page_owner_uid );
// Update the photo albums cache
Photo :: clearAlbumCache ( $page_owner_uid );
2010-08-09 02:08:39 +02:00
}
2016-02-17 23:47:32 +01:00
goaway ( 'photos/' . $a -> data [ 'user' ][ 'nickname' ]);
2010-08-09 02:08:39 +02:00
return ; // NOTREACHED
}
2018-01-01 22:47:00 +01:00
if ( $a -> argc > 2 && ( x ( $_POST , 'desc' ) !== false || x ( $_POST , 'newtag' ) !== false || x ( $_POST , 'albname' ) !== false )) {
$desc = x ( $_POST , 'desc' ) ? notags ( trim ( $_POST [ 'desc' ])) : '' ;
$rawtags = x ( $_POST , 'newtag' ) ? notags ( trim ( $_POST [ 'newtag' ])) : '' ;
$item_id = x ( $_POST , 'item_id' ) ? intval ( $_POST [ 'item_id' ]) : 0 ;
$albname = x ( $_POST , 'albname' ) ? notags ( trim ( $_POST [ 'albname' ])) : '' ;
$origaname = x ( $_POST , 'origaname' ) ? notags ( trim ( $_POST [ 'origaname' ])) : '' ;
2011-03-10 06:10:16 +01:00
$str_group_allow = perms2str ( $_POST [ 'group_allow' ]);
$str_contact_allow = perms2str ( $_POST [ 'contact_allow' ]);
$str_group_deny = perms2str ( $_POST [ 'group_deny' ]);
$str_contact_deny = perms2str ( $_POST [ 'contact_deny' ]);
2010-12-06 03:08:36 +01:00
$resource_id = $a -> argv [ 2 ];
2010-08-08 10:58:26 +02:00
2017-12-28 21:37:23 +01:00
if ( ! strlen ( $albname )) {
2018-01-27 03:38:34 +01:00
$albname = DateTimeFormat :: localNow ( 'Y' );
2017-03-25 14:56:23 +01:00
}
2012-05-23 10:01:04 +02:00
2018-01-01 22:47:00 +01:00
if ( x ( $_POST , 'rotate' ) !== false &&
( intval ( $_POST [ 'rotate' ]) == 1 || intval ( $_POST [ 'rotate' ]) == 2 )) {
2012-05-23 10:01:04 +02:00
logger ( 'rotate' );
2017-03-25 14:56:23 +01:00
$r = q ( " SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 0 LIMIT 1 " ,
2012-05-23 10:01:04 +02:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2017-12-07 14:56:11 +01:00
$Image = new Image ( $r [ 0 ][ 'data' ], $r [ 0 ][ 'type' ]);
if ( $Image -> isValid ()) {
2018-06-19 21:06:17 +02:00
$rotate_deg = (( intval ( $_POST [ 'rotate' ]) == 1 ) ? 270 : 90 );
2017-12-07 14:56:11 +01:00
$Image -> rotate ( $rotate_deg );
2012-05-23 10:01:04 +02:00
2017-12-07 14:56:11 +01:00
$width = $Image -> getWidth ();
$height = $Image -> getHeight ();
2012-05-23 10:01:04 +02:00
2017-03-25 14:56:23 +01:00
$x = q ( " UPDATE `photo` SET `data` = '%s', `height` = %d, `width` = %d WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 0 " ,
2017-12-07 14:56:11 +01:00
dbesc ( $Image -> asString ()),
2012-05-23 10:01:04 +02:00
intval ( $height ),
intval ( $width ),
2012-06-21 04:36:10 +02:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 10:01:04 +02:00
);
2016-10-22 12:14:41 +02:00
if ( $width > 640 || $height > 640 ) {
2017-12-07 14:56:11 +01:00
$Image -> scaleDown ( 640 );
$width = $Image -> getWidth ();
$height = $Image -> getHeight ();
2013-01-13 15:11:06 +01:00
2017-03-25 14:56:23 +01:00
$x = q ( " UPDATE `photo` SET `data` = '%s', `height` = %d, `width` = %d WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 1 " ,
2017-12-07 14:56:11 +01:00
dbesc ( $Image -> asString ()),
2012-05-23 10:01:04 +02:00
intval ( $height ),
intval ( $width ),
2012-06-21 04:36:10 +02:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 10:01:04 +02:00
);
}
2016-10-22 12:14:41 +02:00
if ( $width > 320 || $height > 320 ) {
2017-12-07 14:56:11 +01:00
$Image -> scaleDown ( 320 );
$width = $Image -> getWidth ();
$height = $Image -> getHeight ();
2012-05-23 10:01:04 +02:00
2017-03-25 14:56:23 +01:00
$x = q ( " UPDATE `photo` SET `data` = '%s', `height` = %d, `width` = %d WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 2 " ,
2017-12-07 14:56:11 +01:00
dbesc ( $Image -> asString ()),
2012-05-23 10:01:04 +02:00
intval ( $height ),
intval ( $width ),
2012-06-21 04:36:10 +02:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 10:01:04 +02:00
);
2013-01-13 15:11:06 +01:00
}
2012-05-23 10:01:04 +02:00
}
}
}
2011-02-04 00:13:38 +01:00
2010-08-09 02:08:39 +02:00
$p = q ( " SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ORDER BY `scale` DESC " ,
dbesc ( $resource_id ),
2010-12-06 03:08:36 +01:00
intval ( $page_owner_uid )
2010-08-08 10:58:26 +02:00
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $p )) {
2012-06-07 17:42:13 +02:00
$ext = $phototypes [ $p [ 0 ][ 'type' ]];
2011-03-10 06:10:16 +01:00
$r = q ( " UPDATE `photo` SET `desc` = '%s', `album` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' WHERE `resource-id` = '%s' AND `uid` = %d " ,
2010-08-09 02:08:39 +02:00
dbesc ( $desc ),
2011-02-04 00:13:38 +01:00
dbesc ( $albname ),
2011-03-10 06:10:16 +01:00
dbesc ( $str_contact_allow ),
dbesc ( $str_group_allow ),
dbesc ( $str_contact_deny ),
dbesc ( $str_group_deny ),
2010-08-09 02:08:39 +02:00
dbesc ( $resource_id ),
2010-12-06 03:08:36 +01:00
intval ( $page_owner_uid )
2010-08-09 02:08:39 +02:00
);
2017-03-25 14:56:23 +01:00
2016-12-26 02:41:00 +01:00
// Update the photo albums cache if album name was changed
if ( $albname !== $origaname ) {
2018-01-04 04:36:15 +01:00
Photo :: clearAlbumCache ( $page_owner_uid );
2016-12-26 02:41:00 +01:00
}
2010-08-09 02:08:39 +02:00
}
2011-02-08 06:16:39 +01:00
/* Don't make the item visible if the only change was the album name */
$visibility = 0 ;
2017-03-25 14:56:23 +01:00
if ( $p [ 0 ][ 'desc' ] !== $desc || strlen ( $rawtags )) {
2011-02-08 06:16:39 +01:00
$visibility = 1 ;
2017-03-25 14:56:23 +01:00
}
2014-07-22 00:36:20 +02:00
2017-12-28 21:37:23 +01:00
if ( ! $item_id ) {
2010-11-02 07:42:26 +01:00
// Create item container
2010-08-09 02:08:39 +02:00
$title = '' ;
2018-06-16 08:44:19 +02:00
$uri = Item :: newURI ( $page_owner_uid );
2014-07-22 00:36:20 +02:00
2018-01-15 14:05:12 +01:00
$arr = [];
2018-07-09 21:38:16 +02:00
$arr [ 'guid' ] = System :: createGUID ( 32 );
2010-12-06 03:08:36 +01:00
$arr [ 'uid' ] = $page_owner_uid ;
2010-11-04 03:47:07 +01:00
$arr [ 'uri' ] = $uri ;
2014-07-22 00:36:20 +02:00
$arr [ 'parent-uri' ] = $uri ;
2018-07-19 15:52:05 +02:00
$arr [ 'post-type' ] = Item :: PT_IMAGE ;
2010-11-04 03:47:07 +01:00
$arr [ 'wall' ] = 1 ;
$arr [ 'resource-id' ] = $p [ 0 ][ 'resource-id' ];
2010-12-06 03:08:36 +01:00
$arr [ 'contact-id' ] = $owner_record [ 'id' ];
$arr [ 'owner-name' ] = $owner_record [ 'name' ];
$arr [ 'owner-link' ] = $owner_record [ 'url' ];
$arr [ 'owner-avatar' ] = $owner_record [ 'thumb' ];
$arr [ 'author-name' ] = $owner_record [ 'name' ];
$arr [ 'author-link' ] = $owner_record [ 'url' ];
$arr [ 'author-avatar' ] = $owner_record [ 'thumb' ];
2010-11-04 03:47:07 +01:00
$arr [ 'title' ] = $title ;
$arr [ 'allow_cid' ] = $p [ 0 ][ 'allow_cid' ];
$arr [ 'allow_gid' ] = $p [ 0 ][ 'allow_gid' ];
$arr [ 'deny_cid' ] = $p [ 0 ][ 'deny_cid' ];
$arr [ 'deny_gid' ] = $p [ 0 ][ 'deny_gid' ];
2011-02-08 06:16:39 +01:00
$arr [ 'visible' ] = $visibility ;
2011-10-17 23:52:03 +02:00
$arr [ 'origin' ] = 1 ;
2014-02-22 15:46:19 +01:00
2017-08-26 09:32:10 +02:00
$arr [ 'body' ] = '[url=' . System :: baseUrl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . ']'
. '[img]' . System :: baseUrl () . '/photo/' . $p [ 0 ][ 'resource-id' ] . '-' . $p [ 0 ][ 'scale' ] . '.' . $ext . '[/img]'
2010-09-14 07:57:31 +02:00
. '[/url]' ;
2014-02-22 15:46:19 +01:00
2018-01-28 12:18:08 +01:00
$item_id = Item :: insert ( $arr );
2010-08-09 02:08:39 +02:00
}
2016-10-22 12:14:41 +02:00
if ( $item_id ) {
2018-06-18 22:36:34 +02:00
$item = Item :: selectFirst ([ 'tag' , 'inform' ], [ 'id' => $item_id , 'uid' => $page_owner_uid ]);
2010-11-02 07:42:26 +01:00
}
2018-06-18 22:36:34 +02:00
if ( DBM :: is_result ( $item )) {
$old_tag = $item [ 'tag' ];
$old_inform = $item [ 'inform' ];
2010-11-02 07:42:26 +01:00
}
2010-08-08 10:58:26 +02:00
2016-10-22 12:14:41 +02:00
if ( strlen ( $rawtags )) {
2010-11-02 07:42:26 +01:00
$str_tags = '' ;
$inform = '' ;
// if the new tag doesn't have a namespace specifier (@foo or #foo) give it a hashtag
2018-01-01 22:47:00 +01:00
$x = substr ( $rawtags , 0 , 1 );
2017-03-25 14:56:23 +01:00
if ( $x !== '@' && $x !== '#' ) {
2010-11-02 07:42:26 +01:00
$rawtags = '#' . $rawtags ;
2017-03-25 14:56:23 +01:00
}
2010-11-02 07:42:26 +01:00
2018-01-15 14:05:12 +01:00
$taginfo = [];
2010-11-02 07:42:26 +01:00
$tags = get_tags ( $rawtags );
2016-10-22 12:14:41 +02:00
if ( count ( $tags )) {
foreach ( $tags as $tag ) {
2017-03-30 20:33:38 +02:00
if ( strpos ( $tag , '@' ) === 0 ) {
2018-01-01 22:47:00 +01:00
$profile = '' ;
2010-11-02 07:42:26 +01:00
$name = substr ( $tag , 1 );
2017-03-30 20:33:38 +02:00
if (( strpos ( $name , '@' )) || ( strpos ( $name , 'http://' ))) {
2010-11-02 07:42:26 +01:00
$newname = $name ;
2016-07-09 20:09:09 +02:00
$links = @ Probe :: lrdd ( $name );
2016-10-22 12:14:41 +02:00
if ( count ( $links )) {
foreach ( $links as $link ) {
2017-03-25 14:56:23 +01:00
if ( $link [ '@attributes' ][ 'rel' ] === 'http://webfinger.net/rel/profile-page' ) {
2015-09-30 00:19:54 +02:00
$profile = $link [ '@attributes' ][ 'href' ];
2017-03-25 14:56:23 +01:00
}
2016-10-22 12:14:41 +02:00
if ( $link [ '@attributes' ][ 'rel' ] === 'salmon' ) {
2017-03-30 20:33:38 +02:00
$salmon = '$url:' . str_replace ( ',' , '%sc' , $link [ '@attributes' ][ 'href' ]);
2017-03-25 14:56:23 +01:00
if ( strlen ( $inform )) {
2010-11-02 07:42:26 +01:00
$inform .= ',' ;
2017-03-25 14:56:23 +01:00
}
$inform .= $salmon ;
2010-11-02 07:42:26 +01:00
}
}
}
2018-01-15 14:05:12 +01:00
$taginfo [] = [ $newname , $profile , $salmon ];
2016-10-22 12:14:41 +02:00
} else {
2010-11-02 07:42:26 +01:00
$newname = $name ;
2011-10-28 04:12:30 +02:00
$alias = '' ;
$tagcid = 0 ;
2017-03-30 20:33:38 +02:00
if ( strrpos ( $newname , '+' )) {
$tagcid = intval ( substr ( $newname , strrpos ( $newname , '+' ) + 1 ));
2017-03-25 14:56:23 +01:00
}
2011-10-28 04:12:30 +02:00
2016-10-22 12:14:41 +02:00
if ( $tagcid ) {
2011-10-28 04:12:30 +02:00
$r = q ( " SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $tagcid ),
intval ( $profile_uid )
);
2016-10-22 12:14:41 +02:00
} else {
2012-09-30 01:55:40 +02:00
$newname = str_replace ( '_' , ' ' , $name );
//select someone from this user's contacts by name
$r = q ( " SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1 " ,
dbesc ( $newname ),
intval ( $page_owner_uid )
);
2017-12-28 21:37:23 +01:00
if ( ! DBM :: is_result ( $r )) {
2012-09-30 01:55:40 +02:00
//select someone by attag or nick and the name passed in
$r = q ( " SELECT * FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1 " ,
dbesc ( $name ),
dbesc ( $name ),
intval ( $page_owner_uid )
);
}
}
2017-03-30 21:38:22 +02:00
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2010-11-05 04:47:44 +01:00
$newname = $r [ 0 ][ 'name' ];
2010-11-02 07:42:26 +01:00
$profile = $r [ 0 ][ 'url' ];
2010-11-04 00:48:21 +01:00
$notify = 'cid:' . $r [ 0 ][ 'id' ];
2017-03-25 14:56:23 +01:00
if ( strlen ( $inform )) {
2010-11-02 07:42:26 +01:00
$inform .= ',' ;
2017-03-25 14:56:23 +01:00
}
2010-11-04 00:48:21 +01:00
$inform .= $notify ;
2010-11-02 07:42:26 +01:00
}
}
2016-10-22 12:14:41 +02:00
if ( $profile ) {
2017-03-25 14:57:40 +01:00
if ( substr ( $notify , 0 , 4 ) === 'cid:' ) {
2018-01-15 14:05:12 +01:00
$taginfo [] = [ $newname , $profile , $notify , $r [ 0 ], '@[url=' . str_replace ( ',' , '%2c' , $profile ) . ']' . $newname . '[/url]' ];
2017-03-25 14:56:23 +01:00
} else {
2018-01-15 14:05:12 +01:00
$taginfo [] = [ $newname , $profile , $notify , null , $str_tags .= '@[url=' . $profile . ']' . $newname . '[/url]' ];
2017-03-25 14:56:23 +01:00
}
if ( strlen ( $str_tags )) {
2010-11-02 07:42:26 +01:00
$str_tags .= ',' ;
2017-03-25 14:56:23 +01:00
}
$profile = str_replace ( ',' , '%2c' , $profile );
2014-07-22 00:36:20 +02:00
$str_tags .= '@[url=' . $profile . ']' . $newname . '[/url]' ;
2010-11-02 07:42:26 +01:00
}
2017-03-30 20:33:38 +02:00
} elseif ( strpos ( $tag , '#' ) === 0 ) {
2014-07-22 00:36:20 +02:00
$tagname = substr ( $tag , 1 );
2017-08-26 09:32:10 +02:00
$str_tags .= '#[url=' . System :: baseUrl () . " /search?tag= " . $tagname . ']' . $tagname . '[/url]' ;
2010-11-02 07:42:26 +01:00
}
}
}
$newtag = $old_tag ;
2017-03-25 14:56:23 +01:00
if ( strlen ( $newtag ) && strlen ( $str_tags )) {
2010-11-02 07:42:26 +01:00
$newtag .= ',' ;
2017-03-25 14:56:23 +01:00
}
2010-11-02 07:42:26 +01:00
$newtag .= $str_tags ;
$newinform = $old_inform ;
2017-03-25 14:56:23 +01:00
if ( strlen ( $newinform ) && strlen ( $inform )) {
2010-11-02 07:42:26 +01:00
$newinform .= ',' ;
2017-03-25 14:56:23 +01:00
}
2010-11-02 07:42:26 +01:00
$newinform .= $inform ;
2018-02-06 13:40:22 +01:00
$fields = [ 'tag' => $newtag , 'inform' => $newinform , 'edited' => DateTimeFormat :: utcNow (), 'changed' => DateTimeFormat :: utcNow ()];
$condition = [ 'id' => $item_id ];
Item :: update ( $fields , $condition );
2010-11-04 00:48:21 +01:00
2010-11-05 04:47:44 +01:00
$best = 0 ;
2016-10-22 12:14:41 +02:00
foreach ( $p as $scales ) {
if ( intval ( $scales [ 'scale' ]) == 2 ) {
2010-11-05 04:47:44 +01:00
$best = 2 ;
break ;
}
2016-10-22 12:14:41 +02:00
if ( intval ( $scales [ 'scale' ]) == 4 ) {
2010-11-05 04:47:44 +01:00
$best = 4 ;
break ;
2010-11-04 00:48:21 +01:00
}
}
2016-10-22 12:14:41 +02:00
if ( count ( $taginfo )) {
foreach ( $taginfo as $tagged ) {
2018-06-16 08:44:19 +02:00
$uri = Item :: newURI ( $page_owner_uid );
2010-11-05 04:47:44 +01:00
2018-01-15 14:05:12 +01:00
$arr = [];
2018-07-09 21:38:16 +02:00
$arr [ 'guid' ] = System :: createGUID ( 32 );
2010-12-06 03:08:36 +01:00
$arr [ 'uid' ] = $page_owner_uid ;
2010-11-05 04:47:44 +01:00
$arr [ 'uri' ] = $uri ;
$arr [ 'parent-uri' ] = $uri ;
$arr [ 'wall' ] = 1 ;
2010-12-06 03:08:36 +01:00
$arr [ 'contact-id' ] = $owner_record [ 'id' ];
$arr [ 'owner-name' ] = $owner_record [ 'name' ];
$arr [ 'owner-link' ] = $owner_record [ 'url' ];
$arr [ 'owner-avatar' ] = $owner_record [ 'thumb' ];
$arr [ 'author-name' ] = $owner_record [ 'name' ];
$arr [ 'author-link' ] = $owner_record [ 'url' ];
$arr [ 'author-avatar' ] = $owner_record [ 'thumb' ];
2010-11-05 04:47:44 +01:00
$arr [ 'title' ] = '' ;
$arr [ 'allow_cid' ] = $p [ 0 ][ 'allow_cid' ];
$arr [ 'allow_gid' ] = $p [ 0 ][ 'allow_gid' ];
$arr [ 'deny_cid' ] = $p [ 0 ][ 'deny_cid' ];
$arr [ 'deny_gid' ] = $p [ 0 ][ 'deny_gid' ];
$arr [ 'visible' ] = 1 ;
$arr [ 'verb' ] = ACTIVITY_TAG ;
2018-06-28 05:31:10 +02:00
$arr [ 'gravity' ] = GRAVITY_PARENT ;
2010-11-05 04:47:44 +01:00
$arr [ 'object-type' ] = ACTIVITY_OBJ_PERSON ;
2016-12-20 08:10:47 +01:00
$arr [ 'target-type' ] = ACTIVITY_OBJ_IMAGE ;
2010-11-05 07:50:32 +01:00
$arr [ 'tag' ] = $tagged [ 4 ];
2010-11-05 04:47:44 +01:00
$arr [ 'inform' ] = $tagged [ 2 ];
2011-10-17 23:52:03 +02:00
$arr [ 'origin' ] = 1 ;
2018-01-24 13:18:21 +01:00
$arr [ 'body' ] = L10n :: t ( '%1$s was tagged in %2$s by %3$s' , '[url=' . $tagged [ 1 ] . ']' . $tagged [ 0 ] . '[/url]' , '[url=' . System :: baseUrl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . ']' . L10n :: t ( 'a photo' ) . '[/url]' , '[url=' . $owner_record [ 'url' ] . ']' . $owner_record [ 'name' ] . '[/url]' ) ;
2017-08-26 09:32:10 +02:00
$arr [ 'body' ] .= " \n \n " . '[url=' . System :: baseUrl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . ']' . '[img]' . System :: baseUrl () . " /photo/ " . $p [ 0 ][ 'resource-id' ] . '-' . $best . '.' . $ext . '[/img][/url]' . " \n " ;
2010-11-05 04:47:44 +01:00
$arr [ 'object' ] = '<object><type>' . ACTIVITY_OBJ_PERSON . '</type><title>' . $tagged [ 0 ] . '</title><id>' . $tagged [ 1 ] . '/' . $tagged [ 0 ] . '</id>' ;
$arr [ 'object' ] .= '<link>' . xmlify ( '<link rel="alternate" type="text/html" href="' . $tagged [ 1 ] . '" />' . " \n " );
2017-03-25 14:56:23 +01:00
if ( $tagged [ 3 ]) {
2012-06-07 17:42:13 +02:00
$arr [ 'object' ] .= xmlify ( '<link rel="photo" type="' . $p [ 0 ][ 'type' ] . '" href="' . $tagged [ 3 ][ 'photo' ] . '" />' . " \n " );
2017-03-25 14:56:23 +01:00
}
2010-11-05 04:47:44 +01:00
$arr [ 'object' ] .= '</link></object>' . " \n " ;
2016-12-20 08:10:47 +01:00
$arr [ 'target' ] = '<target><type>' . ACTIVITY_OBJ_IMAGE . '</type><title>' . $p [ 0 ][ 'desc' ] . '</title><id>'
2017-08-26 09:32:10 +02:00
. System :: baseUrl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . '</id>' ;
$arr [ 'target' ] .= '<link>' . xmlify ( '<link rel="alternate" type="text/html" href="' . System :: baseUrl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . '" />' . " \n " . '<link rel="preview" type="' . $p [ 0 ][ 'type' ] . '" href="' . System :: baseUrl () . " /photo/ " . $p [ 0 ][ 'resource-id' ] . '-' . $best . '.' . $ext . '" />' ) . '</link></target>' ;
2010-11-05 04:47:44 +01:00
2018-01-28 12:18:08 +01:00
$item_id = Item :: insert ( $arr );
2016-10-22 12:14:41 +02:00
if ( $item_id ) {
2017-11-19 19:59:55 +01:00
Worker :: add ( PRIORITY_HIGH , " Notifier " , " tag " , $item_id );
2011-06-09 07:34:22 +02:00
}
2010-11-05 04:47:44 +01:00
}
}
2010-11-02 07:42:26 +01:00
}
2016-02-17 23:47:32 +01:00
goaway ( $_SESSION [ 'photo_return' ]);
2010-08-08 10:58:26 +02:00
return ; // NOTREACHED
}
2018-01-01 22:47:00 +01:00
// default post action - upload a photo
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'photo_post_init' , $_POST );
2011-01-27 12:52:18 +01:00
2018-01-01 22:47:00 +01:00
// Determine the album to use
$album = x ( $_REQUEST , 'album' ) ? notags ( trim ( $_REQUEST [ 'album' ])) : '' ;
$newalbum = x ( $_REQUEST , 'newalbum' ) ? notags ( trim ( $_REQUEST [ 'newalbum' ])) : '' ;
2010-08-06 06:15:24 +02:00
2012-02-21 23:15:10 +01:00
logger ( 'mod/photos.php: photos_post(): album= ' . $album . ' newalbum= ' . $newalbum , LOGGER_DEBUG );
2010-08-06 06:15:24 +02:00
2017-12-28 21:37:23 +01:00
if ( ! strlen ( $album )) {
2017-03-25 14:56:23 +01:00
if ( strlen ( $newalbum )) {
2010-08-06 06:15:24 +02:00
$album = $newalbum ;
2017-03-25 14:56:23 +01:00
} else {
2018-01-27 03:38:34 +01:00
$album = DateTimeFormat :: localNow ( 'Y' );
2017-03-25 14:56:23 +01:00
}
2010-08-06 06:15:24 +02:00
}
2017-03-25 14:56:23 +01:00
/*
2011-01-28 03:45:19 +01:00
* We create a wall item for every photo , but we don ' t want to
* overwhelm the data stream with a hundred newly uploaded photos .
2011-06-08 01:23:37 +02:00
* So we will make the first photo uploaded to this album in the last several hours
2011-01-28 03:45:19 +01:00
* visible by default , the rest will become visible over time when and if
2015-06-22 20:07:19 +02:00
* they acquire comments , likes , dislikes , and / or tags
2011-01-28 03:45:19 +01:00
*/
2011-06-08 01:23:37 +02:00
$r = q ( " SELECT * FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `created` > UTC_TIMESTAMP() - INTERVAL 3 HOUR " ,
2010-08-09 02:08:39 +02:00
dbesc ( $album ),
2010-12-06 03:08:36 +01:00
intval ( $page_owner_uid )
2010-08-09 02:08:39 +02:00
);
2018-01-22 15:16:25 +01:00
if ( ! DBM :: is_result ( $r ) || ( $album == L10n :: t ( 'Profile Photos' ))) {
2010-08-09 02:08:39 +02:00
$visible = 1 ;
2017-03-25 14:56:23 +01:00
} else {
2010-11-04 03:47:07 +01:00
$visible = 0 ;
2017-03-25 14:56:23 +01:00
}
2015-06-22 20:07:19 +02:00
2018-01-01 22:47:00 +01:00
if ( x ( $_REQUEST , 'not_visible' ) && $_REQUEST [ 'not_visible' ] !== 'false' ) {
2011-10-01 11:22:48 +02:00
$visible = 0 ;
2017-03-25 14:56:23 +01:00
}
2011-10-01 11:22:48 +02:00
2018-01-01 22:47:00 +01:00
$group_allow = defaults ( $_REQUEST , 'group_allow' , []);
$contact_allow = defaults ( $_REQUEST , 'contact_allow' , []);
$group_deny = defaults ( $_REQUEST , 'group_deny' , []);
$contact_deny = defaults ( $_REQUEST , 'contact_deny' , []);
$str_group_allow = perms2str ( is_array ( $group_allow ) ? $group_allow : explode ( ',' , $group_allow ));
$str_contact_allow = perms2str ( is_array ( $contact_allow ) ? $contact_allow : explode ( ',' , $contact_allow ));
$str_group_deny = perms2str ( is_array ( $group_deny ) ? $group_deny : explode ( ',' , $group_deny ));
$str_contact_deny = perms2str ( is_array ( $contact_deny ) ? $contact_deny : explode ( ',' , $contact_deny ));
2011-01-28 03:45:19 +01:00
2018-01-15 14:05:12 +01:00
$ret = [ 'src' => '' , 'filename' => '' , 'filesize' => 0 , 'type' => '' ];
2010-08-07 15:20:27 +02:00
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'photo_post_file' , $ret );
2010-08-07 15:20:27 +02:00
2018-01-01 22:47:00 +01:00
if ( x ( $ret , 'src' ) && x ( $ret , 'filesize' )) {
2011-01-28 03:45:19 +01:00
$src = $ret [ 'src' ];
$filename = $ret [ 'filename' ];
$filesize = $ret [ 'filesize' ];
2012-06-07 17:42:13 +02:00
$type = $ret [ 'type' ];
2018-01-01 22:47:00 +01:00
$error = UPLOAD_ERR_OK ;
2016-10-22 12:14:41 +02:00
} else {
2018-01-01 22:47:00 +01:00
$src = $_FILES [ 'userfile' ][ 'tmp_name' ];
$filename = basename ( $_FILES [ 'userfile' ][ 'name' ]);
$filesize = intval ( $_FILES [ 'userfile' ][ 'size' ]);
$type = $_FILES [ 'userfile' ][ 'type' ];
$error = $_FILES [ 'userfile' ][ 'error' ];
2011-01-28 03:45:19 +01:00
}
2018-01-01 22:47:00 +01:00
if ( $error !== UPLOAD_ERR_OK ) {
switch ( $error ) {
case UPLOAD_ERR_INI_SIZE :
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Image exceeds size limit of %s' , ini_get ( 'upload_max_filesize' )) . EOL );
2018-01-01 22:47:00 +01:00
break ;
case UPLOAD_ERR_FORM_SIZE :
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Image exceeds size limit of %s' , formatBytes ( defaults ( $_REQUEST , 'MAX_FILE_SIZE' , 0 ))) . EOL );
2018-01-01 22:47:00 +01:00
break ;
case UPLOAD_ERR_PARTIAL :
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Image upload didn\'t complete, please try again' ) . EOL );
2018-01-01 22:47:00 +01:00
break ;
case UPLOAD_ERR_NO_FILE :
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Image file is missing' ) . EOL );
2018-01-01 22:47:00 +01:00
break ;
case UPLOAD_ERR_NO_TMP_DIR :
case UPLOAD_ERR_CANT_WRITE :
case UPLOAD_ERR_EXTENSION :
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Server can\'t accept new file upload at this time, please contact your administrator' ) . EOL );
2018-01-01 22:47:00 +01:00
break ;
}
@ unlink ( $src );
$foo = 0 ;
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'photo_post_end' , $foo );
2018-01-01 22:47:00 +01:00
return ;
}
2017-03-25 14:56:23 +01:00
if ( $type == " " ) {
2017-12-07 14:56:11 +01:00
$type = Image :: guessType ( $filename );
2017-03-25 14:56:23 +01:00
}
2010-08-06 06:15:24 +02:00
2012-06-07 20:17:31 +02:00
logger ( 'photos: upload: received file: ' . $filename . ' as ' . $src . ' (' . $type . ') ' . $filesize . ' bytes' , LOGGER_DEBUG );
2011-06-29 03:59:41 +02:00
2018-01-01 22:47:00 +01:00
$maximagesize = Config :: get ( 'system' , 'maximagesize' );
2010-11-10 03:24:35 +01:00
2017-12-28 21:37:23 +01:00
if ( $maximagesize && ( $filesize > $maximagesize )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Image exceeds size limit of %s' , formatBytes ( $maximagesize )) . EOL );
2010-11-10 03:24:35 +01:00
@ unlink ( $src );
2011-05-22 02:17:27 +02:00
$foo = 0 ;
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'photo_post_end' , $foo );
2010-11-10 03:24:35 +01:00
return ;
}
2017-12-28 21:37:23 +01:00
if ( ! $filesize ) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Image file is empty.' ) . EOL );
2011-06-29 03:59:41 +02:00
@ unlink ( $src );
$foo = 0 ;
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'photo_post_end' , $foo );
2011-06-29 03:59:41 +02:00
return ;
}
2012-02-21 23:15:10 +01:00
logger ( 'mod/photos.php: photos_post(): loading the contents of ' . $src , LOGGER_DEBUG );
2011-01-28 03:45:19 +01:00
2010-08-06 06:15:24 +02:00
$imagedata = @ file_get_contents ( $src );
2012-06-25 10:37:44 +02:00
2017-12-07 14:56:11 +01:00
$Image = new Image ( $imagedata , $type );
2010-08-06 06:15:24 +02:00
2017-12-28 21:37:23 +01:00
if ( ! $Image -> isValid ()) {
2012-02-21 23:15:10 +01:00
logger ( 'mod/photos.php: photos_post(): unable to process image' , LOGGER_DEBUG );
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Unable to process image.' ) . EOL );
2010-08-06 06:15:24 +02:00
@ unlink ( $src );
2011-05-22 02:17:27 +02:00
$foo = 0 ;
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'photo_post_end' , $foo );
2010-08-06 06:15:24 +02:00
killme ();
}
2017-12-07 14:56:11 +01:00
$exif = $Image -> orient ( $src );
2010-08-06 06:15:24 +02:00
@ unlink ( $src );
2017-11-07 03:22:52 +01:00
$max_length = Config :: get ( 'system' , 'max_image_length' );
2017-12-28 21:37:23 +01:00
if ( ! $max_length ) {
2012-06-28 18:33:21 +02:00
$max_length = MAX_IMAGE_LENGTH ;
2017-03-25 14:56:23 +01:00
}
if ( $max_length > 0 ) {
2017-12-07 14:56:11 +01:00
$Image -> scaleDown ( $max_length );
2017-03-25 14:56:23 +01:00
}
2012-06-28 18:33:21 +02:00
2017-12-07 14:56:11 +01:00
$width = $Image -> getWidth ();
$height = $Image -> getHeight ();
2010-08-06 06:15:24 +02:00
$smallest = 0 ;
2018-02-20 11:02:07 +01:00
$photo_hash = Photo :: newResource ();
2010-09-14 07:57:31 +02:00
2017-12-07 14:56:11 +01:00
$r = Photo :: store ( $Image , $page_owner_uid , $visitor , $photo_hash , $filename , $album , 0 , 0 , $str_contact_allow , $str_group_allow , $str_contact_deny , $str_group_deny );
2010-08-06 06:15:24 +02:00
2017-12-28 21:37:23 +01:00
if ( ! $r ) {
2018-01-22 15:16:25 +01:00
logger ( 'mod/photos.php: photos_post(): image store failed' , LOGGER_DEBUG );
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Image upload failed.' ) . EOL );
2010-08-06 06:15:24 +02:00
killme ();
}
2016-10-22 12:14:41 +02:00
if ( $width > 640 || $height > 640 ) {
2017-12-07 14:56:11 +01:00
$Image -> scaleDown ( 640 );
Photo :: store ( $Image , $page_owner_uid , $visitor , $photo_hash , $filename , $album , 1 , 0 , $str_contact_allow , $str_group_allow , $str_contact_deny , $str_group_deny );
2010-08-06 06:15:24 +02:00
$smallest = 1 ;
}
2016-10-22 12:14:41 +02:00
if ( $width > 320 || $height > 320 ) {
2017-12-07 14:56:11 +01:00
$Image -> scaleDown ( 320 );
Photo :: store ( $Image , $page_owner_uid , $visitor , $photo_hash , $filename , $album , 2 , 0 , $str_contact_allow , $str_group_allow , $str_contact_deny , $str_group_deny );
2010-08-06 06:15:24 +02:00
$smallest = 2 ;
}
2015-06-22 20:07:19 +02:00
2018-06-16 08:44:19 +02:00
$uri = Item :: newURI ( $page_owner_uid );
2010-08-06 06:15:24 +02:00
// Create item container
2015-09-30 00:19:54 +02:00
$lat = $lon = null ;
2018-02-12 03:25:09 +01:00
if ( $exif && $exif [ 'GPS' ] && Feature :: isEnabled ( $page_owner_uid , 'photo_location' )) {
2018-01-04 03:01:41 +01:00
$lat = Photo :: getGps ( $exif [ 'GPS' ][ 'GPSLatitude' ], $exif [ 'GPS' ][ 'GPSLatitudeRef' ]);
$lon = Photo :: getGps ( $exif [ 'GPS' ][ 'GPSLongitude' ], $exif [ 'GPS' ][ 'GPSLongitudeRef' ]);
2015-09-30 00:19:54 +02:00
}
2018-01-15 14:05:12 +01:00
$arr = [];
2017-03-25 14:56:23 +01:00
if ( $lat && $lon ) {
2015-09-30 00:19:54 +02:00
$arr [ 'coord' ] = $lat . ' ' . $lon ;
2017-03-25 14:56:23 +01:00
}
2015-09-30 00:19:54 +02:00
2018-07-09 21:38:16 +02:00
$arr [ 'guid' ] = System :: createGUID ( 32 );
2010-12-06 03:08:36 +01:00
$arr [ 'uid' ] = $page_owner_uid ;
2010-11-04 03:47:07 +01:00
$arr [ 'uri' ] = $uri ;
$arr [ 'parent-uri' ] = $uri ;
$arr [ 'type' ] = 'photo' ;
$arr [ 'wall' ] = 1 ;
$arr [ 'resource-id' ] = $photo_hash ;
2010-12-06 03:08:36 +01:00
$arr [ 'contact-id' ] = $owner_record [ 'id' ];
$arr [ 'owner-name' ] = $owner_record [ 'name' ];
$arr [ 'owner-link' ] = $owner_record [ 'url' ];
$arr [ 'owner-avatar' ] = $owner_record [ 'thumb' ];
$arr [ 'author-name' ] = $owner_record [ 'name' ];
$arr [ 'author-link' ] = $owner_record [ 'url' ];
$arr [ 'author-avatar' ] = $owner_record [ 'thumb' ];
2010-11-04 03:47:07 +01:00
$arr [ 'title' ] = '' ;
$arr [ 'allow_cid' ] = $str_contact_allow ;
$arr [ 'allow_gid' ] = $str_group_allow ;
$arr [ 'deny_cid' ] = $str_contact_deny ;
$arr [ 'deny_gid' ] = $str_group_deny ;
$arr [ 'visible' ] = $visible ;
2011-10-17 23:52:03 +02:00
$arr [ 'origin' ] = 1 ;
2017-08-26 09:32:10 +02:00
$arr [ 'body' ] = '[url=' . System :: baseUrl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $photo_hash . ']'
2017-12-07 14:56:11 +01:00
. '[img]' . System :: baseUrl () . " /photo/ { $photo_hash } - { $smallest } . " . $Image -> getExt () . '[/img]'
2010-09-14 07:57:31 +02:00
. '[/url]' ;
2010-08-06 06:15:24 +02:00
2018-01-28 12:18:08 +01:00
$item_id = Item :: insert ( $arr );
2016-12-25 16:58:38 +01:00
// Update the photo albums cache
2018-01-04 04:36:15 +01:00
Photo :: clearAlbumCache ( $page_owner_uid );
2010-08-06 06:15:24 +02:00
2017-03-25 14:56:23 +01:00
if ( $visible ) {
2017-11-19 19:59:55 +01:00
Worker :: add ( PRIORITY_HIGH , " Notifier " , 'wall-new' , $item_id );
2017-03-25 14:56:23 +01:00
}
2011-05-03 14:27:19 +02:00
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'photo_post_end' , intval ( $item_id ));
2010-08-06 06:15:24 +02:00
2018-01-01 22:47:00 +01:00
// addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook
// if they do not wish to be redirected
2010-08-06 06:15:24 +02:00
2016-02-17 23:47:32 +01:00
goaway ( $_SESSION [ 'photo_return' ]);
2011-01-28 03:45:19 +01:00
// NOTREACHED
2010-08-06 06:15:24 +02:00
}
2018-01-01 22:47:00 +01:00
function photos_content ( App $a )
{
2010-08-06 06:15:24 +02:00
// URLs:
// photos/name
// photos/name/upload
2012-01-16 02:48:42 +01:00
// photos/name/upload/xxxxx (xxxxx is album name)
2010-08-06 06:15:24 +02:00
// photos/name/album/xxxxx
// photos/name/album/xxxxx/edit
// photos/name/image/xxxxx
// photos/name/image/xxxxx/edit
2010-08-09 02:08:39 +02:00
2017-12-28 21:37:23 +01:00
if ( Config :: get ( 'system' , 'block_public' ) && ! local_user () && ! remote_user ()) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Public access denied.' ) . EOL );
2011-04-22 02:29:47 +02:00
return ;
}
2014-02-22 15:46:19 +01:00
2017-05-07 20:40:23 +02:00
require_once 'include/security.php' ;
require_once 'include/conversation.php' ;
2011-04-13 02:58:16 +02:00
2017-12-28 21:37:23 +01:00
if ( ! x ( $a -> data , 'user' )) {
2018-06-19 21:06:17 +02:00
notice ( L10n :: t ( 'No photos selected' ) . EOL );
2010-08-06 06:15:24 +02:00
return ;
}
2017-12-07 14:56:11 +01:00
$phototypes = Image :: supportedTypes ();
2012-06-07 17:42:13 +02:00
2010-08-06 06:15:24 +02:00
$_SESSION [ 'photo_return' ] = $a -> cmd ;
2015-06-22 20:07:19 +02:00
// Parse arguments
2018-01-01 22:47:00 +01:00
$datum = null ;
2016-10-22 12:14:41 +02:00
if ( $a -> argc > 3 ) {
2010-08-06 06:15:24 +02:00
$datatype = $a -> argv [ 2 ];
$datum = $a -> argv [ 3 ];
2017-03-25 14:56:23 +01:00
} elseif (( $a -> argc > 2 ) && ( $a -> argv [ 2 ] === 'upload' )) {
2010-08-06 06:15:24 +02:00
$datatype = 'upload' ;
2017-03-25 14:56:23 +01:00
} else {
2010-08-06 06:15:24 +02:00
$datatype = 'summary' ;
2017-03-25 14:56:23 +01:00
}
2010-08-06 06:15:24 +02:00
2017-03-25 14:56:23 +01:00
if ( $a -> argc > 4 ) {
2010-08-06 06:15:24 +02:00
$cmd = $a -> argv [ 4 ];
2017-03-25 14:56:23 +01:00
} else {
2010-08-06 06:15:24 +02:00
$cmd = 'view' ;
2017-03-25 14:56:23 +01:00
}
2010-08-06 06:15:24 +02:00
// Setup permissions structures
2016-01-04 11:46:19 +01:00
$can_post = false ;
$visitor = 0 ;
$contact = null ;
$remote_contact = false ;
$contact_id = 0 ;
2018-07-10 14:27:56 +02:00
$edit = false ;
2010-08-06 06:15:24 +02:00
2010-12-06 03:08:36 +01:00
$owner_uid = $a -> data [ 'user' ][ 'uid' ];
2010-09-28 04:48:45 +02:00
2010-12-06 03:08:36 +01:00
$community_page = (( $a -> data [ 'user' ][ 'page-flags' ] == PAGE_COMMUNITY ) ? true : false );
2010-12-08 02:16:05 +01:00
2017-12-28 21:37:23 +01:00
if ( local_user () && ( local_user () == $owner_uid )) {
2016-01-04 11:46:19 +01:00
$can_post = true ;
2017-03-25 14:56:23 +01:00
} else {
2016-10-22 12:14:41 +02:00
if ( $community_page && remote_user ()) {
if ( is_array ( $_SESSION [ 'remote' ])) {
foreach ( $_SESSION [ 'remote' ] as $v ) {
if ( $v [ 'uid' ] == $owner_uid ) {
2016-01-04 11:46:19 +01:00
$contact_id = $v [ 'cid' ];
break ;
}
}
}
2016-10-22 12:14:41 +02:00
if ( $contact_id ) {
2016-01-04 11:46:19 +01:00
$r = q ( " SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $contact_id ),
intval ( $owner_uid )
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2016-01-04 11:46:19 +01:00
$can_post = true ;
$contact = $r [ 0 ];
$remote_contact = true ;
2016-11-14 18:49:51 +01:00
$visitor = $contact_id ;
2016-01-04 11:46:19 +01:00
}
}
}
}
2018-01-01 22:47:00 +01:00
$groups = [];
2016-01-04 11:46:19 +01:00
2018-01-01 22:47:00 +01:00
// perhaps they're visiting - but not a community page, so they wouldn't have write access
2017-12-28 21:37:23 +01:00
if ( remote_user () && ! $visitor ) {
2016-01-04 11:46:19 +01:00
$contact_id = 0 ;
2016-10-22 12:14:41 +02:00
if ( is_array ( $_SESSION [ 'remote' ])) {
foreach ( $_SESSION [ 'remote' ] as $v ) {
if ( $v [ 'uid' ] == $owner_uid ) {
2016-01-04 11:46:19 +01:00
$contact_id = $v [ 'cid' ];
break ;
}
}
}
2016-10-22 12:14:41 +02:00
if ( $contact_id ) {
2017-12-17 01:21:56 +01:00
$groups = Group :: getIdsByContactId ( $contact_id );
2016-01-04 11:46:19 +01:00
$r = q ( " SELECT * FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $contact_id ),
intval ( $owner_uid )
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2016-01-04 11:46:19 +01:00
$contact = $r [ 0 ];
$remote_contact = true ;
}
}
}
2018-01-01 22:47:00 +01:00
if ( ! $remote_contact && local_user ()) {
$contact_id = $_SESSION [ 'cid' ];
$contact = $a -> contact ;
2016-01-04 11:46:19 +01:00
}
2010-08-06 06:15:24 +02:00
2017-12-28 21:37:23 +01:00
if ( $a -> data [ 'user' ][ 'hidewall' ] && ( local_user () != $owner_uid ) && ! $remote_contact ) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Access to this item is restricted.' ) . EOL );
2011-05-28 09:42:01 +02:00
return ;
}
2018-01-01 22:47:00 +01:00
$sql_extra = permissions_sql ( $owner_uid , $remote_contact , $groups );
2010-08-06 06:15:24 +02:00
2011-06-23 11:30:17 +02:00
$o = " " ;
// tabs
2015-09-29 19:44:26 +02:00
$is_owner = ( local_user () && ( local_user () == $owner_uid ));
2018-01-15 03:22:39 +01:00
$o .= Profile :: getTabs ( $a , $is_owner , $a -> data [ 'user' ][ 'nickname' ]);
2011-06-23 11:30:17 +02:00
2018-01-01 22:47:00 +01:00
// Display upload form
2016-10-22 12:14:41 +02:00
if ( $datatype === 'upload' ) {
2017-12-28 21:37:23 +01:00
if ( ! $can_post ) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Permission denied.' ));
2010-08-06 06:15:24 +02:00
return ;
}
2012-01-16 02:48:42 +01:00
2018-01-01 22:47:00 +01:00
$selname = $datum ? hex2bin ( $datum ) : '' ;
2012-01-16 02:48:42 +01:00
2012-07-28 17:57:16 +02:00
$albumselect = '' ;
2010-08-06 06:15:24 +02:00
2018-07-20 21:23:12 +02:00
$albumselect .= '<option value="" ' . ( ! $selname ? ' selected="selected" ' : '' ) . '><current year></option>' ;
2016-10-22 12:14:41 +02:00
if ( count ( $a -> data [ 'albums' ])) {
foreach ( $a -> data [ 'albums' ] as $album ) {
2018-01-22 15:16:25 +01:00
if (( $album [ 'album' ] === '' ) || ( $album [ 'album' ] === 'Contact Photos' ) || ( $album [ 'album' ] === L10n :: t ( 'Contact Photos' ))) {
2010-08-06 06:15:24 +02:00
continue ;
2017-03-25 14:56:23 +01:00
}
2012-01-16 02:48:42 +01:00
$selected = (( $selname === $album [ 'album' ]) ? ' selected="selected" ' : '' );
$albumselect .= '<option value="' . $album [ 'album' ] . '"' . $selected . '>' . $album [ 'album' ] . '</option>' ;
2010-08-06 06:15:24 +02:00
}
}
2010-10-18 09:43:49 +02:00
2011-01-28 03:45:19 +01:00
$uploader = '' ;
2018-01-15 14:05:12 +01:00
$ret = [ 'post_url' => 'photos/' . $a -> data [ 'user' ][ 'nickname' ],
2011-01-28 03:45:19 +01:00
'addon_text' => $uploader ,
2018-01-15 14:05:12 +01:00
'default_upload' => true ];
2011-01-28 03:45:19 +01:00
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( 'photo_upload_form' , $ret );
2011-01-28 03:45:19 +01:00
2018-01-15 14:05:12 +01:00
$default_upload_box = replace_macros ( get_markup_template ( 'photos_default_uploader_box.tpl' ), []);
$default_upload_submit = replace_macros ( get_markup_template ( 'photos_default_uploader_submit.tpl' ), [
2018-01-22 15:16:25 +01:00
'$submit' => L10n :: t ( 'Submit' ),
2018-01-15 14:05:12 +01:00
]);
2011-01-28 03:45:19 +01:00
2012-11-26 04:34:54 +01:00
$usage_message = '' ;
2011-01-28 03:45:19 +01:00
2011-05-11 13:37:13 +02:00
$tpl = get_markup_template ( 'photos_upload.tpl' );
2012-12-22 20:57:29 +01:00
2018-03-03 00:41:24 +01:00
$aclselect_e = ( $visitor ? '' : ACL :: getFullSelectorHTML ( $a -> user ));
2012-12-22 20:57:29 +01:00
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $tpl ,[
2018-01-22 15:16:25 +01:00
'$pagename' => L10n :: t ( 'Upload Photos' ),
2010-08-06 06:15:24 +02:00
'$sessid' => session_id (),
2012-06-25 10:37:44 +02:00
'$usage' => $usage_message ,
2010-12-06 03:08:36 +01:00
'$nickname' => $a -> data [ 'user' ][ 'nickname' ],
2018-01-22 15:16:25 +01:00
'$newalbum' => L10n :: t ( 'New album name: ' ),
2018-07-20 21:23:12 +02:00
'$existalbumtext' => L10n :: t ( 'or select existing album:' ),
2018-01-22 15:16:25 +01:00
'$nosharetext' => L10n :: t ( 'Do not show a status post for this upload' ),
2018-01-01 22:47:00 +01:00
'$albumselect' => $albumselect ,
2018-01-22 15:16:25 +01:00
'$permissions' => L10n :: t ( 'Permissions' ),
2012-12-22 20:57:29 +01:00
'$aclselect' => $aclselect_e ,
2013-01-26 20:52:21 +01:00
'$alt_uploader' => $ret [ 'addon_text' ],
2017-12-28 21:37:23 +01:00
'$default_upload_box' => ( $ret [ 'default_upload' ] ? $default_upload_box : '' ),
'$default_upload_submit' => ( $ret [ 'default_upload' ] ? $default_upload_submit : '' ),
2013-01-26 20:52:21 +01:00
'$uploadurl' => $ret [ 'post_url' ],
// ACL permissions box
2018-01-22 15:16:25 +01:00
'$group_perms' => L10n :: t ( 'Show to Groups' ),
'$contact_perms' => L10n :: t ( 'Show to Contacts' ),
2018-01-01 22:47:00 +01:00
'$return_path' => $a -> query_string ,
2018-01-15 14:05:12 +01:00
]);
2010-08-06 06:15:24 +02:00
2015-06-22 20:07:19 +02:00
return $o ;
2010-08-06 06:15:24 +02:00
}
2018-01-01 22:47:00 +01:00
// Display a single photo album
2016-10-22 12:14:41 +02:00
if ( $datatype === 'album' ) {
2010-08-06 06:15:24 +02:00
$album = hex2bin ( $datum );
2015-06-22 20:07:19 +02:00
$r = q ( " SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s'
2011-07-29 01:49:43 +02:00
AND `scale` <= 4 $sql_extra GROUP BY `resource-id` " ,
2010-12-06 03:08:36 +01:00
intval ( $owner_uid ),
2010-08-06 06:15:24 +02:00
dbesc ( $album )
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2010-08-06 06:15:24 +02:00
$a -> set_pager_total ( count ( $r ));
2011-01-04 09:06:36 +01:00
$a -> set_pager_itemspage ( 20 );
}
2010-08-06 06:15:24 +02:00
2017-03-25 14:56:23 +01:00
/// @TODO I have seen this many times, maybe generalize it script-wide and encapsulate it?
2018-01-01 22:47:00 +01:00
$order_field = defaults ( $_GET , 'order' , '' );
if ( $order_field === 'posted' ) {
2012-09-09 03:33:28 +02:00
$order = 'ASC' ;
2017-03-25 14:56:23 +01:00
} else {
2012-09-09 03:33:28 +02:00
$order = 'DESC' ;
2017-03-25 14:56:23 +01:00
}
2012-09-09 03:33:28 +02:00
2017-04-15 00:42:44 +02:00
$r = q ( " SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`,
2017-04-20 21:23:45 +02:00
ANY_VALUE ( `type` ) AS `type` , max ( `scale` ) AS `scale` , ANY_VALUE ( `desc` ) as `desc` ,
ANY_VALUE ( `created` ) as `created`
2017-04-15 00:42:44 +02:00
FROM `photo` WHERE `uid` = % d AND `album` = '%s'
AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` $order LIMIT % d , % d " ,
2010-12-06 03:08:36 +01:00
intval ( $owner_uid ),
2010-08-06 06:15:24 +02:00
dbesc ( $album ),
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2017-03-25 14:56:23 +01:00
// edit album name
2016-10-22 12:14:41 +02:00
if ( $cmd === 'edit' ) {
2018-01-22 15:16:25 +01:00
if (( $album !== L10n :: t ( 'Profile Photos' )) && ( $album !== 'Contact Photos' ) && ( $album !== L10n :: t ( 'Contact Photos' ))) {
2016-10-22 12:14:41 +02:00
if ( $can_post ) {
2011-05-11 13:37:13 +02:00
$edit_tpl = get_markup_template ( 'album_edit.tpl' );
2012-12-22 20:57:29 +01:00
2017-11-27 07:44:49 +01:00
$album_e = $album ;
2012-12-22 20:57:29 +01:00
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $edit_tpl ,[
2018-01-22 15:16:25 +01:00
'$nametext' => L10n :: t ( 'New album name: ' ),
2010-12-06 03:08:36 +01:00
'$nickname' => $a -> data [ 'user' ][ 'nickname' ],
2012-12-22 20:57:29 +01:00
'$album' => $album_e ,
2010-08-09 02:08:39 +02:00
'$hexalbum' => bin2hex ( $album ),
2018-01-22 15:16:25 +01:00
'$submit' => L10n :: t ( 'Submit' ),
'$dropsubmit' => L10n :: t ( 'Delete Album' )
2018-01-15 14:05:12 +01:00
]);
2010-08-09 02:08:39 +02:00
}
}
2016-10-22 12:14:41 +02:00
} else {
2018-01-22 15:16:25 +01:00
if (( $album !== L10n :: t ( 'Profile Photos' )) && ( $album !== 'Contact Photos' ) && ( $album !== L10n :: t ( 'Contact Photos' )) && $can_post ) {
$edit = [ L10n :: t ( 'Edit Album' ), 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $album ) . '/edit' ];
2010-08-09 02:08:39 +02:00
}
}
2012-01-16 02:48:42 +01:00
2018-01-01 22:47:00 +01:00
if ( $order_field === 'posted' ) {
2018-01-22 15:16:25 +01:00
$order = [ L10n :: t ( 'Show Newest First' ), 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $album )];
2017-03-25 14:56:23 +01:00
} else {
2018-01-22 15:16:25 +01:00
$order = [ L10n :: t ( 'Show Oldest First' ), 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $album ) . '?f=&order=posted' ];
2017-03-25 14:56:23 +01:00
}
2012-09-09 03:33:28 +02:00
2018-01-15 14:05:12 +01:00
$photos = [];
2012-09-09 03:33:28 +02:00
2018-01-01 22:47:00 +01:00
if ( DBM :: is_result ( $r )) {
2017-12-29 13:47:56 +01:00
// "Twist" is only used for the duepunto theme with style "slackr"
2017-12-28 21:37:23 +01:00
$twist = false ;
2016-10-22 12:14:41 +02:00
foreach ( $r as $rr ) {
2017-12-28 21:37:23 +01:00
$twist = ! $twist ;
2014-02-22 15:46:19 +01:00
2012-06-07 17:42:13 +02:00
$ext = $phototypes [ $rr [ 'type' ]];
2012-05-22 01:40:11 +02:00
2017-11-27 07:44:49 +01:00
$imgalt_e = $rr [ 'filename' ];
$desc_e = $rr [ 'desc' ];
2015-06-22 20:07:19 +02:00
2018-01-15 14:05:12 +01:00
$photos [] = [
2014-12-25 16:20:55 +01:00
'id' => $rr [ 'id' ],
2017-12-28 21:37:23 +01:00
'twist' => ' ' . ( $twist ? 'rotleft' : 'rotright' ) . rand ( 2 , 4 ),
2016-02-17 23:47:32 +01:00
'link' => 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $rr [ 'resource-id' ]
2018-01-01 22:47:00 +01:00
. ( $order_field === 'posted' ? '?f=&order=posted' : '' ),
2018-01-22 15:16:25 +01:00
'title' => L10n :: t ( 'View Photo' ),
2016-02-17 23:47:32 +01:00
'src' => 'photo/' . $rr [ 'resource-id' ] . '-' . $rr [ 'scale' ] . '.' . $ext ,
2014-12-25 16:20:55 +01:00
'alt' => $imgalt_e ,
'desc' => $desc_e ,
'ext' => $ext ,
2018-01-01 22:47:00 +01:00
'hash' => $rr [ 'resource-id' ],
2018-01-15 14:05:12 +01:00
];
2018-01-01 22:47:00 +01:00
}
2010-08-06 06:15:24 +02:00
}
2014-12-25 16:20:55 +01:00
$tpl = get_markup_template ( 'photo_album.tpl' );
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $tpl , [
2014-12-25 16:20:55 +01:00
'$photos' => $photos ,
'$album' => $album ,
2016-01-04 11:46:19 +01:00
'$can_post' => $can_post ,
2018-01-22 15:16:25 +01:00
'$upload' => [ L10n :: t ( 'Upload New Photos' ), 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/upload/' . bin2hex ( $album )],
2014-12-25 16:20:55 +01:00
'$order' => $order ,
2016-08-04 21:53:22 +02:00
'$edit' => $edit ,
'$paginate' => paginate ( $a ),
2018-01-15 14:05:12 +01:00
]);
2014-12-25 16:20:55 +01:00
2010-08-06 06:15:24 +02:00
return $o ;
2014-02-22 15:46:19 +01:00
}
2010-08-06 06:15:24 +02:00
2018-01-01 22:47:00 +01:00
// Display one photo
2016-10-22 12:14:41 +02:00
if ( $datatype === 'image' ) {
2010-08-07 15:20:27 +02:00
// fetch image, item containing image, then comments
2015-06-22 20:07:19 +02:00
$ph = q ( " SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
2010-08-06 06:15:24 +02:00
$sql_extra ORDER BY `scale` ASC " ,
2010-12-06 03:08:36 +01:00
intval ( $owner_uid ),
2010-08-06 06:15:24 +02:00
dbesc ( $datum )
);
2017-12-28 21:37:23 +01:00
if ( ! DBM :: is_result ( $ph )) {
2014-02-22 15:46:19 +01:00
$ph = q ( " SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
2011-09-23 05:03:09 +02:00
LIMIT 1 " ,
intval ( $owner_uid ),
dbesc ( $datum )
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $ph )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Permission denied. Access to this item may be restricted.' ));
2017-03-25 14:32:49 +01:00
} else {
2018-06-19 21:06:17 +02:00
notice ( L10n :: t ( 'Photo not available' ) . EOL );
2017-03-25 14:32:49 +01:00
}
2010-08-06 06:15:24 +02:00
return ;
}
2011-03-12 05:06:13 +01:00
$prevlink = '' ;
$nextlink = '' ;
2017-03-25 15:06:54 +01:00
/*
* @ todo This query is totally bad , the whole functionality has to be changed
* The query leads to a really intense used index .
* By now we hide it if someone wants to .
*/
2017-03-25 15:06:54 +01:00
if ( ! Config :: get ( 'system' , 'no_count' , false )) {
2018-06-20 22:12:59 +02:00
$order_field = defaults ( $_GET , 'order' , '' );
if ( $order_field === 'posted' ) {
2017-01-15 15:50:26 +01:00
$order = 'ASC' ;
2017-12-28 21:37:23 +01:00
} else {
2017-01-15 15:50:26 +01:00
$order = 'DESC' ;
2017-12-28 21:37:23 +01:00
}
2012-09-09 03:33:28 +02:00
2017-09-15 23:00:39 +02:00
$prvnxt = q ( " SELECT `resource-id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `scale` = 0
2017-01-15 15:50:26 +01:00
$sql_extra ORDER BY `created` $order " ,
dbesc ( $ph [ 0 ][ 'album' ]),
intval ( $owner_uid )
);
2011-03-12 05:06:13 +01:00
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $prvnxt )) {
2017-03-25 14:32:49 +01:00
foreach ( $prvnxt as $z => $entry ) {
if ( $entry [ 'resource-id' ] == $ph [ 0 ][ 'resource-id' ]) {
2017-01-15 15:50:26 +01:00
$prv = $z - 1 ;
$nxt = $z + 1 ;
2017-03-25 14:32:49 +01:00
if ( $prv < 0 ) {
2017-01-15 15:50:26 +01:00
$prv = count ( $prvnxt ) - 1 ;
2017-03-25 14:32:49 +01:00
}
if ( $nxt >= count ( $prvnxt )) {
2017-01-15 15:50:26 +01:00
$nxt = 0 ;
2017-03-25 14:32:49 +01:00
}
2017-01-15 15:50:26 +01:00
break ;
}
2011-03-12 05:06:13 +01:00
}
2017-12-28 21:37:23 +01:00
$edit_suffix = ((( $cmd === 'edit' ) && $can_post ) ? '/edit' : '' );
2018-01-01 22:47:00 +01:00
$prevlink = 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $prvnxt [ $prv ][ 'resource-id' ] . $edit_suffix . ( $order_field === 'posted' ? '?f=&order=posted' : '' );
$nextlink = 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $prvnxt [ $nxt ][ 'resource-id' ] . $edit_suffix . ( $order_field === 'posted' ? '?f=&order=posted' : '' );
2017-01-15 15:50:26 +01:00
}
}
2011-03-12 05:06:13 +01:00
2017-01-26 15:23:30 +01:00
if ( count ( $ph ) == 1 ) {
2010-08-06 15:30:25 +02:00
$hires = $lores = $ph [ 0 ];
2017-01-26 15:23:30 +01:00
}
2018-05-14 22:34:11 +02:00
2016-10-22 12:14:41 +02:00
if ( count ( $ph ) > 1 ) {
if ( $ph [ 1 ][ 'scale' ] == 2 ) {
2010-08-07 02:16:52 +02:00
// original is 640 or less, we can display it directly
$hires = $lores = $ph [ 0 ];
2016-10-22 12:14:41 +02:00
} else {
$hires = $ph [ 0 ];
$lores = $ph [ 1 ];
2010-08-07 02:16:52 +02:00
}
2010-08-06 06:15:24 +02:00
}
2016-02-17 23:47:32 +01:00
$album_link = 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $ph [ 0 ][ 'album' ]);
2017-03-25 14:32:49 +01:00
2017-03-25 14:57:40 +01:00
$tools = null ;
$lock = null ;
2014-02-22 15:46:19 +01:00
2016-10-22 12:14:41 +02:00
if ( $can_post && ( $ph [ 0 ][ 'uid' ] == $owner_uid )) {
2018-01-15 14:05:12 +01:00
$tools = [
2018-01-22 15:16:25 +01:00
'edit' => [ 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $datum . (( $cmd === 'edit' ) ? '' : '/edit' ), (( $cmd === 'edit' ) ? L10n :: t ( 'View photo' ) : L10n :: t ( 'Edit photo' ))],
'profile' => [ 'profile_photo/use/' . $ph [ 0 ][ 'resource-id' ], L10n :: t ( 'Use as profile photo' )],
2018-01-15 14:05:12 +01:00
];
2011-05-05 10:53:03 +02:00
2011-02-03 17:24:58 +01:00
// lock
2018-06-19 21:06:17 +02:00
$lock = ((( $ph [ 0 ][ 'uid' ] == local_user ()) && ( strlen ( $ph [ 0 ][ 'allow_cid' ]) || strlen ( $ph [ 0 ][ 'allow_gid' ])
|| strlen ( $ph [ 0 ][ 'deny_cid' ]) || strlen ( $ph [ 0 ][ 'deny_gid' ])))
2018-01-22 15:16:25 +01:00
? L10n :: t ( 'Private Message' )
2011-05-05 10:53:03 +02:00
: Null );
2014-02-22 15:46:19 +01:00
2010-08-08 10:58:26 +02:00
}
2018-06-19 21:06:17 +02:00
if ( $cmd === 'edit' ) {
2012-07-28 17:57:16 +02:00
$tpl = get_markup_template ( 'photo_edit_head.tpl' );
2018-01-15 14:05:12 +01:00
$a -> page [ 'htmlhead' ] .= replace_macros ( $tpl ,[
2012-07-28 17:57:16 +02:00
'$prevlink' => $prevlink ,
'$nextlink' => $nextlink
2018-01-15 14:05:12 +01:00
]);
2012-03-19 09:20:53 +01:00
}
2017-01-26 15:23:30 +01:00
if ( $prevlink ) {
2018-01-15 14:05:12 +01:00
$prevlink = [ $prevlink , '<div class="icon prev"></div>' ] ;
2017-01-26 15:23:30 +01:00
}
2010-08-08 10:58:26 +02:00
2018-01-15 14:05:12 +01:00
$photo = [
2016-02-17 23:47:32 +01:00
'href' => 'photo/' . $hires [ 'resource-id' ] . '-' . $hires [ 'scale' ] . '.' . $phototypes [ $hires [ 'type' ]],
2018-01-22 15:16:25 +01:00
'title' => L10n :: t ( 'View Full Size' ),
2018-01-27 03:38:34 +01:00
'src' => 'photo/' . $lores [ 'resource-id' ] . '-' . $lores [ 'scale' ] . '.' . $phototypes [ $lores [ 'type' ]] . '?f=&_u=' . DateTimeFormat :: utcNow ( 'ymdhis' ),
2014-02-22 15:46:19 +01:00
'height' => $hires [ 'height' ],
'width' => $hires [ 'width' ],
'album' => $hires [ 'album' ],
'filename' => $hires [ 'filename' ],
2018-01-15 14:05:12 +01:00
];
2011-03-12 05:06:13 +01:00
2017-03-25 14:32:49 +01:00
if ( $nextlink ) {
2018-01-15 14:05:12 +01:00
$nextlink = [ $nextlink , '<div class="icon next"></div>' ];
2017-03-25 14:32:49 +01:00
}
2010-08-06 06:15:24 +02:00
2010-08-08 10:58:26 +02:00
2010-08-06 15:30:25 +02:00
// Do we have an item for this photo?
2014-02-22 15:46:19 +01:00
// FIXME! - replace following code to display the conversation with our normal
2012-09-29 15:04:01 +02:00
// conversation functions so that it works correctly and tracks changes
// in the evolving conversation code.
// The difference is that we won't be displaying the conversation head item
// as a "post" but displaying instead the photo it is linked to
2018-06-19 21:06:17 +02:00
/// @todo Rewrite this query. To do so, $sql_extra must be changed
$linked_items = q ( " SELECT `id` FROM `item` WHERE `resource-id` = '%s' $sql_extra LIMIT 1 " ,
2010-08-06 15:30:25 +02:00
dbesc ( $datum )
);
2015-09-30 00:19:54 +02:00
$map = null ;
2018-01-01 22:47:00 +01:00
$link_item = [];
2015-09-30 00:19:54 +02:00
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $linked_items )) {
2018-06-19 21:06:17 +02:00
// This is a workaround to not being forced to rewrite the while $sql_extra handling
2018-06-23 12:32:53 +02:00
$link_item = Item :: selectFirst ([], [ 'id' => $linked_items [ 0 ][ 'id' ]]);
2010-08-06 15:30:25 +02:00
2018-06-23 12:32:53 +02:00
$condition = [ " `parent` = ? AND `parent` != `id` " , $link_item [ 'parent' ]];
2018-07-20 14:19:26 +02:00
$a -> set_pager_total ( DBA :: count ( 'item' , $condition ));
2010-08-06 15:30:25 +02:00
2018-06-23 12:32:53 +02:00
$params = [ 'order' => [ 'id' ], 'limit' => [ $a -> pager [ 'start' ], $a -> pager [ 'itemspage' ]]];
$result = Item :: selectForUser ( $link_item [ 'uid' ], [], $condition , $params );
$items = Item :: inArray ( $result );
2013-01-13 15:11:06 +01:00
2017-12-28 21:37:23 +01:00
if ( local_user () && ( local_user () == $link_item [ 'uid' ])) {
2018-02-06 13:40:22 +01:00
Item :: update ([ 'unseen' => false ], [ 'parent' => $link_item [ 'parent' ]]);
2010-11-04 08:19:10 +01:00
}
2015-09-30 00:19:54 +02:00
2016-10-22 12:14:41 +02:00
if ( $link_item [ 'coord' ]) {
2017-12-13 22:37:34 +01:00
$map = Map :: byCoordinates ( $link_item [ 'coord' ]);
2015-09-30 00:19:54 +02:00
}
2010-08-09 02:08:39 +02:00
}
2010-08-06 06:15:24 +02:00
2017-03-25 14:32:49 +01:00
$tags = null ;
2011-07-04 04:57:20 +02:00
2016-10-22 12:14:41 +02:00
if ( count ( $linked_items ) && strlen ( $link_item [ 'tag' ])) {
2017-03-30 21:42:00 +02:00
$arr = explode ( ',' , $link_item [ 'tag' ]);
2011-05-05 10:53:03 +02:00
// parse tags and add links
2010-11-02 07:42:26 +01:00
$tag_str = '' ;
2016-10-22 12:14:41 +02:00
foreach ( $arr as $t ) {
2017-03-25 14:32:49 +01:00
if ( strlen ( $tag_str )) {
2010-11-02 07:42:26 +01:00
$tag_str .= ', ' ;
2017-03-25 14:32:49 +01:00
}
2018-02-15 03:33:55 +01:00
$tag_str .= BBCode :: convert ( $t );
2014-02-22 15:46:19 +01:00
}
2018-01-22 15:16:25 +01:00
$tags = [ L10n :: t ( 'Tags: ' ), $tag_str ];
2016-10-22 12:14:41 +02:00
if ( $cmd === 'edit' ) {
2016-02-17 23:47:32 +01:00
$tags [] = 'tagrm/' . $link_item [ 'id' ];
2018-01-22 15:16:25 +01:00
$tags [] = L10n :: t ( '[Remove any tag]' );
2011-06-09 06:43:32 +02:00
}
2010-08-09 02:08:39 +02:00
}
2010-08-08 10:58:26 +02:00
2010-11-05 04:47:44 +01:00
2011-05-05 10:53:03 +02:00
$edit = Null ;
2018-01-01 22:47:00 +01:00
if ( $cmd === 'edit' && $can_post ) {
2011-05-11 13:37:13 +02:00
$edit_tpl = get_markup_template ( 'photo_edit.tpl' );
2012-12-22 20:57:29 +01:00
2017-11-27 07:44:49 +01:00
$album_e = $ph [ 0 ][ 'album' ];
$caption_e = $ph [ 0 ][ 'desc' ];
2018-03-03 00:41:24 +01:00
$aclselect_e = ACL :: getFullSelectorHTML ( $ph [ 0 ]);
2012-12-22 20:57:29 +01:00
2018-01-15 14:05:12 +01:00
$edit = replace_macros ( $edit_tpl , [
2010-08-09 02:08:39 +02:00
'$id' => $ph [ 0 ][ 'id' ],
2018-01-22 15:16:25 +01:00
'$album' => [ 'albname' , L10n :: t ( 'New album name' ), $album_e , '' ],
'$caption' => [ 'desc' , L10n :: t ( 'Caption' ), $caption_e , '' ],
'$tags' => [ 'newtag' , L10n :: t ( 'Add a Tag' ), " " , L10n :: t ( 'Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping' )],
'$rotate_none' => [ 'rotate' , L10n :: t ( 'Do not rotate' ), 0 , '' , true ],
2018-01-24 22:51:32 +01:00
'$rotate_cw' => [ 'rotate' , L10n :: t ( " Rotate CW \x28 right \x29 " ), 1 , '' ],
'$rotate_ccw' => [ 'rotate' , L10n :: t ( " Rotate CCW \x28 left \x29 " ), 2 , '' ],
2015-06-22 20:07:19 +02:00
2010-12-06 03:08:36 +01:00
'$nickname' => $a -> data [ 'user' ][ 'nickname' ],
2010-08-09 02:08:39 +02:00
'$resource_id' => $ph [ 0 ][ 'resource-id' ],
2018-01-22 15:16:25 +01:00
'$permissions' => L10n :: t ( 'Permissions' ),
2012-12-22 20:57:29 +01:00
'$aclselect' => $aclselect_e ,
2015-06-22 20:07:19 +02:00
2018-01-01 22:47:00 +01:00
'$item_id' => defaults ( $link_item , 'id' , 0 ),
2018-01-22 15:16:25 +01:00
'$submit' => L10n :: t ( 'Submit' ),
'$delete' => L10n :: t ( 'Delete Photo' ),
2013-01-26 20:52:21 +01:00
// ACL permissions box
2018-01-22 15:16:25 +01:00
'$group_perms' => L10n :: t ( 'Show to Groups' ),
'$contact_perms' => L10n :: t ( 'Show to Contacts' ),
2018-01-01 22:47:00 +01:00
'$return_path' => $a -> query_string ,
2018-01-15 14:05:12 +01:00
]);
2010-08-09 02:08:39 +02:00
}
2010-08-07 15:20:27 +02:00
2018-01-01 22:47:00 +01:00
$like = '' ;
$dislike = '' ;
$likebuttons = '' ;
$comments = '' ;
$paginate = '' ;
$responses = '' ;
2010-08-06 15:30:25 +02:00
2018-01-01 22:47:00 +01:00
if ( count ( $linked_items )) {
2011-05-11 13:37:13 +02:00
$cmnt_tpl = get_markup_template ( 'comment_item.tpl' );
$tpl = get_markup_template ( 'photo_item.tpl' );
2010-08-06 15:30:25 +02:00
$return_url = $a -> cmd ;
2018-01-04 03:05:55 +01:00
if ( $can_post || can_write_wall ( $owner_uid )) {
2018-01-01 22:47:00 +01:00
$like_tpl = get_markup_template ( 'like_noshare.tpl' );
2018-01-15 14:05:12 +01:00
$likebuttons = replace_macros ( $like_tpl , [
2011-05-05 10:53:03 +02:00
'$id' => $link_item [ 'id' ],
2018-01-22 15:16:25 +01:00
'$likethis' => L10n :: t ( " I like this \x28 toggle \x29 " ),
'$nolike' => ( Feature :: isEnabled ( local_user (), 'dislike' ) ? L10n :: t ( " I don't like this \x28 toggle \x29 " ) : '' ),
'$wait' => L10n :: t ( 'Please wait' ),
2013-01-26 20:52:21 +01:00
'$return_path' => $a -> query_string ,
2018-01-15 14:05:12 +01:00
]);
2011-03-09 03:53:52 +01:00
}
2010-11-04 03:47:07 +01:00
2018-06-23 12:32:53 +02:00
if ( ! DBM :: is_result ( $items )) {
2018-01-18 07:54:44 +01:00
if (( $can_post || can_write_wall ( $owner_uid ))) {
2018-01-15 14:05:12 +01:00
$comments .= replace_macros ( $cmnt_tpl , [
2017-03-30 21:48:46 +02:00
'$return_path' => '' ,
'$jsreload' => $return_url ,
'$id' => $link_item [ 'id' ],
'$parent' => $link_item [ 'id' ],
'$profile_uid' => $owner_uid ,
'$mylink' => $contact [ 'url' ],
2018-01-22 15:16:25 +01:00
'$mytitle' => L10n :: t ( 'This is you' ),
2017-03-30 21:48:46 +02:00
'$myphoto' => $contact [ 'thumb' ],
2018-01-22 15:16:25 +01:00
'$comment' => L10n :: t ( 'Comment' ),
'$submit' => L10n :: t ( 'Submit' ),
'$preview' => L10n :: t ( 'Preview' ),
'$sourceapp' => L10n :: t ( $a -> sourcename ),
2017-03-30 21:48:46 +02:00
'$ww' => '' ,
'$rand_num' => random_digits ( 12 )
2018-01-15 14:05:12 +01:00
]);
2010-08-06 15:30:25 +02:00
}
}
2018-01-15 14:05:12 +01:00
$conv_responses = [
2018-01-22 15:16:25 +01:00
'like' => [ 'title' => L10n :: t ( 'Likes' , 'title' )], 'dislike' => [ 'title' => L10n :: t ( 'Dislikes' , 'title' )],
'attendyes' => [ 'title' => L10n :: t ( 'Attending' , 'title' )], 'attendno' => [ 'title' => L10n :: t ( 'Not attending' , 'title' )], 'attendmaybe' => [ 'title' => L10n :: t ( 'Might attend' , 'title' )]
2018-01-15 14:05:12 +01:00
];
2015-06-04 04:19:06 +02:00
2010-08-06 15:30:25 +02:00
// display comments
2018-06-23 12:32:53 +02:00
if ( DBM :: is_result ( $items )) {
foreach ( $items as $item ) {
2015-06-04 04:19:06 +02:00
builtin_activity_puller ( $item , $conv_responses );
2010-11-03 00:24:23 +01:00
}
2018-01-01 22:47:00 +01:00
if ( x ( $conv_responses [ 'like' ], $link_item [ 'uri' ])) {
$like = format_like ( $conv_responses [ 'like' ][ $link_item [ 'uri' ]], $conv_responses [ 'like' ][ $link_item [ 'uri' ] . '-l' ], 'like' , $link_item [ 'id' ]);
}
if ( x ( $conv_responses [ 'dislike' ], $link_item [ 'uri' ])) {
$dislike = format_like ( $conv_responses [ 'dislike' ][ $link_item [ 'uri' ]], $conv_responses [ 'dislike' ][ $link_item [ 'uri' ] . '-l' ], 'dislike' , $link_item [ 'id' ]);
}
2010-11-03 00:24:23 +01:00
2018-01-18 07:54:44 +01:00
if (( $can_post || can_write_wall ( $owner_uid ))) {
2018-01-15 14:05:12 +01:00
$comments .= replace_macros ( $cmnt_tpl ,[
2017-03-30 21:48:46 +02:00
'$return_path' => '' ,
'$jsreload' => $return_url ,
'$id' => $link_item [ 'id' ],
'$parent' => $link_item [ 'id' ],
'$profile_uid' => $owner_uid ,
'$mylink' => $contact [ 'url' ],
2018-01-22 15:16:25 +01:00
'$mytitle' => L10n :: t ( 'This is you' ),
2017-03-30 21:48:46 +02:00
'$myphoto' => $contact [ 'thumb' ],
2018-01-22 15:16:25 +01:00
'$comment' => L10n :: t ( 'Comment' ),
'$submit' => L10n :: t ( 'Submit' ),
'$preview' => L10n :: t ( 'Preview' ),
'$sourceapp' => L10n :: t ( $a -> sourcename ),
2017-03-30 21:48:46 +02:00
'$ww' => '' ,
'$rand_num' => random_digits ( 12 )
2018-01-15 14:05:12 +01:00
]);
2010-11-04 08:19:10 +01:00
}
2018-06-23 12:32:53 +02:00
foreach ( $items as $item ) {
2010-08-06 15:30:25 +02:00
$comment = '' ;
$template = $tpl ;
2010-11-03 00:24:23 +01:00
$sparkle = '' ;
2018-01-01 22:47:00 +01:00
if (( activity_match ( $item [ 'verb' ], ACTIVITY_LIKE ) || activity_match ( $item [ 'verb' ], ACTIVITY_DISLIKE )) && ( $item [ 'id' ] != $item [ 'parent' ])) {
2010-11-03 00:24:23 +01:00
continue ;
2018-01-01 22:47:00 +01:00
}
2010-11-03 00:24:23 +01:00
2018-06-23 12:32:53 +02:00
$profile_url = Contact :: MagicLinkById ( $item [ 'author-id' ]);
2018-06-02 10:05:06 +02:00
if ( strpos ( $profile_url , 'redir/' ) === 0 ) {
2010-09-28 04:48:45 +02:00
$sparkle = ' sparkle' ;
2016-10-22 12:14:41 +02:00
} else {
2010-09-28 04:48:45 +02:00
$sparkle = '' ;
}
2014-02-22 15:46:19 +01:00
2016-01-04 11:46:19 +01:00
$dropping = (( $item [ 'contact-id' ] == $contact_id ) || ( $item [ 'uid' ] == local_user ()));
2018-01-15 14:05:12 +01:00
$drop = [
2014-04-28 15:29:48 +02:00
'dropping' => $dropping ,
'pagedrop' => false ,
2018-01-22 15:16:25 +01:00
'select' => L10n :: t ( 'Select' ),
'delete' => L10n :: t ( 'Delete' ),
2018-01-15 14:05:12 +01:00
];
2010-08-06 15:30:25 +02:00
2017-11-27 07:44:49 +01:00
$title_e = $item [ 'title' ];
2018-02-15 03:33:55 +01:00
$body_e = BBCode :: convert ( $item [ 'body' ]);
2012-12-22 20:57:29 +01:00
2018-01-15 14:05:12 +01:00
$comments .= replace_macros ( $template ,[
2010-08-06 15:30:25 +02:00
'$id' => $item [ 'item_id' ],
2018-06-23 12:32:53 +02:00
'$profile_url' => $profile_url ,
'$name' => $item [ 'author-name' ],
'$thumb' => $item [ 'author-avatar' ],
2010-09-28 04:48:45 +02:00
'$sparkle' => $sparkle ,
2012-12-22 20:57:29 +01:00
'$title' => $title_e ,
'$body' => $body_e ,
2018-02-03 18:25:58 +01:00
'$ago' => Temporal :: getRelativeDate ( $item [ 'created' ]),
2010-08-06 15:30:25 +02:00
'$indent' => (( $item [ 'parent' ] != $item [ 'item_id' ]) ? ' comment' : '' ),
'$drop' => $drop ,
'$comment' => $comment
2018-01-15 14:05:12 +01:00
]);
2012-10-14 20:30:10 +02:00
2018-01-18 07:54:44 +01:00
if (( $can_post || can_write_wall ( $owner_uid ))) {
2018-01-15 14:05:12 +01:00
$comments .= replace_macros ( $cmnt_tpl , [
2017-03-30 21:48:46 +02:00
'$return_path' => '' ,
'$jsreload' => $return_url ,
'$id' => $item [ 'item_id' ],
'$parent' => $item [ 'parent' ],
'$profile_uid' => $owner_uid ,
'$mylink' => $contact [ 'url' ],
2018-01-22 15:16:25 +01:00
'$mytitle' => L10n :: t ( 'This is you' ),
2017-03-30 21:48:46 +02:00
'$myphoto' => $contact [ 'thumb' ],
2018-01-22 15:16:25 +01:00
'$comment' => L10n :: t ( 'Comment' ),
'$submit' => L10n :: t ( 'Submit' ),
'$preview' => L10n :: t ( 'Preview' ),
'$sourceapp' => L10n :: t ( $a -> sourcename ),
2017-03-30 21:48:46 +02:00
'$ww' => '' ,
'$rand_num' => random_digits ( 12 )
2018-01-15 14:05:12 +01:00
]);
2012-10-14 20:30:10 +02:00
}
2010-08-06 15:30:25 +02:00
}
}
2018-01-15 14:05:12 +01:00
$response_verbs = [ 'like' ];
2018-01-01 22:47:00 +01:00
if ( Feature :: isEnabled ( $owner_uid , 'dislike' )) {
$response_verbs [] = 'dislike' ;
}
$responses = get_responses ( $conv_responses , $response_verbs , '' , $link_item );
2010-08-06 15:30:25 +02:00
2011-05-05 10:53:03 +02:00
$paginate = paginate ( $a );
2010-08-06 15:30:25 +02:00
}
2014-02-22 15:46:19 +01:00
2011-05-11 13:37:13 +02:00
$photo_tpl = get_markup_template ( 'photo_view.tpl' );
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $photo_tpl , [
2011-05-05 10:53:03 +02:00
'$id' => $ph [ 0 ][ 'id' ],
2018-01-01 22:47:00 +01:00
'$album' => [ $album_link , $ph [ 0 ][ 'album' ]],
2011-05-05 10:53:03 +02:00
'$tools' => $tools ,
'$lock' => $lock ,
'$photo' => $photo ,
'$prevlink' => $prevlink ,
'$nextlink' => $nextlink ,
'$desc' => $ph [ 0 ][ 'desc' ],
2018-01-01 22:47:00 +01:00
'$tags' => $tags ,
2014-02-22 15:46:19 +01:00
'$edit' => $edit ,
2015-09-30 00:19:54 +02:00
'$map' => $map ,
2018-01-22 15:16:25 +01:00
'$map_text' => L10n :: t ( 'Map' ),
2011-05-05 10:53:03 +02:00
'$likebuttons' => $likebuttons ,
2018-01-01 22:47:00 +01:00
'$like' => $like ,
'$dislike' => $dislike ,
2015-06-04 04:19:06 +02:00
'responses' => $responses ,
2011-05-05 10:53:03 +02:00
'$comments' => $comments ,
'$paginate' => $paginate ,
2018-01-15 14:05:12 +01:00
]);
2014-02-22 15:46:19 +01:00
2017-03-31 20:55:50 +02:00
$a -> page [ 'htmlhead' ] .= " \n " . '<meta name="twitter:card" content="photo" />' . " \n " ;
$a -> page [ 'htmlhead' ] .= '<meta name="twitter:title" content="' . $photo [ " album " ] . '" />' . " \n " ;
$a -> page [ 'htmlhead' ] .= '<meta name="twitter:image" content="' . $photo [ " href " ] . '" />' . " \n " ;
$a -> page [ 'htmlhead' ] .= '<meta name="twitter:image:width" content="' . $photo [ " width " ] . '" />' . " \n " ;
$a -> page [ 'htmlhead' ] .= '<meta name="twitter:image:height" content="' . $photo [ " height " ] . '" />' . " \n " ;
2014-02-22 15:46:19 +01:00
2010-08-06 06:15:24 +02:00
return $o ;
}
// Default - show recent photos with upload link (if applicable)
2011-06-23 11:30:17 +02:00
//$o = '';
2010-08-06 06:15:24 +02:00
2017-09-15 23:00:39 +02:00
$r = q ( " SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s'
2010-08-06 06:15:24 +02:00
$sql_extra GROUP BY `resource-id` " ,
intval ( $a -> data [ 'user' ][ 'uid' ]),
2011-06-29 07:33:02 +02:00
dbesc ( 'Contact Photos' ),
2018-01-22 15:16:25 +01:00
dbesc ( L10n :: t ( 'Contact Photos' ))
2010-08-06 06:15:24 +02:00
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2010-08-06 06:15:24 +02:00
$a -> set_pager_total ( count ( $r ));
2011-01-04 09:06:36 +01:00
$a -> set_pager_itemspage ( 20 );
}
2010-08-06 06:15:24 +02:00
2017-09-15 23:00:39 +02:00
$r = q ( " SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`,
2017-04-20 21:23:45 +02:00
ANY_VALUE ( `type` ) AS `type` , ANY_VALUE ( `album` ) AS `album` , max ( `scale` ) AS `scale` ,
ANY_VALUE ( `created` ) AS `created` FROM `photo`
2015-06-22 20:07:19 +02:00
WHERE `uid` = % d AND `album` != '%s' AND `album` != '%s'
2010-08-06 06:15:24 +02:00
$sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT % d , % d " ,
intval ( $a -> data [ 'user' ][ 'uid' ]),
2011-06-29 07:33:02 +02:00
dbesc ( 'Contact Photos' ),
2018-01-22 15:16:25 +01:00
dbesc ( L10n :: t ( 'Contact Photos' )),
2010-08-06 06:15:24 +02:00
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2018-01-15 14:05:12 +01:00
$photos = [];
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2017-12-29 13:47:56 +01:00
// "Twist" is only used for the duepunto theme with style "slackr"
2017-12-28 21:37:23 +01:00
$twist = false ;
2016-10-22 12:14:41 +02:00
foreach ( $r as $rr ) {
2015-09-29 19:44:26 +02:00
//hide profile photos to others
2017-03-21 22:39:53 +01:00
if ( ! $is_owner && ! remote_user () && ( $rr [ 'album' ] == L10n :: t ( 'Profile Photos' ))) {
2017-12-28 21:37:23 +01:00
continue ;
2017-03-21 22:39:53 +01:00
}
2016-10-22 12:14:41 +02:00
2017-12-28 21:37:23 +01:00
$twist = ! $twist ;
2016-10-22 12:14:41 +02:00
2012-06-07 17:42:13 +02:00
$ext = $phototypes [ $rr [ 'type' ]];
2015-06-22 20:07:19 +02:00
2017-11-27 07:44:49 +01:00
$alt_e = $rr [ 'filename' ];
$name_e = $rr [ 'album' ];
2012-12-22 20:57:29 +01:00
2018-01-15 14:05:12 +01:00
$photos [] = [
2015-09-29 19:44:26 +02:00
'id' => $rr [ 'id' ],
2017-12-28 21:37:23 +01:00
'twist' => ' ' . ( $twist ? 'rotleft' : 'rotright' ) . rand ( 2 , 4 ),
2016-02-17 23:47:32 +01:00
'link' => 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $rr [ 'resource-id' ],
2018-01-22 15:16:25 +01:00
'title' => L10n :: t ( 'View Photo' ),
2016-02-17 23:47:32 +01:00
'src' => 'photo/' . $rr [ 'resource-id' ] . '-' . ((( $rr [ 'scale' ]) == 6 ) ? 4 : $rr [ 'scale' ]) . '.' . $ext ,
2012-12-22 20:57:29 +01:00
'alt' => $alt_e ,
2018-01-15 14:05:12 +01:00
'album' => [
2016-02-17 23:47:32 +01:00
'link' => 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $rr [ 'album' ]),
2012-12-22 20:57:29 +01:00
'name' => $name_e ,
2018-01-22 15:16:25 +01:00
'alt' => L10n :: t ( 'View Album' ),
2018-01-15 14:05:12 +01:00
],
2014-02-22 15:46:19 +01:00
2018-01-15 14:05:12 +01:00
];
2010-08-06 06:15:24 +02:00
}
}
2014-02-22 15:46:19 +01:00
$tpl = get_markup_template ( 'photos_recent.tpl' );
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $tpl , [
2018-01-22 15:16:25 +01:00
'$title' => L10n :: t ( 'Recent Photos' ),
2016-01-04 11:46:19 +01:00
'$can_post' => $can_post ,
2018-01-22 15:16:25 +01:00
'$upload' => [ L10n :: t ( 'Upload New Photos' ), 'photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/upload' ],
2011-12-22 16:33:14 +01:00
'$photos' => $photos ,
2016-08-04 21:53:22 +02:00
'$paginate' => paginate ( $a ),
2018-01-15 14:05:12 +01:00
]);
2011-12-22 16:33:14 +01:00
2010-08-06 06:15:24 +02:00
return $o ;
}