2010-08-06 00:15:24 -04:00
< ? php
2010-11-16 00:02:59 -05:00
require_once ( 'include/Photo.php' );
2010-09-14 01:57:31 -04:00
require_once ( 'include/items.php' );
2010-11-16 00:02:59 -05:00
require_once ( 'include/acl_selectors.php' );
2010-11-02 02:42:26 -04:00
require_once ( 'include/bbcode.php' );
2011-06-30 20:35:35 -04:00
require_once ( 'include/security.php' );
2012-10-09 11:50:24 -04:00
require_once ( 'include/redir.php' );
2010-08-06 00:15:24 -04:00
2012-06-07 11:42:13 -04:00
2010-08-06 00:15:24 -04:00
function photos_init ( & $a ) {
2012-10-09 11:50:24 -04:00
if ( $a -> argc > 1 )
auto_redir ( $a , $a -> argv [ 1 ]);
2011-04-21 20:29:47 -04:00
if (( get_config ( 'system' , 'block_public' )) && ( ! local_user ()) && ( ! remote_user ())) {
return ;
}
2012-10-09 11:50:24 -04:00
2010-11-03 22:47:07 -04:00
$o = '' ;
2010-08-06 00:15:24 -04:00
if ( $a -> argc > 1 ) {
$nick = $a -> argv [ 1 ];
2012-06-18 15:41:43 -04:00
$r = q ( " SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1 " ,
2010-08-06 00:15:24 -04:00
dbesc ( $nick )
);
if ( ! count ( $r ))
return ;
2012-11-02 07:20:12 -04:00
$o .= '<div class="vcard">' ;
$o .= '<div class="fn">' . $a -> data [ 'user' ][ 'username' ] . '</div>' ;
$o .= '<div id="profile-photo-wrapper"><img class="photo" style="width: 175px; height: 175px;" src="' . $a -> get_cached_avatar_image ( $a -> get_baseurl () . '/photo/profile/' . $a -> data [ 'user' ][ 'uid' ] . '.jpg' ) . '" alt="' . $a -> data [ 'user' ][ 'username' ] . '" /></div>' ;
$o .= '</div>' ;
2010-08-06 00:15:24 -04:00
$a -> data [ 'user' ] = $r [ 0 ];
2011-06-30 20:35:35 -04:00
$sql_extra = permissions_sql ( $a -> data [ 'user' ][ 'uid' ]);
2011-07-03 22:57:20 -04:00
2012-09-29 09:08:44 -04:00
$albums = q ( " SELECT distinct(`album`) AS `album` FROM `photo` WHERE `uid` = %d $sql_extra order by created desc " ,
2010-08-06 00:15:24 -04:00
intval ( $a -> data [ 'user' ][ 'uid' ])
);
if ( count ( $albums )) {
$a -> data [ 'albums' ] = $albums ;
2012-06-24 19:51:39 -04:00
$albums_visible = (( intval ( $a -> data [ 'user' ][ 'hidewall' ]) && ( ! local_user ()) && ( ! remote_user ())) ? false : true );
if ( $albums_visible ) {
2012-03-27 04:31:47 -04:00
$o .= '<div id="side-bar-photos-albums" class="widget">' ;
$o .= '<h3>' . '<a href="' . $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '">' . t ( 'Photo Albums' ) . '</a></h3>' ;
2011-09-25 14:20:19 -04:00
2012-03-27 04:31:47 -04:00
$o .= '<ul>' ;
foreach ( $albums as $album ) {
2011-06-29 01:33:02 -04:00
2012-03-27 04:31:47 -04:00
// don't show contact photos. We once translated this name, but then you could still access it under
// a different language setting. Now we store the name in English and check in English (and translated for legacy albums).
2011-06-29 01:33:02 -04:00
2012-03-27 04:31:47 -04:00
if (( ! strlen ( $album [ 'album' ])) || ( $album [ 'album' ] === 'Contact Photos' ) || ( $album [ 'album' ] === t ( 'Contact Photos' )))
continue ;
$o .= '<li>' . '<a href="photos/' . $a -> argv [ 1 ] . '/album/' . bin2hex ( $album [ 'album' ]) . '" >' . $album [ 'album' ] . '</a></li>' ;
}
$o .= '</ul>' ;
2010-08-06 00:15:24 -04:00
}
2012-01-15 20:48:42 -05:00
if ( local_user () && $a -> data [ 'user' ][ 'uid' ] == local_user ()) {
$o .= '<div id="photo-albums-upload-link"><a href="' . $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/upload" >' . t ( 'Upload New Photos' ) . '</a></div>' ;
}
2011-12-06 23:56:51 -05:00
$o .= '</div>' ;
2010-08-06 00:15:24 -04:00
}
2010-11-03 22:47:07 -04:00
if ( ! x ( $a -> page , 'aside' ))
$a -> page [ 'aside' ] = '' ;
2010-08-06 00:15:24 -04:00
$a -> page [ 'aside' ] .= $o ;
2011-06-02 01:06:53 -04:00
2012-07-28 11:57:16 -04:00
$tpl = get_markup_template ( " photos_head.tpl " );
$a -> page [ 'htmlhead' ] .= replace_macros ( $tpl , array (
'$ispublic' => t ( 'everybody' )
));
2011-06-02 01:06:53 -04:00
2010-08-06 00:15:24 -04:00
}
2010-12-05 21:08:36 -05:00
2010-09-08 23:14:17 -04:00
return ;
2010-08-06 00:15:24 -04:00
}
2011-01-27 06:55:40 -05:00
function photos_post ( & $a ) {
2011-01-27 06:52:18 -05:00
2012-02-21 17:15:10 -05:00
logger ( 'mod-photos: photos_post: begin' , LOGGER_DEBUG );
2011-01-27 21:45:19 -05:00
2011-10-01 09:20:41 -04:00
logger ( 'mod_photos: REQUEST ' . print_r ( $_REQUEST , true ), LOGGER_DATA );
logger ( 'mod_photos: FILES ' . print_r ( $_FILES , true ), LOGGER_DATA );
2011-01-27 21:45:19 -05:00
2012-06-07 11:42:13 -04:00
$phototypes = Photo :: supportedTypes ();
2010-12-05 21:08:36 -05:00
$can_post = false ;
$visitor = 0 ;
$page_owner_uid = $a -> data [ 'user' ][ 'uid' ];
$community_page = (( $a -> data [ 'user' ][ 'page-flags' ] == PAGE_COMMUNITY ) ? true : false );
if (( local_user ()) && ( local_user () == $page_owner_uid ))
$can_post = true ;
else {
if ( $community_page && remote_user ()) {
2012-09-05 01:50:28 -04:00
$cid = 0 ;
if ( is_array ( $_SESSION [ 'remote' ])) {
foreach ( $_SESSION [ 'remote' ] as $v ) {
if ( $v [ 'uid' ] == $page_owner_uid ) {
$cid = $v [ 'cid' ];
break ;
}
}
}
if ( $cid ) {
$r = q ( " SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $cid ),
intval ( $page_owner_uid )
);
if ( count ( $r )) {
$can_post = true ;
$visitor = $cid ;
}
2010-12-05 21:08:36 -05:00
}
}
}
2010-08-06 00:15:24 -04:00
2010-12-05 21:08:36 -05:00
if ( ! $can_post ) {
2010-10-14 01:01:23 -04:00
notice ( t ( 'Permission denied.' ) . EOL );
killme ();
}
2010-08-08 20:08:39 -04:00
2010-11-02 19:24:23 -04:00
$r = q ( " SELECT `contact`.*, `user`.`nickname` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid`
2010-08-08 20:08:39 -04:00
WHERE `user` . `uid` = % d AND `self` = 1 LIMIT 1 " ,
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
2010-11-02 19:24:23 -04:00
if ( ! count ( $r )) {
notice ( t ( 'Contact information unavailable' ) . EOL );
2010-12-05 21:08:36 -05:00
logger ( 'photos_post: unable to locate contact record for page owner. uid=' . $page_owner_uid );
2010-11-02 19:24:23 -04:00
killme ();
}
2010-12-05 21:08:36 -05:00
$owner_record = $r [ 0 ];
2010-08-08 20:08:39 -04:00
2010-12-05 21:08:36 -05:00
if (( $a -> argc > 3 ) && ( $a -> argv [ 2 ] === 'album' )) {
$album = hex2bin ( $a -> argv [ 3 ]);
2010-08-08 20:08:39 -04:00
2011-06-29 01:33:02 -04:00
if ( $album === t ( 'Profile Photos' ) || $album === 'Contact Photos' || $album === t ( 'Contact Photos' )) {
2010-08-08 20:08:39 -04:00
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
return ; // NOTREACHED
}
$r = q ( " SELECT count(*) FROM `photo` WHERE `album` = '%s' AND `uid` = %d " ,
dbesc ( $album ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
if ( ! count ( $r )) {
notice ( t ( 'Album not found.' ) . EOL );
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
return ; // NOTREACHED
}
$newalbum = notags ( trim ( $_POST [ 'albumname' ]));
if ( $newalbum != $album ) {
q ( " UPDATE `photo` SET `album` = '%s' WHERE `album` = '%s' AND `uid` = %d " ,
dbesc ( $newalbum ),
dbesc ( $album ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
$newurl = str_replace ( bin2hex ( $album ), bin2hex ( $newalbum ), $_SESSION [ 'photo_return' ]);
goaway ( $a -> get_baseurl () . '/' . $newurl );
return ; // NOTREACHED
}
2010-12-05 21:08:36 -05:00
2010-08-08 20:08:39 -04:00
if ( $_POST [ 'dropalbum' ] == t ( 'Delete Album' )) {
$res = array ();
2010-12-05 21:08:36 -05:00
// get the list of photos we are about to delete
if ( $visitor ) {
$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 )
);
}
else {
$r = q ( " SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `uid` = %d AND `album` = '%s' " ,
intval ( local_user ()),
dbesc ( $album )
);
}
2010-08-08 20:08:39 -04:00
if ( count ( $r )) {
foreach ( $r as $rr ) {
$res [] = " ' " . dbesc ( $rr [ 'rid' ]) . " ' " ;
}
}
else {
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
return ; // NOTREACHED
}
2010-12-05 21:08:36 -05:00
2010-08-08 20:08:39 -04:00
$str_res = implode ( ',' , $res );
2010-12-05 21:08:36 -05:00
// remove the associated photos
2010-08-08 20:08:39 -04:00
q ( " DELETE FROM `photo` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d " ,
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
2010-12-05 21:08:36 -05:00
// find and delete the corresponding item with all the comments and likes/dislikes
2010-08-08 20:08:39 -04:00
$r = q ( " SELECT `parent-uri` FROM `item` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d " ,
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
if ( count ( $r )) {
foreach ( $r as $rr ) {
2010-08-22 23:57:20 -04:00
q ( " UPDATE `item` SET `deleted` = 1, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d " ,
dbesc ( datetime_convert ()),
2010-08-08 20:08:39 -04:00
dbesc ( $rr [ 'parent-uri' ]),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
$drop_id = intval ( $rr [ 'id' ]);
// send the notification upstream/downstream as the case may be
if ( $rr [ 'visible' ])
2011-02-23 18:16:12 -05:00
proc_run ( 'php' , " include/notifier.php " , " drop " , " $drop_id " );
2010-08-08 20:08:39 -04:00
}
}
}
2010-08-10 01:58:58 -04:00
goaway ( $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ]);
2010-08-08 20:08:39 -04:00
return ; // NOTREACHED
}
2010-12-05 21:08:36 -05:00
if (( $a -> argc > 2 ) && ( x ( $_POST , 'delete' )) && ( $_POST [ 'delete' ] == t ( 'Delete Photo' ))) {
// same as above but remove single photo
if ( $visitor ) {
$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 ])
);
}
else {
$r = q ( " SELECT `id`, `resource-id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' LIMIT 1 " ,
intval ( local_user ()),
dbesc ( $a -> argv [ 2 ])
);
}
2010-08-08 20:08:39 -04:00
if ( count ( $r )) {
q ( " DELETE FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' " ,
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid ),
2010-08-08 20:08:39 -04:00
dbesc ( $r [ 0 ][ 'resource-id' ])
);
$i = q ( " SELECT * FROM `item` WHERE `resource-id` = '%s' AND `uid` = %d LIMIT 1 " ,
dbesc ( $r [ 0 ][ 'resource-id' ]),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
if ( count ( $i )) {
2010-08-22 23:57:20 -04:00
q ( " UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d " ,
dbesc ( datetime_convert ()),
dbesc ( datetime_convert ()),
2010-08-08 20:08:39 -04:00
dbesc ( $i [ 0 ][ 'uri' ]),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
$url = $a -> get_baseurl ();
$drop_id = intval ( $i [ 0 ][ 'id' ]);
if ( $i [ 0 ][ 'visible' ])
2011-02-23 18:16:12 -05:00
proc_run ( 'php' , " include/notifier.php " , " drop " , " $drop_id " );
2010-08-08 20:08:39 -04:00
}
}
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
return ; // NOTREACHED
}
2011-02-03 18:13:38 -05:00
if (( $a -> argc > 2 ) && (( x ( $_POST , 'desc' ) !== false ) || ( x ( $_POST , 'newtag' ) !== false )) || ( x ( $_POST , 'albname' ) !== false )) {
2010-08-08 20:08:39 -04:00
2012-05-23 04:01:04 -04:00
2011-02-03 18:13:38 -05:00
$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' ])) : '' );
2011-03-10 00:10:16 -05: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-05 21:08:36 -05:00
$resource_id = $a -> argv [ 2 ];
2010-08-08 04:58:26 -04:00
2011-02-03 18:13:38 -05:00
if ( ! strlen ( $albname ))
$albname = datetime_convert ( 'UTC' , date_default_timezone_get (), 'now' , 'Y' );
2012-05-23 04:01:04 -04:00
2012-06-20 22:36:10 -04:00
if (( x ( $_POST , 'rotate' ) !== false ) &&
( ( intval ( $_POST [ 'rotate' ]) == 1 ) || ( intval ( $_POST [ 'rotate' ]) == 2 ) )) {
2012-05-23 04:01:04 -04:00
logger ( 'rotate' );
$r = q ( " select * from photo where `resource-id` = '%s' and uid = %d and scale = 0 limit 1 " ,
dbesc ( $resource_id ),
intval ( $page_owner_uid )
);
if ( count ( $r )) {
2012-06-07 11:42:13 -04:00
$ph = new Photo ( $r [ 0 ][ 'data' ], $r [ 0 ][ 'type' ]);
2012-05-23 04:01:04 -04:00
if ( $ph -> is_valid ()) {
2012-06-20 22:36:10 -04:00
$rotate_deg = ( ( intval ( $_POST [ 'rotate' ]) == 1 ) ? 270 : 90 );
$ph -> rotate ( $rotate_deg );
2012-05-23 04:01:04 -04:00
$width = $ph -> getWidth ();
$height = $ph -> getHeight ();
$x = q ( " update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 0 limit 1 " ,
dbesc ( $ph -> imageString ()),
intval ( $height ),
intval ( $width ),
2012-06-20 22:36:10 -04:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 04:01:04 -04:00
);
if ( $width > 640 || $height > 640 ) {
$ph -> scaleImage ( 640 );
$width = $ph -> getWidth ();
$height = $ph -> getHeight ();
2011-02-03 18:13:38 -05:00
2012-05-23 04:01:04 -04:00
$x = q ( " update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 1 limit 1 " ,
dbesc ( $ph -> imageString ()),
intval ( $height ),
intval ( $width ),
2012-06-20 22:36:10 -04:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 04:01:04 -04:00
);
}
if ( $width > 320 || $height > 320 ) {
$ph -> scaleImage ( 320 );
$width = $ph -> getWidth ();
$height = $ph -> getHeight ();
$x = q ( " update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 2 limit 1 " ,
dbesc ( $ph -> imageString ()),
intval ( $height ),
intval ( $width ),
2012-06-20 22:36:10 -04:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 04:01:04 -04:00
);
}
}
}
}
2011-02-03 18:13:38 -05:00
2010-08-08 20:08:39 -04:00
$p = q ( " SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ORDER BY `scale` DESC " ,
dbesc ( $resource_id ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 04:58:26 -04:00
);
2011-03-10 00:10:16 -05:00
if ( count ( $p )) {
2012-06-07 11:42:13 -04:00
$ext = $phototypes [ $p [ 0 ][ 'type' ]];
2011-03-10 00:10:16 -05: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-08 20:08:39 -04:00
dbesc ( $desc ),
2011-02-03 18:13:38 -05:00
dbesc ( $albname ),
2011-03-10 00:10:16 -05:00
dbesc ( $str_contact_allow ),
dbesc ( $str_group_allow ),
dbesc ( $str_contact_deny ),
dbesc ( $str_group_deny ),
2010-08-08 20:08:39 -04:00
dbesc ( $resource_id ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
}
2011-02-08 00:16:39 -05:00
/* Don't make the item visible if the only change was the album name */
$visibility = 0 ;
if ( $p [ 0 ][ 'desc' ] !== $desc || strlen ( $rawtags ))
$visibility = 1 ;
2010-08-08 20:08:39 -04:00
if ( ! $item_id ) {
2010-11-02 02:42:26 -04:00
// Create item container
2010-08-08 20:08:39 -04:00
$title = '' ;
2010-12-05 21:08:36 -05:00
$uri = item_new_uri ( $a -> get_hostname (), $page_owner_uid );
2012-06-07 11:42:13 -04:00
2010-09-14 01:57:31 -04:00
$arr = array ();
2010-12-05 21:08:36 -05:00
$arr [ 'uid' ] = $page_owner_uid ;
2010-11-03 22:47:07 -04:00
$arr [ 'uri' ] = $uri ;
$arr [ 'parent-uri' ] = $uri ;
$arr [ 'type' ] = 'photo' ;
$arr [ 'wall' ] = 1 ;
$arr [ 'resource-id' ] = $p [ 0 ][ 'resource-id' ];
2010-12-05 21:08:36 -05: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-03 22:47:07 -04: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' ];
$arr [ 'last-child' ] = 1 ;
2011-02-08 00:16:39 -05:00
$arr [ 'visible' ] = $visibility ;
2011-10-17 17:52:03 -04:00
$arr [ 'origin' ] = 1 ;
2011-03-18 00:15:27 -04:00
2010-11-03 22:47:07 -04:00
$arr [ 'body' ] = '[url=' . $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . ']'
2012-06-07 11:42:13 -04:00
. '[img]' . $a -> get_baseurl () . '/photo/' . $p [ 0 ][ 'resource-id' ] . '-' . $p [ 0 ][ 'scale' ] . '.' . $ext . '[/img]'
2010-09-14 01:57:31 -04:00
. '[/url]' ;
$item_id = item_store ( $arr );
2010-08-08 20:08:39 -04:00
}
2010-11-02 02:42:26 -04:00
if ( $item_id ) {
$r = q ( " SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $item_id ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-11-02 02:42:26 -04:00
);
}
if ( count ( $r )) {
$old_tag = $r [ 0 ][ 'tag' ];
$old_inform = $r [ 0 ][ 'inform' ];
}
2010-08-08 04:58:26 -04:00
2010-11-02 02:42:26 -04:00
if ( strlen ( $rawtags )) {
$str_tags = '' ;
$inform = '' ;
// if the new tag doesn't have a namespace specifier (@foo or #foo) give it a hashtag
$x = substr ( $rawtags , 0 , 1 );
if ( $x !== '@' && $x !== '#' )
$rawtags = '#' . $rawtags ;
2010-11-03 19:48:21 -04:00
$taginfo = array ();
2010-11-02 02:42:26 -04:00
$tags = get_tags ( $rawtags );
if ( count ( $tags )) {
foreach ( $tags as $tag ) {
2011-06-29 21:59:05 -04:00
if ( isset ( $profile ))
unset ( $profile );
2010-11-02 02:42:26 -04:00
if ( strpos ( $tag , '@' ) === 0 ) {
$name = substr ( $tag , 1 );
if (( strpos ( $name , '@' )) || ( strpos ( $name , 'http://' ))) {
$newname = $name ;
$links = @ lrdd ( $name );
if ( count ( $links )) {
foreach ( $links as $link ) {
if ( $link [ '@attributes' ][ 'rel' ] === 'http://webfinger.net/rel/profile-page' )
$profile = $link [ '@attributes' ][ 'href' ];
if ( $link [ '@attributes' ][ 'rel' ] === 'salmon' ) {
2010-11-03 19:48:21 -04:00
$salmon = '$url:' . str_replace ( ',' , '%sc' , $link [ '@attributes' ][ 'href' ]);
2010-11-02 02:42:26 -04:00
if ( strlen ( $inform ))
$inform .= ',' ;
2010-11-03 19:48:21 -04:00
$inform .= $salmon ;
2010-11-02 02:42:26 -04:00
}
}
}
2010-11-03 19:48:21 -04:00
$taginfo [] = array ( $newname , $profile , $salmon );
2010-11-02 02:42:26 -04:00
}
else {
$newname = $name ;
2011-10-27 22:12:30 -04:00
$alias = '' ;
$tagcid = 0 ;
if ( strrpos ( $newname , '+' ))
$tagcid = intval ( substr ( $newname , strrpos ( $newname , '+' ) + 1 ));
if ( $tagcid ) {
$r = q ( " SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $tagcid ),
intval ( $profile_uid )
);
}
2012-09-29 19:55:40 -04:00
else {
$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 )
);
if ( ! $r ) {
//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 )
);
}
}
/* elseif ( strstr ( $name , '_' ) || strstr ( $name , ' ' )) {
2010-11-02 02:42:26 -04:00
$newname = str_replace ( '_' , ' ' , $name );
$r = q ( " SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1 " ,
dbesc ( $newname ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-11-02 02:42:26 -04:00
);
}
else {
2011-09-01 21:02:08 -04:00
$r = q ( " SELECT * FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1 " ,
dbesc ( $name ),
2010-11-02 02:42:26 -04:00
dbesc ( $name ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-11-02 02:42:26 -04:00
);
2012-09-29 19:55:40 -04:00
} */
2010-11-02 02:42:26 -04:00
if ( count ( $r )) {
2010-11-04 23:47:44 -04:00
$newname = $r [ 0 ][ 'name' ];
2010-11-02 02:42:26 -04:00
$profile = $r [ 0 ][ 'url' ];
2010-11-03 19:48:21 -04:00
$notify = 'cid:' . $r [ 0 ][ 'id' ];
2010-11-02 02:42:26 -04:00
if ( strlen ( $inform ))
$inform .= ',' ;
2010-11-03 19:48:21 -04:00
$inform .= $notify ;
2010-11-02 02:42:26 -04:00
}
}
if ( $profile ) {
2010-11-04 23:47:44 -04:00
if ( substr ( $notify , 0 , 4 ) === 'cid:' )
2010-11-05 02:50:32 -04:00
$taginfo [] = array ( $newname , $profile , $notify , $r [ 0 ], '@[url=' . str_replace ( ',' , '%2c' , $profile ) . ']' . $newname . '[/url]' );
2010-11-04 23:47:44 -04:00
else
2010-11-05 02:50:32 -04:00
$taginfo [] = array ( $newname , $profile , $notify , null , $str_tags .= '@[url=' . $profile . ']' . $newname . '[/url]' );
2010-11-02 02:42:26 -04:00
if ( strlen ( $str_tags ))
$str_tags .= ',' ;
$profile = str_replace ( ',' , '%2c' , $profile );
$str_tags .= '@[url=' . $profile . ']' . $newname . '[/url]' ;
}
}
}
}
$newtag = $old_tag ;
if ( strlen ( $newtag ) && strlen ( $str_tags ))
$newtag .= ',' ;
$newtag .= $str_tags ;
$newinform = $old_inform ;
if ( strlen ( $newinform ) && strlen ( $inform ))
$newinform .= ',' ;
$newinform .= $inform ;
$r = q ( " UPDATE `item` SET `tag` = '%s', `inform` = '%s', `edited` = '%s', `changed` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
dbesc ( $newtag ),
dbesc ( $newinform ),
dbesc ( datetime_convert ()),
dbesc ( datetime_convert ()),
intval ( $item_id ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-11-02 02:42:26 -04:00
);
2010-11-03 19:48:21 -04:00
2010-11-04 23:47:44 -04:00
$best = 0 ;
foreach ( $p as $scales ) {
if ( intval ( $scales [ 'scale' ]) == 2 ) {
$best = 2 ;
break ;
}
if ( intval ( $scales [ 'scale' ]) == 4 ) {
$best = 4 ;
break ;
2010-11-03 19:48:21 -04:00
}
}
2010-11-04 23:47:44 -04:00
if ( count ( $taginfo )) {
foreach ( $taginfo as $tagged ) {
2010-12-05 21:08:36 -05:00
$uri = item_new_uri ( $a -> get_hostname (), $page_owner_uid );
2010-11-04 23:47:44 -04:00
$arr = array ();
2010-12-05 21:08:36 -05:00
$arr [ 'uid' ] = $page_owner_uid ;
2010-11-04 23:47:44 -04:00
$arr [ 'uri' ] = $uri ;
$arr [ 'parent-uri' ] = $uri ;
$arr [ 'type' ] = 'activity' ;
$arr [ 'wall' ] = 1 ;
2010-12-05 21:08:36 -05: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 23:47:44 -04: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 [ 'last-child' ] = 1 ;
$arr [ 'visible' ] = 1 ;
$arr [ 'verb' ] = ACTIVITY_TAG ;
$arr [ 'object-type' ] = ACTIVITY_OBJ_PERSON ;
$arr [ 'target-type' ] = ACTIVITY_OBJ_PHOTO ;
2010-11-05 02:50:32 -04:00
$arr [ 'tag' ] = $tagged [ 4 ];
2010-11-04 23:47:44 -04:00
$arr [ 'inform' ] = $tagged [ 2 ];
2011-10-17 17:52:03 -04:00
$arr [ 'origin' ] = 1 ;
2012-11-03 18:29:47 -04:00
$arr [ 'body' ] = sprintf ( t ( '%1$s was tagged in %2$s by %3$s' ), '[url=' . $tagged [ 1 ] . ']' . $tagged [ 0 ] . '[/url]' , '[url=' . $a -> get_baseurl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . ']' . t ( 'a photo' ) . '[/url]' , '[url=' . $owner_record [ 'url' ] . ']' . $owner_record [ 'name' ] . '[/url]' ) ;
2012-06-07 11:42:13 -04:00
$arr [ 'body' ] .= " \n \n " . '[url=' . $a -> get_baseurl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . ']' . '[img]' . $a -> get_baseurl () . " /photo/ " . $p [ 0 ][ 'resource-id' ] . '-' . $best . '.' . $ext . '[/img][/url]' . " \n " ;
2010-11-04 23:47:44 -04: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 " );
if ( $tagged [ 3 ])
2012-06-07 11:42:13 -04:00
$arr [ 'object' ] .= xmlify ( '<link rel="photo" type="' . $p [ 0 ][ 'type' ] . '" href="' . $tagged [ 3 ][ 'photo' ] . '" />' . " \n " );
2010-11-04 23:47:44 -04:00
$arr [ 'object' ] .= '</link></object>' . " \n " ;
$arr [ 'target' ] = '<target><type>' . ACTIVITY_OBJ_PHOTO . '</type><title>' . $p [ 0 ][ 'desc' ] . '</title><id>'
2010-12-05 21:08:36 -05:00
. $a -> get_baseurl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . '</id>' ;
2012-06-07 11:42:13 -04:00
$arr [ 'target' ] .= '<link>' . xmlify ( '<link rel="alternate" type="text/html" href="' . $a -> get_baseurl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $p [ 0 ][ 'resource-id' ] . '" />' . " \n " . '<link rel="preview" type="' . $p [ 0 ][ 'type' ] . '" href="' . $a -> get_baseurl () . " /photo/ " . $p [ 0 ][ 'resource-id' ] . '-' . $best . '.' . $ext . '" />' ) . '</link></target>' ;
2010-11-04 23:47:44 -04:00
$item_id = item_store ( $arr );
2011-06-09 01:34:22 -04:00
if ( $item_id ) {
q ( " UPDATE `item` SET `plink` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1 " ,
dbesc ( $a -> get_baseurl () . '/display/' . $owner_record [ 'nickname' ] . '/' . $item_id ),
intval ( $page_owner_uid ),
intval ( $item_id )
);
2011-02-23 18:16:12 -05:00
proc_run ( 'php' , " include/notifier.php " , " tag " , " $item_id " );
2011-06-09 01:34:22 -04:00
}
2010-11-04 23:47:44 -04:00
}
2010-11-03 19:48:21 -04:00
2010-11-04 23:47:44 -04:00
}
2010-11-03 19:48:21 -04:00
2010-11-02 02:42:26 -04:00
}
2010-08-08 04:58:26 -04:00
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
return ; // NOTREACHED
}
2011-01-27 21:45:19 -05:00
/**
* default post action - upload a photo
*/
2011-01-27 06:46:09 -05:00
2011-01-27 21:45:19 -05:00
call_hooks ( 'photo_post_init' , $_POST );
2011-01-27 06:52:18 -05:00
2011-01-27 21:45:19 -05:00
/**
* Determine the album to use
*/
$album = notags ( trim ( $_REQUEST [ 'album' ]));
$newalbum = notags ( trim ( $_REQUEST [ 'newalbum' ]));
2010-08-06 00:15:24 -04:00
2012-02-21 17:15:10 -05:00
logger ( 'mod/photos.php: photos_post(): album= ' . $album . ' newalbum= ' . $newalbum , LOGGER_DEBUG );
2010-08-06 00:15:24 -04:00
if ( ! strlen ( $album )) {
if ( strlen ( $newalbum ))
$album = $newalbum ;
else
$album = datetime_convert ( 'UTC' , date_default_timezone_get (), 'now' , 'Y' );
}
2011-01-27 21:45:19 -05: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-07 19:23:37 -04:00
* So we will make the first photo uploaded to this album in the last several hours
2011-01-27 21:45:19 -05:00
* visible by default , the rest will become visible over time when and if
* they acquire comments , likes , dislikes , and / or tags
*
*/
2011-06-07 19:23:37 -04:00
$r = q ( " SELECT * FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `created` > UTC_TIMESTAMP() - INTERVAL 3 HOUR " ,
2010-08-08 20:08:39 -04:00
dbesc ( $album ),
2010-12-05 21:08:36 -05:00
intval ( $page_owner_uid )
2010-08-08 20:08:39 -04:00
);
if (( ! count ( $r )) || ( $album == t ( 'Profile Photos' )))
$visible = 1 ;
else
2010-11-03 22:47:07 -04:00
$visible = 0 ;
2011-11-03 00:53:44 -04:00
if ( intval ( $_REQUEST [ 'not_visible' ]) || $_REQUEST [ 'not_visible' ] === 'true' )
2011-10-01 05:22:48 -04:00
$visible = 0 ;
2011-01-27 21:45:19 -05:00
$str_group_allow = perms2str ((( is_array ( $_REQUEST [ 'group_allow' ])) ? $_REQUEST [ 'group_allow' ] : explode ( ',' , $_REQUEST [ 'group_allow' ])));
$str_contact_allow = perms2str ((( is_array ( $_REQUEST [ 'contact_allow' ])) ? $_REQUEST [ 'contact_allow' ] : explode ( ',' , $_REQUEST [ 'contact_allow' ])));
$str_group_deny = perms2str ((( is_array ( $_REQUEST [ 'group_deny' ])) ? $_REQUEST [ 'group_deny' ] : explode ( ',' , $_REQUEST [ 'group_deny' ])));
$str_contact_deny = perms2str ((( is_array ( $_REQUEST [ 'contact_deny' ])) ? $_REQUEST [ 'contact_deny' ] : explode ( ',' , $_REQUEST [ 'contact_deny' ])));
2012-06-07 11:42:13 -04:00
$ret = array ( 'src' => '' , 'filename' => '' , 'filesize' => 0 , 'type' => '' );
2010-08-07 09:20:27 -04:00
2011-01-27 21:45:19 -05:00
call_hooks ( 'photo_post_file' , $ret );
2010-08-07 09:20:27 -04:00
2011-01-27 21:45:19 -05:00
if ( x ( $ret , 'src' ) && x ( $ret , 'filesize' )) {
$src = $ret [ 'src' ];
$filename = $ret [ 'filename' ];
$filesize = $ret [ 'filesize' ];
2012-06-07 11:42:13 -04:00
$type = $ret [ 'type' ];
2011-01-27 21:45:19 -05:00
}
else {
$src = $_FILES [ 'userfile' ][ 'tmp_name' ];
$filename = basename ( $_FILES [ 'userfile' ][ 'name' ]);
$filesize = intval ( $_FILES [ 'userfile' ][ 'size' ]);
2012-06-07 11:42:13 -04:00
$type = $_FILES [ 'userfile' ][ 'type' ];
2011-01-27 21:45:19 -05:00
}
2012-06-07 14:17:31 -04:00
if ( $type == " " ) $type = guess_image_type ( $filename );
2010-08-06 00:15:24 -04:00
2012-06-07 14:17:31 -04:00
logger ( 'photos: upload: received file: ' . $filename . ' as ' . $src . ' (' . $type . ') ' . $filesize . ' bytes' , LOGGER_DEBUG );
2011-06-28 21:59:41 -04:00
2010-11-09 21:24:35 -05:00
$maximagesize = get_config ( 'system' , 'maximagesize' );
if (( $maximagesize ) && ( $filesize > $maximagesize )) {
notice ( t ( 'Image exceeds size limit of ' ) . $maximagesize . EOL );
@ unlink ( $src );
2011-05-21 20:17:27 -04:00
$foo = 0 ;
call_hooks ( 'photo_post_end' , $foo );
2010-11-09 21:24:35 -05:00
return ;
}
2011-06-28 21:59:41 -04:00
if ( ! $filesize ) {
notice ( t ( 'Image file is empty.' ) . EOL );
@ unlink ( $src );
$foo = 0 ;
call_hooks ( 'photo_post_end' , $foo );
return ;
}
2012-02-21 17:15:10 -05:00
logger ( 'mod/photos.php: photos_post(): loading the contents of ' . $src , LOGGER_DEBUG );
2011-01-27 21:45:19 -05:00
2010-08-06 00:15:24 -04:00
$imagedata = @ file_get_contents ( $src );
2012-06-25 04:37:44 -04:00
$r = q ( " select sum(octet_length(data)) as total from photo where uid = %d and scale = 0 and album != 'Contact Photos' " ,
intval ( $a -> data [ 'user' ][ 'uid' ])
);
$limit = service_class_fetch ( $a -> data [ 'user' ][ 'uid' ], 'photo_upload_limit' );
if (( $limit !== false ) && (( $r [ 0 ][ 'total' ] + strlen ( $imagedata )) > $limit )) {
notice ( upgrade_message () . EOL );
@ unlink ( $src );
$foo = 0 ;
call_hooks ( 'photo_post_end' , $foo );
killme ();
}
2012-06-07 11:42:13 -04:00
$ph = new Photo ( $imagedata , $type );
2010-08-06 00:15:24 -04:00
2010-10-04 19:04:52 -04:00
if ( ! $ph -> is_valid ()) {
2012-02-21 17:15:10 -05:00
logger ( 'mod/photos.php: photos_post(): unable to process image' , LOGGER_DEBUG );
2010-08-06 00:15:24 -04:00
notice ( t ( 'Unable to process image.' ) . EOL );
@ unlink ( $src );
2011-05-21 20:17:27 -04:00
$foo = 0 ;
call_hooks ( 'photo_post_end' , $foo );
2010-08-06 00:15:24 -04:00
killme ();
}
2012-07-08 11:18:05 -04:00
$ph -> orient ( $src );
2010-08-06 00:15:24 -04:00
@ unlink ( $src );
2012-06-28 12:33:21 -04:00
$max_length = get_config ( 'system' , 'max_image_length' );
if ( ! $max_length )
$max_length = MAX_IMAGE_LENGTH ;
if ( $max_length > 0 )
$ph -> scaleImage ( $max_length );
2011-01-27 21:45:19 -05:00
$width = $ph -> getWidth ();
2010-08-06 00:15:24 -04:00
$height = $ph -> getHeight ();
$smallest = 0 ;
2010-09-14 01:57:31 -04:00
$photo_hash = photo_new_resource ();
2010-12-05 21:08:36 -05:00
$r = $ph -> store ( $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 00:15:24 -04:00
if ( ! $r ) {
2012-02-21 17:15:10 -05:00
logger ( 'mod/photos.php: photos_post(): image store failed' , LOGGER_DEBUG );
2010-08-06 00:15:24 -04:00
notice ( t ( 'Image upload failed.' ) . EOL );
killme ();
}
if ( $width > 640 || $height > 640 ) {
$ph -> scaleImage ( 640 );
2010-12-05 21:08:36 -05:00
$ph -> store ( $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 00:15:24 -04:00
$smallest = 1 ;
}
if ( $width > 320 || $height > 320 ) {
$ph -> scaleImage ( 320 );
2010-12-05 21:08:36 -05:00
$ph -> store ( $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 00:15:24 -04:00
$smallest = 2 ;
}
$basename = basename ( $filename );
2010-12-05 21:08:36 -05:00
$uri = item_new_uri ( $a -> get_hostname (), $page_owner_uid );
2010-08-06 00:15:24 -04:00
// Create item container
2010-09-14 01:57:31 -04:00
$arr = array ();
2010-12-05 21:08:36 -05:00
$arr [ 'uid' ] = $page_owner_uid ;
2010-11-03 22:47:07 -04:00
$arr [ 'uri' ] = $uri ;
$arr [ 'parent-uri' ] = $uri ;
$arr [ 'type' ] = 'photo' ;
$arr [ 'wall' ] = 1 ;
$arr [ 'resource-id' ] = $photo_hash ;
2010-12-05 21:08:36 -05: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-03 22:47:07 -04: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 [ 'last-child' ] = 1 ;
$arr [ 'visible' ] = $visible ;
2011-10-17 17:52:03 -04:00
$arr [ 'origin' ] = 1 ;
2010-12-05 21:08:36 -05:00
$arr [ 'body' ] = '[url=' . $a -> get_baseurl () . '/photos/' . $owner_record [ 'nickname' ] . '/image/' . $photo_hash . ']'
2012-06-07 11:42:13 -04:00
. '[img]' . $a -> get_baseurl () . " /photo/ { $photo_hash } - { $smallest } . " . $ph -> getExt () . '[/img]'
2010-09-14 01:57:31 -04:00
. '[/url]' ;
2010-08-06 00:15:24 -04:00
2010-09-14 01:57:31 -04:00
$item_id = item_store ( $arr );
2010-08-06 00:15:24 -04:00
2011-05-09 01:47:35 -04:00
if ( $item_id ) {
q ( " UPDATE `item` SET `plink` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1 " ,
dbesc ( $a -> get_baseurl () . '/display/' . $owner_record [ 'nickname' ] . '/' . $item_id ),
intval ( $page_owner_uid ),
intval ( $item_id )
);
}
2011-05-03 08:27:19 -04:00
if ( $visible )
proc_run ( 'php' , " include/notifier.php " , 'wall-new' , $item_id );
2011-01-27 21:45:19 -05:00
call_hooks ( 'photo_post_end' , intval ( $item_id ));
2010-08-06 00:15:24 -04:00
2011-01-27 21:45:19 -05: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 00:15:24 -04:00
2011-01-27 21:45:19 -05:00
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
// NOTREACHED
2010-08-06 00:15:24 -04:00
}
function photos_content ( & $a ) {
// URLs:
// photos/name
// photos/name/upload
2012-01-15 20:48:42 -05:00
// photos/name/upload/xxxxx (xxxxx is album name)
2010-08-06 00:15:24 -04:00
// photos/name/album/xxxxx
// photos/name/album/xxxxx/edit
// photos/name/image/xxxxx
// photos/name/image/xxxxx/edit
2010-08-08 20:08:39 -04:00
2010-08-06 00:15:24 -04:00
2011-04-21 20:29:47 -04:00
if (( get_config ( 'system' , 'block_public' )) && ( ! local_user ()) && ( ! remote_user ())) {
notice ( t ( 'Public access denied.' ) . EOL );
return ;
}
2012-06-07 11:42:13 -04:00
2011-04-12 20:58:16 -04:00
require_once ( 'include/bbcode.php' );
require_once ( 'include/security.php' );
require_once ( 'include/conversation.php' );
2010-08-06 00:15:24 -04:00
if ( ! x ( $a -> data , 'user' )) {
notice ( t ( 'No photos selected' ) . EOL );
return ;
}
2012-06-07 11:42:13 -04:00
$phototypes = Photo :: supportedTypes ();
2010-08-06 00:15:24 -04:00
$_SESSION [ 'photo_return' ] = $a -> cmd ;
//
// Parse arguments
//
if ( $a -> argc > 3 ) {
$datatype = $a -> argv [ 2 ];
$datum = $a -> argv [ 3 ];
}
2010-09-26 20:24:20 -04:00
elseif (( $a -> argc > 2 ) && ( $a -> argv [ 2 ] === 'upload' ))
2010-08-06 00:15:24 -04:00
$datatype = 'upload' ;
else
$datatype = 'summary' ;
if ( $a -> argc > 4 )
$cmd = $a -> argv [ 4 ];
else
$cmd = 'view' ;
//
// Setup permissions structures
//
2010-12-05 21:08:36 -05:00
$can_post = false ;
$visitor = 0 ;
$contact = null ;
$remote_contact = false ;
2012-09-05 01:50:28 -04:00
$contact_id = 0 ;
2010-08-06 00:15:24 -04:00
2010-12-05 21:08:36 -05:00
$owner_uid = $a -> data [ 'user' ][ 'uid' ];
2010-09-27 22:48:45 -04:00
2010-12-05 21:08:36 -05:00
$community_page = (( $a -> data [ 'user' ][ 'page-flags' ] == PAGE_COMMUNITY ) ? true : false );
2010-12-07 20:16:05 -05:00
2010-12-05 21:08:36 -05:00
if (( local_user ()) && ( local_user () == $owner_uid ))
$can_post = true ;
else {
if ( $community_page && remote_user ()) {
2012-09-05 01:50:28 -04:00
if ( is_array ( $_SESSION [ 'remote' ])) {
foreach ( $_SESSION [ 'remote' ] as $v ) {
if ( $v [ 'uid' ] == $owner_uid ) {
$contact_id = $v [ 'cid' ];
break ;
}
}
}
if ( $contact_id ) {
$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 )
);
if ( count ( $r )) {
$can_post = true ;
$contact = $r [ 0 ];
$remote_contact = true ;
$visitor = $cid ;
}
2010-12-05 21:08:36 -05:00
}
}
}
2010-09-27 22:48:45 -04:00
2010-12-05 21:08:36 -05:00
// perhaps they're visiting - but not a community page, so they wouldn't have write access
2010-09-27 22:48:45 -04:00
2010-12-05 21:08:36 -05:00
if ( remote_user () && ( ! $visitor )) {
2012-09-05 01:50:28 -04:00
$contact_id = 0 ;
if ( is_array ( $_SESSION [ 'remote' ])) {
foreach ( $_SESSION [ 'remote' ] as $v ) {
if ( $v [ 'uid' ] == $owner_uid ) {
$contact_id = $v [ 'cid' ];
break ;
}
}
}
if ( $contact_id ) {
$groups = init_groups_visitor ( $contact_id );
$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 )
);
if ( count ( $r )) {
$contact = $r [ 0 ];
$remote_contact = true ;
}
2010-09-27 22:48:45 -04:00
}
2010-08-06 00:15:24 -04:00
}
2010-09-27 22:48:45 -04:00
if ( ! $remote_contact ) {
if ( local_user ()) {
$contact_id = $_SESSION [ 'cid' ];
$contact = $a -> contact ;
}
}
2011-07-06 02:23:43 -04:00
if ( $a -> data [ 'user' ][ 'hidewall' ] && ( local_user () != $owner_uid ) && ( ! $remote_contact )) {
2011-05-28 03:42:01 -04:00
notice ( t ( 'Access to this item is restricted.' ) . EOL );
return ;
}
2011-06-30 20:35:35 -04:00
$sql_extra = permissions_sql ( $owner_uid , $remote_contact , $groups );
2010-08-06 00:15:24 -04:00
2011-06-23 05:30:17 -04:00
$o = " " ;
// tabs
$_is_owner = ( local_user () && ( local_user () == $owner_uid ));
2011-10-10 10:40:12 -04:00
$o .= profile_tabs ( $a , $_is_owner , $a -> data [ 'user' ][ 'nickname' ]);
2011-06-23 05:30:17 -04:00
2010-08-06 00:15:24 -04:00
//
// dispatch request
//
2010-09-26 20:24:20 -04:00
if ( $datatype === 'upload' ) {
2010-12-05 21:08:36 -05:00
if ( ! ( $can_post )) {
2010-08-06 00:15:24 -04:00
notice ( t ( 'Permission denied.' ));
return ;
}
2012-01-15 20:48:42 -05:00
$selname = (( $datum ) ? hex2bin ( $datum ) : '' );
2012-07-28 11:57:16 -04:00
$albumselect = '' ;
2010-08-06 00:15:24 -04:00
2012-01-15 20:48:42 -05:00
$albumselect .= '<option value="" ' . (( ! $selname ) ? ' selected="selected" ' : '' ) . '> </option>' ;
2010-08-06 00:15:24 -04:00
if ( count ( $a -> data [ 'albums' ])) {
foreach ( $a -> data [ 'albums' ] as $album ) {
2011-06-29 01:33:02 -04:00
if (( $album [ 'album' ] === '' ) || ( $album [ 'album' ] === 'Contact Photos' ) || ( $album [ 'album' ] === t ( 'Contact Photos' )))
2010-08-06 00:15:24 -04:00
continue ;
2012-01-15 20:48:42 -05:00
$selected = (( $selname === $album [ 'album' ]) ? ' selected="selected" ' : '' );
$albumselect .= '<option value="' . $album [ 'album' ] . '"' . $selected . '>' . $album [ 'album' ] . '</option>' ;
2010-08-06 00:15:24 -04:00
}
}
2010-10-18 03:43:49 -04:00
$celeb = ((( $a -> user [ 'page-flags' ] == PAGE_SOAPBOX ) || ( $a -> user [ 'page-flags' ] == PAGE_COMMUNITY )) ? true : false );
2011-01-27 21:45:19 -05:00
$uploader = '' ;
$ret = array ( 'post_url' => $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ],
'addon_text' => $uploader ,
'default_upload' => true );
call_hooks ( 'photo_upload_form' , $ret );
2012-07-23 22:37:00 -04:00
$default_upload = ' < input id = " photos-upload-choose " type = " file " name = " userfile " /> < div class = " photos-upload-submit-wrapper " >
2011-01-27 21:45:19 -05:00
< input type = " submit " name = " submit " value = " ' . t('Submit') . ' " id = " photos-upload-submit " /> </ div > ' ;
2012-06-25 04:37:44 -04:00
$r = q ( " select sum(octet_length(data)) as total from photo where uid = %d and scale = 0 and album != 'Contact Photos' " ,
intval ( $a -> data [ 'user' ][ 'uid' ])
);
$limit = service_class_fetch ( $a -> data [ 'user' ][ 'uid' ], 'photo_upload_limit' );
if ( $limit !== false ) {
$usage_message = sprintf ( t ( " You have used %1 $ .2f Mbytes of %2 $ .2f Mbytes photo storage. " ), $r [ 0 ][ 'total' ] / 1024000 , $limit / 1024000 );
}
else {
$usage_message = sprintf ( t ( 'You have used %1$.2f Mbytes of photo storage.' ), $r [ 0 ][ 'total' ] / 1024000 );
}
2011-01-27 21:45:19 -05:00
2011-05-11 07:37:13 -04:00
$tpl = get_markup_template ( 'photos_upload.tpl' );
2010-08-06 00:15:24 -04:00
$o .= replace_macros ( $tpl , array (
'$pagename' => t ( 'Upload Photos' ),
'$sessid' => session_id (),
2012-06-25 04:37:44 -04:00
'$usage' => $usage_message ,
2010-12-05 21:08:36 -05:00
'$nickname' => $a -> data [ 'user' ][ 'nickname' ],
2010-08-06 00:15:24 -04:00
'$newalbum' => t ( 'New album name: ' ),
'$existalbumtext' => t ( 'or existing album name: ' ),
2011-10-01 09:20:41 -04:00
'$nosharetext' => t ( 'Do not show a status post for this upload' ),
2011-09-19 23:24:32 -04:00
'$albumselect' => template_escape ( $albumselect ),
2010-08-07 09:20:27 -04:00
'$permissions' => t ( 'Permissions' ),
2011-09-19 23:24:32 -04:00
'$aclselect' => (( $visitor ) ? '' : template_escape ( populate_acl ( $a -> user , $celeb ))),
2011-01-27 21:45:19 -05:00
'$uploader' => $ret [ 'addon_text' ],
'$default' => (( $ret [ 'default_upload' ]) ? $default_upload : '' ),
'$uploadurl' => $ret [ 'post_url' ]
2010-08-06 00:15:24 -04:00
));
return $o ;
}
2010-09-26 20:24:20 -04:00
if ( $datatype === 'album' ) {
2010-08-06 00:15:24 -04:00
$album = hex2bin ( $datum );
$r = q ( " SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s'
2011-07-28 19:49:43 -04:00
AND `scale` <= 4 $sql_extra GROUP BY `resource-id` " ,
2010-12-05 21:08:36 -05:00
intval ( $owner_uid ),
2010-08-06 00:15:24 -04:00
dbesc ( $album )
);
2011-01-04 03:06:36 -05:00
if ( count ( $r )) {
2010-08-06 00:15:24 -04:00
$a -> set_pager_total ( count ( $r ));
2011-01-04 03:06:36 -05:00
$a -> set_pager_itemspage ( 20 );
}
2010-08-06 00:15:24 -04:00
2012-09-08 21:33:28 -04:00
if ( $_GET [ 'order' ] === 'posted' )
$order = 'ASC' ;
else
$order = 'DESC' ;
2012-06-07 11:42:13 -04:00
$r = q ( " SELECT `resource-id`, `id`, `filename`, type, max(`scale`) AS `scale`, `desc` FROM `photo` WHERE `uid` = %d AND `album` = '%s'
2012-09-08 21:33:28 -04:00
AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` $order LIMIT % d , % d " ,
2010-12-05 21:08:36 -05:00
intval ( $owner_uid ),
2010-08-06 00:15:24 -04:00
dbesc ( $album ),
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
$o .= '<h3>' . $album . '</h3>' ;
2010-08-08 20:08:39 -04:00
2010-09-26 20:24:20 -04:00
if ( $cmd === 'edit' ) {
2011-06-29 01:33:02 -04:00
if (( $album !== t ( 'Profile Photos' )) && ( $album !== 'Contact Photos' ) && ( $album !== t ( 'Contact Photos' ))) {
2010-12-05 21:08:36 -05:00
if ( $can_post ) {
2011-05-11 07:37:13 -04:00
$edit_tpl = get_markup_template ( 'album_edit.tpl' );
2010-08-08 20:08:39 -04:00
$o .= replace_macros ( $edit_tpl , array (
'$nametext' => t ( 'New album name: ' ),
2010-12-05 21:08:36 -05:00
'$nickname' => $a -> data [ 'user' ][ 'nickname' ],
2011-09-19 23:24:32 -04:00
'$album' => template_escape ( $album ),
2010-08-08 20:08:39 -04:00
'$hexalbum' => bin2hex ( $album ),
'$submit' => t ( 'Submit' ),
'$dropsubmit' => t ( 'Delete Album' )
));
}
}
}
else {
2011-06-29 01:33:02 -04:00
if (( $album !== t ( 'Profile Photos' )) && ( $album !== 'Contact Photos' ) && ( $album !== t ( 'Contact Photos' ))) {
2010-12-05 21:08:36 -05:00
if ( $can_post ) {
2010-08-08 20:08:39 -04:00
$o .= '<div id="album-edit-link"><a href="' . $a -> get_baseurl () . '/photos/'
. $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $album ) . '/edit' . '">'
. t ( 'Edit Album' ) . '</a></div>' ;
}
}
}
2012-01-15 20:48:42 -05:00
2012-09-08 21:33:28 -04:00
if ( $_GET [ 'order' ] === 'posted' )
$o .= '<div class="photos-upload-link" ><a href="' . $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $album ) . '" >' . t ( 'Show Newest First' ) . '</a></div>' ;
else
$o .= '<div class="photos-upload-link" ><a href="' . $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $album ) . '?f=&order=posted" >' . t ( 'Show Oldest First' ) . '</a></div>' ;
2012-01-15 20:48:42 -05:00
if ( $can_post ) {
$o .= '<div class="photos-upload-link" ><a href="' . $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/upload/' . bin2hex ( $album ) . '" >' . t ( 'Upload New Photos' ) . '</a></div>' ;
}
2012-09-08 21:33:28 -04:00
2011-05-11 07:37:13 -04:00
$tpl = get_markup_template ( 'photo_album.tpl' );
2010-08-06 00:15:24 -04:00
if ( count ( $r ))
2012-05-21 19:40:11 -04:00
$twist = 'rotright' ;
2010-08-06 00:15:24 -04:00
foreach ( $r as $rr ) {
2012-05-21 19:40:11 -04:00
if ( $twist == 'rotright' )
$twist = 'rotleft' ;
else
$twist = 'rotright' ;
2012-06-07 11:42:13 -04:00
$ext = $phototypes [ $rr [ 'type' ]];
2012-05-21 19:40:11 -04:00
2010-08-06 00:15:24 -04:00
$o .= replace_macros ( $tpl , array (
'$id' => $rr [ 'id' ],
2012-05-21 19:40:11 -04:00
'$twist' => ' ' . $twist . rand ( 2 , 4 ),
2012-09-08 21:33:28 -04:00
'$photolink' => $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $rr [ 'resource-id' ]
. (( $_GET [ 'order' ] === 'posted' ) ? '?f=&order=posted' : '' ),
2010-08-06 00:15:24 -04:00
'$phototitle' => t ( 'View Photo' ),
2012-06-07 11:42:13 -04:00
'$imgsrc' => $a -> get_baseurl () . '/photo/' . $rr [ 'resource-id' ] . '-' . $rr [ 'scale' ] . '.' . $ext ,
2011-09-19 23:24:32 -04:00
'$imgalt' => template_escape ( $rr [ 'filename' ]),
'$desc' => template_escape ( $rr [ 'desc' ])
2010-08-06 00:15:24 -04:00
));
}
$o .= '<div id="photo-album-end"></div>' ;
2011-01-04 03:06:36 -05:00
$o .= paginate ( $a );
2010-08-06 00:15:24 -04:00
return $o ;
}
2010-09-26 20:24:20 -04:00
if ( $datatype === 'image' ) {
2010-08-06 00:15:24 -04:00
2011-04-12 20:58:16 -04:00
2010-08-06 09:30:25 -04:00
2011-06-23 05:30:17 -04:00
//$o = '';
2010-08-07 09:20:27 -04:00
// fetch image, item containing image, then comments
2010-08-06 09:30:25 -04:00
$ph = q ( " SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
2010-08-06 00:15:24 -04:00
$sql_extra ORDER BY `scale` ASC " ,
2010-12-05 21:08:36 -05:00
intval ( $owner_uid ),
2010-08-06 00:15:24 -04:00
dbesc ( $datum )
);
2010-08-06 09:30:25 -04:00
if ( ! count ( $ph )) {
2011-09-22 23:03:09 -04:00
$ph = q ( " SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
LIMIT 1 " ,
intval ( $owner_uid ),
dbesc ( $datum )
);
if ( count ( $ph ))
notice ( t ( 'Permission denied. Access to this item may be restricted.' ));
else
notice ( t ( 'Photo not available' ) . EOL );
2010-08-06 00:15:24 -04:00
return ;
}
2011-03-11 23:06:13 -05:00
$prevlink = '' ;
$nextlink = '' ;
2012-09-08 21:33:28 -04:00
if ( $_GET [ 'order' ] === 'posted' )
$order = 'ASC' ;
else
$order = 'DESC' ;
2011-03-11 23:06:13 -05:00
$prvnxt = q ( " SELECT `resource-id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `scale` = 0
2012-09-08 21:33:28 -04:00
$sql_extra ORDER BY `created` $order " ,
2011-03-11 23:06:13 -05:00
dbesc ( $ph [ 0 ][ 'album' ]),
intval ( $owner_uid )
);
if ( count ( $prvnxt )) {
for ( $z = 0 ; $z < count ( $prvnxt ); $z ++ ) {
if ( $prvnxt [ $z ][ 'resource-id' ] == $ph [ 0 ][ 'resource-id' ]) {
$prv = $z - 1 ;
$nxt = $z + 1 ;
if ( $prv < 0 )
$prv = count ( $prvnxt ) - 1 ;
if ( $nxt >= count ( $prvnxt ))
$nxt = 0 ;
break ;
}
}
2011-09-21 20:37:02 -04:00
$edit_suffix = ((( $cmd === 'edit' ) && ( $can_post )) ? '/edit' : '' );
2012-09-08 21:33:28 -04:00
$prevlink = $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $prvnxt [ $prv ][ 'resource-id' ] . $edit_suffix . (( $_GET [ 'order' ] === 'posted' ) ? '?f=&order=posted' : '' );
$nextlink = $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $prvnxt [ $nxt ][ 'resource-id' ] . $edit_suffix . (( $_GET [ 'order' ] === 'posted' ) ? '?f=&order=posted' : '' );
2011-03-11 23:06:13 -05:00
}
2010-08-06 09:30:25 -04:00
if ( count ( $ph ) == 1 )
$hires = $lores = $ph [ 0 ];
if ( count ( $ph ) > 1 ) {
2010-08-06 20:16:52 -04:00
if ( $ph [ 1 ][ 'scale' ] == 2 ) {
// original is 640 or less, we can display it directly
$hires = $lores = $ph [ 0 ];
}
else {
2010-08-06 09:30:25 -04:00
$hires = $ph [ 0 ];
$lores = $ph [ 1 ];
2010-08-06 20:16:52 -04:00
}
2010-08-06 00:15:24 -04:00
}
2011-05-05 04:53:03 -04:00
$album_link = $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $ph [ 0 ][ 'album' ]);
$tools = Null ;
$lock = Null ;
2010-08-06 20:16:52 -04:00
2010-12-05 21:08:36 -05:00
if ( $can_post && ( $ph [ 0 ][ 'uid' ] == $owner_uid )) {
2011-05-05 04:53:03 -04:00
$tools = array (
2011-09-21 20:37:02 -04:00
'edit' => array ( $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $datum . (( $cmd === 'edit' ) ? '' : '/edit' ), (( $cmd === 'edit' ) ? t ( 'View photo' ) : t ( 'Edit photo' ))),
2012-03-19 04:20:53 -04:00
'profile' => array ( $a -> get_baseurl () . '/profile_photo/use/' . $ph [ 0 ][ 'resource-id' ], t ( 'Use as profile photo' )),
2011-05-05 04:53:03 -04:00
);
2011-02-03 11:24:58 -05:00
// lock
2011-05-05 04:53:03 -04:00
$lock = ( ( ( $ph [ 0 ][ 'uid' ] == local_user ()) && ( strlen ( $ph [ 0 ][ 'allow_cid' ]) || strlen ( $ph [ 0 ][ 'allow_gid' ])
2011-02-03 11:24:58 -05:00
|| strlen ( $ph [ 0 ][ 'deny_cid' ]) || strlen ( $ph [ 0 ][ 'deny_gid' ])) )
2011-05-05 04:53:03 -04:00
? t ( 'Private Message' )
: Null );
2011-02-03 11:24:58 -05:00
2011-05-05 04:53:03 -04:00
2010-08-08 04:58:26 -04:00
}
2012-07-28 11:57:16 -04:00
if ( $cmd === 'edit' ) {
$tpl = get_markup_template ( 'photo_edit_head.tpl' );
$a -> page [ 'htmlhead' ] .= replace_macros ( $tpl , array (
'$prevlink' => $prevlink ,
'$nextlink' => $nextlink
));
2012-03-19 04:20:53 -04:00
}
2011-03-11 23:06:13 -05:00
if ( $prevlink )
2011-06-14 00:43:21 -04:00
$prevlink = array ( $prevlink , '<div class="icon prev"></div>' ) ;
2010-08-08 04:58:26 -04:00
2011-05-05 04:53:03 -04:00
$photo = array (
2012-06-07 11:42:13 -04:00
'href' => $a -> get_baseurl () . '/photo/' . $hires [ 'resource-id' ] . '-' . $hires [ 'scale' ] . '.' . $phototypes [ $hires [ 'type' ]],
2011-05-05 04:53:03 -04:00
'title' => t ( 'View Full Size' ),
2012-06-07 11:42:13 -04:00
'src' => $a -> get_baseurl () . '/photo/' . $lores [ 'resource-id' ] . '-' . $lores [ 'scale' ] . '.' . $phototypes [ $lores [ 'type' ]] . '?f=&_u=' . datetime_convert ( '' , '' , '' , 'ymdhis' )
2011-05-05 04:53:03 -04:00
);
2011-03-11 23:06:13 -05:00
if ( $nextlink )
2011-06-14 00:43:21 -04:00
$nextlink = array ( $nextlink , '<div class="icon next"></div>' );
2010-08-06 00:15:24 -04:00
2010-08-08 04:58:26 -04:00
2010-08-06 09:30:25 -04:00
// Do we have an item for this photo?
2012-09-29 09:04:01 -04:00
// FIXME! - replace following code to display the conversation with our normal
// 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
2010-11-04 23:47:44 -04:00
$linked_items = q ( " SELECT * FROM `item` WHERE `resource-id` = '%s' $sql_extra LIMIT 1 " ,
2010-08-06 09:30:25 -04:00
dbesc ( $datum )
);
2010-11-04 23:47:44 -04:00
if ( count ( $linked_items )) {
$link_item = $linked_items [ 0 ];
2010-08-06 09:30:25 -04:00
$r = q ( " SELECT COUNT(*) AS `total`
FROM `item` LEFT JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
2012-01-23 23:56:11 -05:00
WHERE `parent-uri` = '%s' AND `uri` != '%s' AND `item` . `deleted` = 0 and `item` . `moderated` = 0
2010-11-02 19:24:23 -04:00
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
AND `item` . `uid` = % d
2010-08-06 09:30:25 -04:00
$sql_extra " ,
2010-11-04 23:47:44 -04:00
dbesc ( $link_item [ 'uri' ]),
dbesc ( $link_item [ 'uri' ]),
intval ( $link_item [ 'uid' ])
2010-08-06 09:30:25 -04:00
);
if ( count ( $r ))
$a -> set_pager_total ( $r [ 0 ][ 'total' ]);
$r = q ( " SELECT `item`.*, `item`.`id` AS `item_id`,
2010-10-18 03:43:49 -04:00
`contact` . `name` , `contact` . `photo` , `contact` . `url` , `contact` . `network` ,
`contact` . `rel` , `contact` . `thumb` , `contact` . `self` ,
2010-08-06 09:30:25 -04:00
`contact` . `id` AS `cid` , `contact` . `uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
2012-01-23 23:56:11 -05:00
WHERE `parent-uri` = '%s' AND `uri` != '%s' AND `item` . `deleted` = 0 and `item` . `moderated` = 0
2010-08-06 09:30:25 -04:00
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
2010-11-02 19:24:23 -04:00
AND `item` . `uid` = % d
2010-08-06 09:30:25 -04:00
$sql_extra
ORDER BY `parent` DESC , `id` ASC LIMIT % d , % d " ,
2010-11-04 23:47:44 -04:00
dbesc ( $link_item [ 'uri' ]),
dbesc ( $link_item [ 'uri' ]),
intval ( $link_item [ 'uid' ]),
2010-08-06 09:30:25 -04:00
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2010-11-04 03:19:10 -04:00
2010-11-04 23:47:44 -04:00
if (( local_user ()) && ( local_user () == $link_item [ 'uid' ])) {
2010-11-04 03:19:10 -04:00
q ( " UPDATE `item` SET `unseen` = 0 WHERE `parent` = %d and `uid` = %d " ,
2010-11-04 23:47:44 -04:00
intval ( $link_item [ 'parent' ]),
2010-11-04 03:19:10 -04:00
intval ( local_user ())
);
}
2010-08-08 20:08:39 -04:00
}
2010-08-06 00:15:24 -04:00
2011-05-05 04:53:03 -04:00
$tags = Null ;
2011-07-03 22:57:20 -04:00
2010-11-04 23:47:44 -04:00
if ( count ( $linked_items ) && strlen ( $link_item [ 'tag' ])) {
$arr = explode ( ',' , $link_item [ 'tag' ]);
2011-05-05 04:53:03 -04:00
// parse tags and add links
2010-11-02 02:42:26 -04:00
$tag_str = '' ;
foreach ( $arr as $t ) {
if ( strlen ( $tag_str ))
$tag_str .= ', ' ;
$tag_str .= bbcode ( $t );
}
2011-05-05 04:53:03 -04:00
$tags = array ( t ( 'Tags: ' ), $tag_str );
2011-06-09 00:43:32 -04:00
if ( $cmd === 'edit' ) {
2011-05-05 04:53:03 -04:00
$tags [] = $a -> get_baseurl () . '/tagrm/' . $link_item [ 'id' ];
$tags [] = t ( '[Remove any tag]' );
2011-06-09 00:43:32 -04:00
}
2010-08-08 20:08:39 -04:00
}
2010-08-08 04:58:26 -04:00
2010-11-04 23:47:44 -04:00
2011-05-05 04:53:03 -04:00
$edit = Null ;
2010-12-05 21:08:36 -05:00
if (( $cmd === 'edit' ) && ( $can_post )) {
2011-05-11 07:37:13 -04:00
$edit_tpl = get_markup_template ( 'photo_edit.tpl' );
2011-05-05 04:53:03 -04:00
$edit = replace_macros ( $edit_tpl , array (
2010-08-08 20:08:39 -04:00
'$id' => $ph [ 0 ][ 'id' ],
2012-06-20 22:36:10 -04:00
'$rotatecw' => t ( 'Rotate CW (right)' ),
'$rotateccw' => t ( 'Rotate CCW (left)' ),
2011-09-19 23:24:32 -04:00
'$album' => template_escape ( $ph [ 0 ][ 'album' ]),
2011-02-03 18:13:38 -05:00
'$newalbum' => t ( 'New album name' ),
2010-12-05 21:08:36 -05:00
'$nickname' => $a -> data [ 'user' ][ 'nickname' ],
2010-08-08 20:08:39 -04:00
'$resource_id' => $ph [ 0 ][ 'resource-id' ],
'$capt_label' => t ( 'Caption' ),
2011-09-19 23:24:32 -04:00
'$caption' => template_escape ( $ph [ 0 ][ 'desc' ]),
2010-11-02 02:42:26 -04:00
'$tag_label' => t ( 'Add a Tag' ),
2010-11-04 23:47:44 -04:00
'$tags' => $link_item [ 'tag' ],
2011-03-10 00:10:16 -05:00
'$permissions' => t ( 'Permissions' ),
2011-09-19 23:24:32 -04:00
'$aclselect' => template_escape ( populate_acl ( $ph [ 0 ])),
2010-11-02 02:42:26 -04:00
'$help_tags' => t ( 'Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping' ),
2010-11-04 23:47:44 -04:00
'$item_id' => (( count ( $linked_items )) ? $link_item [ 'id' ] : 0 ),
2010-08-08 20:08:39 -04:00
'$submit' => t ( 'Submit' ),
'$delete' => t ( 'Delete Photo' )
));
}
2010-08-07 09:20:27 -04:00
2010-11-04 23:47:44 -04:00
if ( count ( $linked_items )) {
2010-08-06 09:30:25 -04:00
2011-05-11 07:37:13 -04:00
$cmnt_tpl = get_markup_template ( 'comment_item.tpl' );
$tpl = get_markup_template ( 'photo_item.tpl' );
2010-08-06 09:30:25 -04:00
$return_url = $a -> cmd ;
2011-05-11 07:37:13 -04:00
$like_tpl = get_markup_template ( 'like_noshare.tpl' );
2010-11-02 19:24:23 -04:00
2010-11-03 22:47:07 -04:00
$likebuttons = '' ;
2011-03-08 21:53:52 -05:00
if ( $can_post || can_write_wall ( $a , $owner_uid )) {
$likebuttons = replace_macros ( $like_tpl , array (
2011-05-05 04:53:03 -04:00
'$id' => $link_item [ 'id' ],
2011-03-08 21:53:52 -05:00
'$likethis' => t ( " I like this \x28 toggle \x29 " ),
'$nolike' => t ( " I don't like this \x28 toggle \x29 " ),
2011-03-16 22:36:59 -04:00
'$share' => t ( 'Share' ),
2011-05-05 04:53:03 -04:00
'$wait' => t ( 'Please wait' )
2011-03-08 21:53:52 -05:00
));
}
2010-11-03 22:47:07 -04:00
2011-05-05 04:53:03 -04:00
$comments = '' ;
2010-11-03 22:47:07 -04:00
if ( ! count ( $r )) {
2010-12-05 21:08:36 -05:00
if ( $can_post || can_write_wall ( $a , $owner_uid )) {
2010-11-04 23:47:44 -04:00
if ( $link_item [ 'last-child' ]) {
2011-05-05 04:53:03 -04:00
$comments .= replace_macros ( $cmnt_tpl , array (
2011-02-17 00:17:49 -05:00
'$return_path' => '' ,
'$jsreload' => $return_url ,
2010-11-04 03:19:10 -04:00
'$type' => 'wall-comment' ,
2010-11-04 23:47:44 -04:00
'$id' => $link_item [ 'id' ],
'$parent' => $link_item [ 'id' ],
2010-12-05 21:08:36 -05:00
'$profile_uid' => $owner_uid ,
2010-11-04 03:19:10 -04:00
'$mylink' => $contact [ 'url' ],
'$mytitle' => t ( 'This is you' ),
'$myphoto' => $contact [ 'thumb' ],
2011-04-07 19:19:46 -04:00
'$comment' => t ( 'Comment' ),
'$submit' => t ( 'Submit' ),
2012-01-05 19:38:24 -05:00
'$preview' => t ( 'Preview' ),
2012-08-04 16:01:16 -04:00
'$sourceapp' => t ( $a -> sourcename ),
2012-11-01 19:14:42 -04:00
'$ww' => '' ,
'$rand_num' => random_digits ( 12 )
2010-11-04 03:19:10 -04:00
));
}
2010-08-06 09:30:25 -04:00
}
}
2010-11-02 19:24:23 -04:00
$alike = array ();
$dlike = array ();
2011-05-05 04:53:03 -04:00
$like = '' ;
$dislike = '' ;
2010-08-06 09:30:25 -04:00
2012-09-29 09:04:01 -04:00
2010-08-06 09:30:25 -04:00
// display comments
if ( count ( $r )) {
2010-11-02 19:24:23 -04:00
foreach ( $r as $item ) {
like_puller ( $a , $item , $alike , 'like' );
like_puller ( $a , $item , $dlike , 'dislike' );
}
2011-02-04 04:18:28 -05:00
$like = (( isset ( $alike [ $link_item [ 'id' ]])) ? format_like ( $alike [ $link_item [ 'id' ]], $alike [ $link_item [ 'id' ] . '-l' ], 'like' , $link_item [ 'id' ]) : '' );
2010-11-04 23:47:44 -04:00
$dislike = (( isset ( $dlike [ $link_item [ 'id' ]])) ? format_like ( $dlike [ $link_item [ 'id' ]], $dlike [ $link_item [ 'id' ] . '-l' ], 'dislike' , $link_item [ 'id' ]) : '' );
2010-11-02 19:24:23 -04:00
2010-11-04 03:19:10 -04:00
2010-12-05 21:08:36 -05:00
if ( $can_post || can_write_wall ( $a , $owner_uid )) {
2010-11-04 23:47:44 -04:00
if ( $link_item [ 'last-child' ]) {
2011-05-05 04:53:03 -04:00
$comments .= replace_macros ( $cmnt_tpl , array (
2011-02-17 00:17:49 -05:00
'$return_path' => '' ,
'$jsreload' => $return_url ,
2010-11-04 03:19:10 -04:00
'$type' => 'wall-comment' ,
2010-11-04 23:47:44 -04:00
'$id' => $link_item [ 'id' ],
'$parent' => $link_item [ 'id' ],
2010-12-05 21:08:36 -05:00
'$profile_uid' => $owner_uid ,
2010-11-04 03:19:10 -04:00
'$mylink' => $contact [ 'url' ],
'$mytitle' => t ( 'This is you' ),
'$myphoto' => $contact [ 'thumb' ],
2011-05-09 01:58:38 -04:00
'$comment' => t ( 'Comment' ),
'$submit' => t ( 'Submit' ),
2012-10-14 14:30:10 -04:00
'$preview' => t ( 'Preview' ),
2012-08-04 16:01:16 -04:00
'$sourceapp' => t ( $a -> sourcename ),
2012-11-01 19:14:42 -04:00
'$ww' => '' ,
'$rand_num' => random_digits ( 12 )
2010-11-04 03:19:10 -04:00
));
}
}
2010-08-06 09:30:25 -04:00
foreach ( $r as $item ) {
$comment = '' ;
$template = $tpl ;
2010-11-02 19:24:23 -04:00
$sparkle = '' ;
if ((( activity_match ( $item [ 'verb' ], ACTIVITY_LIKE )) || ( activity_match ( $item [ 'verb' ], ACTIVITY_DISLIKE ))) && ( $item [ 'id' ] != $item [ 'parent' ]))
continue ;
2010-08-06 09:30:25 -04:00
$redirect_url = $a -> get_baseurl () . '/redir/' . $item [ 'cid' ] ;
2010-10-18 17:34:59 -04:00
if ( local_user () && ( $item [ 'contact-uid' ] == local_user ())
2010-10-18 03:43:49 -04:00
&& ( $item [ 'network' ] == 'dfrn' ) && ( ! $item [ 'self' ] )) {
2010-08-06 09:30:25 -04:00
$profile_url = $redirect_url ;
2010-09-27 22:48:45 -04:00
$sparkle = ' sparkle' ;
}
else {
$profile_url = $item [ 'url' ];
$sparkle = '' ;
}
2010-08-06 09:30:25 -04:00
2010-12-05 21:08:36 -05:00
$diff_author = (( $item [ 'url' ] !== $item [ 'author-link' ]) ? true : false );
$profile_name = ((( strlen ( $item [ 'author-name' ])) && $diff_author ) ? $item [ 'author-name' ] : $item [ 'name' ]);
$profile_avatar = ((( strlen ( $item [ 'author-avatar' ])) && $diff_author ) ? $item [ 'author-avatar' ] : $item [ 'thumb' ]);
2010-08-06 09:30:25 -04:00
$profile_link = $profile_url ;
$drop = '' ;
2012-09-05 01:50:28 -04:00
if (( $item [ 'contact-id' ] == $contact_id ) || ( $item [ 'uid' ] == local_user ()))
2011-06-15 23:43:39 -04:00
$drop = replace_macros ( get_markup_template ( 'photo_drop.tpl' ), array ( '$id' => $item [ 'id' ], '$delete' => t ( 'Delete' )));
2010-08-06 09:30:25 -04:00
2011-05-05 04:53:03 -04:00
$comments .= replace_macros ( $template , array (
2010-08-06 09:30:25 -04:00
'$id' => $item [ 'item_id' ],
'$profile_url' => $profile_link ,
2011-09-19 23:24:32 -04:00
'$name' => template_escape ( $profile_name ),
2010-08-06 09:30:25 -04:00
'$thumb' => $profile_avatar ,
2010-09-27 22:48:45 -04:00
'$sparkle' => $sparkle ,
2011-09-19 23:24:32 -04:00
'$title' => template_escape ( $item [ 'title' ]),
'$body' => template_escape ( bbcode ( $item [ 'body' ])),
2010-08-06 09:30:25 -04:00
'$ago' => relative_date ( $item [ 'created' ]),
'$indent' => (( $item [ 'parent' ] != $item [ 'item_id' ]) ? ' comment' : '' ),
'$drop' => $drop ,
'$comment' => $comment
));
2012-10-14 14:30:10 -04:00
if ( $can_post || can_write_wall ( $a , $owner_uid )) {
if ( $item [ 'last-child' ]) {
$comments .= replace_macros ( $cmnt_tpl , array (
'$return_path' => '' ,
'$jsreload' => $return_url ,
'$type' => 'wall-comment' ,
'$id' => $item [ 'item_id' ],
'$parent' => $item [ 'parent' ],
'$profile_uid' => $owner_uid ,
'$mylink' => $contact [ 'url' ],
'$mytitle' => t ( 'This is you' ),
'$myphoto' => $contact [ 'thumb' ],
'$comment' => t ( 'Comment' ),
'$submit' => t ( 'Submit' ),
'$preview' => t ( 'Preview' ),
'$sourceapp' => t ( $a -> sourcename ),
2012-11-01 19:14:42 -04:00
'$ww' => '' ,
'$rand_num' => random_digits ( 12 )
2012-10-14 14:30:10 -04:00
));
}
}
2010-08-06 09:30:25 -04:00
}
}
2011-05-05 04:53:03 -04:00
$paginate = paginate ( $a );
2010-08-06 09:30:25 -04:00
}
2011-05-05 04:53:03 -04:00
2011-05-11 07:37:13 -04:00
$photo_tpl = get_markup_template ( 'photo_view.tpl' );
2011-05-05 04:53:03 -04:00
$o .= replace_macros ( $photo_tpl , array (
'$id' => $ph [ 0 ][ 'id' ],
2011-09-19 23:24:32 -04:00
'$album' => array ( $album_link , template_escape ( $ph [ 0 ][ 'album' ])),
2011-05-05 04:53:03 -04:00
'$tools' => $tools ,
'$lock' => $lock ,
'$photo' => $photo ,
'$prevlink' => $prevlink ,
'$nextlink' => $nextlink ,
'$desc' => $ph [ 0 ][ 'desc' ],
2011-09-19 23:24:32 -04:00
'$tags' => template_escape ( $tags ),
2011-05-05 04:53:03 -04:00
'$edit' => $edit ,
'$likebuttons' => $likebuttons ,
2011-09-19 23:24:32 -04:00
'$like' => template_escape ( $like ),
'$dislike' => template_escape ( $dislike ),
2011-05-05 04:53:03 -04:00
'$comments' => $comments ,
'$paginate' => $paginate ,
));
2010-08-06 00:15:24 -04:00
return $o ;
}
// Default - show recent photos with upload link (if applicable)
2011-06-23 05:30:17 -04:00
//$o = '';
2010-08-06 00:15:24 -04:00
2011-06-29 01:33:02 -04:00
$r = q ( " SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s'
2010-08-06 00:15:24 -04:00
$sql_extra GROUP BY `resource-id` " ,
intval ( $a -> data [ 'user' ][ 'uid' ]),
2011-06-29 01:33:02 -04:00
dbesc ( 'Contact Photos' ),
2010-08-06 00:15:24 -04:00
dbesc ( t ( 'Contact Photos' ))
);
2011-01-04 03:06:36 -05:00
if ( count ( $r )) {
2010-08-06 00:15:24 -04:00
$a -> set_pager_total ( count ( $r ));
2011-01-04 03:06:36 -05:00
$a -> set_pager_itemspage ( 20 );
}
2010-08-06 00:15:24 -04:00
2012-06-07 11:42:13 -04:00
$r = q ( " SELECT `resource-id`, `id`, `filename`, type, `album`, max(`scale`) AS `scale` FROM `photo`
2011-06-29 01:33:02 -04:00
WHERE `uid` = % d AND `album` != '%s' AND `album` != '%s'
2010-08-06 00:15:24 -04:00
$sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT % d , % d " ,
intval ( $a -> data [ 'user' ][ 'uid' ]),
2011-06-29 01:33:02 -04:00
dbesc ( 'Contact Photos' ),
2010-08-06 00:15:24 -04:00
dbesc ( t ( 'Contact Photos' )),
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2011-12-22 10:33:14 -05:00
$photos = array ();
2010-08-06 00:15:24 -04:00
if ( count ( $r )) {
2012-05-21 19:40:11 -04:00
$twist = 'rotright' ;
2010-08-06 00:15:24 -04:00
foreach ( $r as $rr ) {
2012-05-21 19:40:11 -04:00
if ( $twist == 'rotright' )
$twist = 'rotleft' ;
else
$twist = 'rotright' ;
2012-06-07 11:42:13 -04:00
$ext = $phototypes [ $rr [ 'type' ]];
2011-12-22 10:33:14 -05:00
$photos [] = array (
'id' => $rr [ 'id' ],
2012-05-21 19:40:11 -04:00
'twist' => ' ' . $twist . rand ( 2 , 4 ),
2011-12-22 10:33:14 -05:00
'link' => $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/image/' . $rr [ 'resource-id' ],
'title' => t ( 'View Photo' ),
2012-06-07 11:42:13 -04:00
'src' => $a -> get_baseurl () . '/photo/' . $rr [ 'resource-id' ] . '-' . ((( $rr [ 'scale' ]) == 6 ) ? 4 : $rr [ 'scale' ]) . '.' . $ext ,
2011-12-22 10:33:14 -05:00
'alt' => template_escape ( $rr [ 'filename' ]),
'album' => array (
'link' => $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/album/' . bin2hex ( $rr [ 'album' ]),
'name' => template_escape ( $rr [ 'album' ]),
'alt' => t ( 'View Album' ),
),
);
2010-08-06 00:15:24 -04:00
}
}
2011-12-22 10:33:14 -05:00
$tpl = get_markup_template ( 'photos_recent.tpl' );
$o .= replace_macros ( $tpl , array (
'$title' => t ( 'Recent Photos' ),
'$can_post' => $can_post ,
'$upload' => array ( t ( 'Upload New Photos' ), $a -> get_baseurl () . '/photos/' . $a -> data [ 'user' ][ 'nickname' ] . '/upload' ),
'$photos' => $photos ,
));
2011-01-04 03:06:36 -05:00
$o .= paginate ( $a );
2010-08-06 00:15:24 -04:00
return $o ;
}
2011-01-27 21:45:19 -05:00