2010-08-06 04:15:24 +00:00
< ? php
2013-04-26 03:01:24 +00:00
require_once ( 'include/photo/photo_driver.php' );
2013-01-26 02:13:15 +00:00
require_once ( 'include/photos.php' );
2010-09-14 05:57:31 +00:00
require_once ( 'include/items.php' );
2010-11-16 05:02:59 +00:00
require_once ( 'include/acl_selectors.php' );
2010-11-02 06:42:26 +00:00
require_once ( 'include/bbcode.php' );
2011-07-01 00:35:35 +00:00
require_once ( 'include/security.php' );
2013-01-26 07:32:44 +00:00
require_once ( 'include/Contact.php' );
2010-08-06 04:15:24 +00:00
2012-06-07 15:42:13 +00:00
2010-08-06 04:15:24 +00:00
function photos_init ( & $a ) {
2011-04-22 00:29:47 +00:00
if (( get_config ( 'system' , 'block_public' )) && ( ! local_user ()) && ( ! remote_user ())) {
return ;
}
2013-01-26 11:42:05 +00:00
2010-11-04 02:47:07 +00:00
$o = '' ;
2012-10-24 04:24:23 +00:00
if ( argc () > 1 ) {
$nick = argv ( 1 );
2013-12-13 21:30:33 +00:00
profile_load ( $a , $nick );
2013-01-26 10:24:07 +00:00
$channelx = channelx_by_nick ( $nick );
2010-08-06 04:15:24 +00:00
2013-01-26 10:24:07 +00:00
if ( ! $channelx )
2010-08-06 04:15:24 +00:00
return ;
2014-02-21 01:20:24 +00:00
$a -> data [ 'channel' ] = $channelx ;
2010-08-06 04:15:24 +00:00
2012-12-10 02:07:36 +00:00
$observer = $a -> get_observer ();
2013-01-26 07:32:44 +00:00
$a -> data [ 'observer' ] = $observer ;
2012-12-10 02:07:36 +00:00
2013-01-26 07:32:44 +00:00
$observer_xchan = (( $observer ) ? $observer [ 'xchan_hash' ] : '' );
2012-11-02 21:48:33 +00:00
2013-11-06 02:20:37 +00:00
head_set_icon ( $a -> data [ 'channel' ][ 'xchan_photo_s' ]);
2010-11-04 02:47:07 +00:00
2013-11-14 23:53:31 +00:00
$a -> page [ 'htmlhead' ] .= " <script> var ispublic = ' " . t ( 'everybody' ) . " '; var profile_uid = " . (( $a -> data [ 'channel' ]) ? $a -> data [ 'channel' ][ 'channel_id' ] : 0 ) . " ; </script> " ;
2011-06-02 05:06:53 +00:00
2010-08-06 04:15:24 +00:00
}
2010-12-06 02:08:36 +00:00
2010-09-09 03:14:17 +00:00
return ;
2010-08-06 04:15:24 +00:00
}
2011-01-27 11:55:40 +00:00
function photos_post ( & $a ) {
2011-01-27 11:52:18 +00:00
2012-02-21 22:15:10 +00:00
logger ( 'mod-photos: photos_post: begin' , LOGGER_DEBUG );
2011-01-28 02:45:19 +00:00
2011-10-01 13:20:41 +00:00
logger ( 'mod_photos: REQUEST ' . print_r ( $_REQUEST , true ), LOGGER_DATA );
logger ( 'mod_photos: FILES ' . print_r ( $_FILES , true ), LOGGER_DATA );
2011-01-28 02:45:19 +00:00
2013-04-26 03:01:24 +00:00
$ph = photo_factory ( '' );
$phototypes = $ph -> supportedTypes ();
2012-06-07 15:42:13 +00:00
2010-12-06 02:08:36 +00:00
$can_post = false ;
2012-10-25 05:21:35 +00:00
$page_owner_uid = $a -> data [ 'channel' ][ 'channel_id' ];
2010-12-06 02:08:36 +00:00
2013-02-02 23:08:11 +00:00
if ( perm_is_allowed ( $page_owner_uid , get_observer_hash (), 'post_photos' ))
2010-12-06 02:08:36 +00:00
$can_post = true ;
2010-08-06 04:15:24 +00:00
2010-12-06 02:08:36 +00:00
if ( ! $can_post ) {
2010-10-14 05:01:23 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
2013-01-26 11:42:05 +00:00
if ( is_ajax ())
killme ();
return ;
2010-10-14 05:01:23 +00:00
}
2010-08-09 00:08:39 +00:00
2013-01-26 11:42:05 +00:00
$s = abook_self ( $page_owner_uid );
2010-08-09 00:08:39 +00:00
2013-01-26 11:42:05 +00:00
if ( ! $s ) {
notice ( t ( 'Page owner information could not be retrieved.' ) . EOL );
logger ( 'mod_photos: post: unable to locate contact record for page owner. uid=' . $page_owner_uid );
if ( is_ajax ())
killme ();
return ;
2010-11-02 23:24:23 +00:00
}
2013-01-26 11:42:05 +00:00
$owner_record = $s [ 0 ];
2010-08-09 00:08:39 +00:00
2013-01-26 11:42:05 +00:00
if (( argc () > 3 ) && ( argv ( 2 ) === 'album' )) {
2010-08-09 00:08:39 +00:00
2013-01-26 11:42:05 +00:00
$album = hex2bin ( argv ( 3 ));
2010-08-09 00:08:39 +00:00
2013-01-26 11:42:05 +00:00
if ( $album === t ( 'Profile Photos' )) {
// not allowed
2010-08-09 00:08:39 +00:00
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
}
2013-01-26 11:42:05 +00:00
if ( ! photos_album_exists ( $page_owner_uid , $album )) {
2010-08-09 00:08:39 +00:00
notice ( t ( 'Album not found.' ) . EOL );
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
}
2013-01-26 11:42:05 +00:00
/*
* RENAME photo album
*/
$newalbum = notags ( trim ( $_REQUEST [ 'albumname' ]));
2010-08-09 00:08:39 +00:00
if ( $newalbum != $album ) {
2013-01-26 11:42:05 +00:00
$x = photos_album_rename ( $page_owner_uid , $album , $newalbum );
if ( $x ) {
$newurl = str_replace ( bin2hex ( $album ), bin2hex ( $newalbum ), $_SESSION [ 'photo_return' ]);
goaway ( $a -> get_baseurl () . '/' . $newurl );
}
2010-08-09 00:08:39 +00:00
}
2013-01-26 11:42:05 +00:00
/*
* DELETE photo album and all its photos
*/
2010-12-06 02:08:36 +00:00
2013-01-26 11:42:05 +00:00
if ( $_REQUEST [ 'dropalbum' ] == t ( 'Delete Album' )) {
2010-08-09 00:08:39 +00:00
$res = array ();
2010-12-06 02:08:36 +00:00
// get the list of photos we are about to delete
2013-01-26 11:42:05 +00:00
if ( remote_user () && ( ! local_user ())) {
$str = photos_album_get_db_idstr ( $page_owner_uid , $album , remote_user ());
2010-12-06 02:08:36 +00:00
}
2013-01-26 11:42:05 +00:00
elseif ( local_user ()) {
$str = photos_album_get_db_idstr ( local_user (), $album );
2010-08-09 00:08:39 +00:00
}
else {
2013-01-26 11:42:05 +00:00
$str = null ;
}
if ( ! $str ) {
2010-08-09 00:08:39 +00:00
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
}
2010-12-06 02:08:36 +00:00
2013-01-26 11:42:05 +00:00
$r = q ( " select id, item_restrict from item where resource_id in ( $str ) and resource_type = 'photo' and uid = %d " ,
2010-12-06 02:08:36 +00:00
intval ( $page_owner_uid )
2010-08-09 00:08:39 +00:00
);
2013-01-26 11:42:05 +00:00
if ( $r ) {
foreach ( $r as $i ) {
drop_item ( $i [ 'id' ], false );
if ( ! $item_restrict )
proc_run ( 'php' , 'include/notifier.php' , 'drop' , $i [ 'id' ]);
}
}
2010-12-06 02:08:36 +00:00
2013-01-26 11:42:05 +00:00
// remove the associated photos in case they weren't attached to an item
2010-12-06 02:08:36 +00:00
2013-01-26 11:42:05 +00:00
q ( " delete from photo where resource_id in ( $str ) and uid = %d " ,
2010-12-06 02:08:36 +00:00
intval ( $page_owner_uid )
2010-08-09 00:08:39 +00:00
);
}
2013-01-26 11:42:05 +00:00
2012-10-25 05:21:35 +00:00
goaway ( $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ]);
2010-08-09 00:08:39 +00:00
}
2013-01-26 11:42:05 +00:00
if (( argc () > 2 ) && ( x ( $_REQUEST , 'delete' )) && ( $_REQUEST [ 'delete' ] === t ( 'Delete Photo' ))) {
2013-12-23 01:44:14 +00:00
2010-12-06 02:08:36 +00:00
// same as above but remove single photo
2013-12-23 01:44:14 +00:00
$ob_hash = get_observer_hash ();
if ( ! $ob_hash )
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
$r = q ( " SELECT `id`, `resource_id` FROM `photo` WHERE ( xchan = '%s' or `uid` = %d ) AND `resource_id` = '%s' LIMIT 1 " ,
dbesc ( $ob_hash ),
intval ( local_user ()),
dbesc ( $a -> argv [ 2 ])
);
if ( $r ) {
2012-10-02 01:02:11 +00:00
q ( " DELETE FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s' " ,
2010-12-06 02:08:36 +00:00
intval ( $page_owner_uid ),
2012-10-02 01:02:11 +00:00
dbesc ( $r [ 0 ][ 'resource_id' ])
2010-08-09 00:08:39 +00:00
);
2013-08-28 01:40:33 +00:00
$i = q ( " SELECT * FROM `item` WHERE `resource_id` = '%s' AND resource_type = 'photo' and `uid` = %d LIMIT 1 " ,
2012-10-02 01:02:11 +00:00
dbesc ( $r [ 0 ][ 'resource_id' ]),
2010-12-06 02:08:36 +00:00
intval ( $page_owner_uid )
2010-08-09 00:08:39 +00:00
);
if ( count ( $i )) {
2013-12-23 01:30:49 +00:00
q ( " UPDATE `item` SET item_restrict = (item_restrict | %d), `edited` = '%s', `changed` = '%s' WHERE `parent_mid` = '%s' AND `uid` = %d " ,
2013-08-28 01:40:33 +00:00
intval ( ITEM_DELETED ),
2010-08-23 03:57:20 +00:00
dbesc ( datetime_convert ()),
dbesc ( datetime_convert ()),
2013-03-22 01:25:41 +00:00
dbesc ( $i [ 0 ][ 'mid' ]),
2010-12-06 02:08:36 +00:00
intval ( $page_owner_uid )
2010-08-09 00:08:39 +00:00
);
$url = $a -> get_baseurl ();
$drop_id = intval ( $i [ 0 ][ 'id' ]);
if ( $i [ 0 ][ 'visible' ])
2011-02-23 23:16:12 +00:00
proc_run ( 'php' , " include/notifier.php " , " drop " , " $drop_id " );
2010-08-09 00:08:39 +00:00
}
}
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
}
2011-02-03 23:13:38 +00:00
if (( $a -> argc > 2 ) && (( x ( $_POST , 'desc' ) !== false ) || ( x ( $_POST , 'newtag' ) !== false )) || ( x ( $_POST , 'albname' ) !== false )) {
2010-08-09 00:08:39 +00:00
2012-05-23 08:01:04 +00:00
2011-02-03 23:13:38 +00: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 05:10:16 +00: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 02:08:36 +00:00
$resource_id = $a -> argv [ 2 ];
2010-08-08 08:58:26 +00:00
2011-02-03 23:13:38 +00:00
if ( ! strlen ( $albname ))
$albname = datetime_convert ( 'UTC' , date_default_timezone_get (), 'now' , 'Y' );
2012-05-23 08:01:04 +00:00
2012-06-21 02:36:10 +00:00
if (( x ( $_POST , 'rotate' ) !== false ) &&
( ( intval ( $_POST [ 'rotate' ]) == 1 ) || ( intval ( $_POST [ 'rotate' ]) == 2 ) )) {
2012-05-23 08:01:04 +00:00
logger ( 'rotate' );
2012-10-02 01:02:11 +00:00
$r = q ( " select * from photo where `resource_id` = '%s' and uid = %d and scale = 0 limit 1 " ,
2012-05-23 08:01:04 +00:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
);
if ( count ( $r )) {
2013-04-26 03:01:24 +00:00
$ph = photo_factory ( $r [ 0 ][ 'data' ], $r [ 0 ][ 'type' ]);
2012-05-23 08:01:04 +00:00
if ( $ph -> is_valid ()) {
2012-06-21 02:36:10 +00:00
$rotate_deg = ( ( intval ( $_POST [ 'rotate' ]) == 1 ) ? 270 : 90 );
$ph -> rotate ( $rotate_deg );
2012-05-23 08:01:04 +00:00
$width = $ph -> getWidth ();
$height = $ph -> getHeight ();
2012-10-02 01:02:11 +00:00
$x = q ( " update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 0 limit 1 " ,
2012-05-23 08:01:04 +00:00
dbesc ( $ph -> imageString ()),
intval ( $height ),
intval ( $width ),
2012-06-21 02:36:10 +00:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 08:01:04 +00:00
);
if ( $width > 640 || $height > 640 ) {
$ph -> scaleImage ( 640 );
$width = $ph -> getWidth ();
$height = $ph -> getHeight ();
2011-02-03 23:13:38 +00:00
2012-10-02 01:02:11 +00:00
$x = q ( " update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 1 limit 1 " ,
2012-05-23 08:01:04 +00:00
dbesc ( $ph -> imageString ()),
intval ( $height ),
intval ( $width ),
2012-06-21 02:36:10 +00:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 08:01:04 +00:00
);
}
if ( $width > 320 || $height > 320 ) {
$ph -> scaleImage ( 320 );
$width = $ph -> getWidth ();
$height = $ph -> getHeight ();
2012-10-02 01:02:11 +00:00
$x = q ( " update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 2 limit 1 " ,
2012-05-23 08:01:04 +00:00
dbesc ( $ph -> imageString ()),
intval ( $height ),
intval ( $width ),
2012-06-21 02:36:10 +00:00
dbesc ( $resource_id ),
intval ( $page_owner_uid )
2012-05-23 08:01:04 +00:00
);
}
}
}
}
2011-02-03 23:13:38 +00:00
2013-07-19 03:55:25 +00:00
$p = q ( " SELECT * FROM `photo` WHERE `resource_id` = '%s' AND `uid` = %d and ( photo_flags = %d or photo_flags = %d ) ORDER BY `scale` DESC " ,
2010-08-09 00:08:39 +00:00
dbesc ( $resource_id ),
2013-07-19 03:55:25 +00:00
intval ( $page_owner_uid ),
intval ( PHOTO_NORMAL ),
intval ( PHOTO_PROFILE )
2010-08-08 08:58:26 +00:00
);
2011-03-10 05:10:16 +00:00
if ( count ( $p )) {
2012-06-07 15:42:13 +00:00
$ext = $phototypes [ $p [ 0 ][ 'type' ]];
2014-02-12 02:45:50 +00:00
2013-12-23 02:37:39 +00:00
$r = q ( " UPDATE `photo` SET `description` = '%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 00:08:39 +00:00
dbesc ( $desc ),
2011-02-03 23:13:38 +00:00
dbesc ( $albname ),
2011-03-10 05:10:16 +00:00
dbesc ( $str_contact_allow ),
dbesc ( $str_group_allow ),
dbesc ( $str_contact_deny ),
dbesc ( $str_group_deny ),
2010-08-09 00:08:39 +00:00
dbesc ( $resource_id ),
2010-12-06 02:08:36 +00:00
intval ( $page_owner_uid )
2010-08-09 00:08:39 +00:00
);
}
2011-02-08 05:16:39 +00:00
2013-09-18 00:38:43 +00:00
$item_private = (( $str_contact_allow || $str_group_allow || $str_contact_deny || $str_group_deny ) ? true : false );
2011-02-08 05:16:39 +00:00
/* Don't make the item visible if the only change was the album name */
$visibility = 0 ;
2013-12-23 02:37:39 +00:00
if ( $p [ 0 ][ 'description' ] !== $desc || strlen ( $rawtags ))
2011-02-08 05:16:39 +00:00
$visibility = 1 ;
2012-10-25 07:10:53 +00:00
2010-08-09 00:08:39 +00:00
if ( ! $item_id ) {
2013-02-02 09:58:11 +00:00
$item_id = photos_create_item ( $a -> data [ 'channel' ], get_observer_hash (), $p [ 0 ], $visibility );
2010-08-09 00:08:39 +00:00
}
2010-11-02 06:42:26 +00:00
if ( $item_id ) {
$r = q ( " SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $item_id ),
2010-12-06 02:08:36 +00:00
intval ( $page_owner_uid )
2010-11-02 06:42:26 +00:00
);
}
2013-09-18 00:38:43 +00:00
if ( $r ) {
2010-11-02 06:42:26 +00:00
$old_tag = $r [ 0 ][ 'tag' ];
$old_inform = $r [ 0 ][ 'inform' ];
}
2010-08-08 08:58:26 +00:00
2013-09-18 00:38:43 +00:00
// make sure the linked item has the same permissions as the photo regardless of any other changes
$x = q ( " update item set allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', item_private = %d
where id = % d limit 1 " ,
dbesc ( $str_contact_allow ),
dbesc ( $str_group_allow ),
dbesc ( $str_contact_deny ),
dbesc ( $str_group_deny ),
intval ( $item_private ),
intval ( $item_id )
);
2010-11-02 06:42:26 +00:00
if ( strlen ( $rawtags )) {
$str_tags = '' ;
$inform = '' ;
2014-01-20 07:37:46 +00:00
// if the new tag doesn't have a namespace specifier (@foo or #foo) give it a mention
2010-11-02 06:42:26 +00:00
$x = substr ( $rawtags , 0 , 1 );
if ( $x !== '@' && $x !== '#' )
2014-01-20 07:37:46 +00:00
$rawtags = '@' . $rawtags ;
2010-11-02 06:42:26 +00:00
2010-11-03 23:48:21 +00:00
$taginfo = array ();
2010-11-02 06:42:26 +00:00
$tags = get_tags ( $rawtags );
if ( count ( $tags )) {
foreach ( $tags as $tag ) {
2014-01-20 07:37:46 +00:00
// If we already tagged 'Robert Johnson', don't try and tag 'Robert'.
// Robert Johnson should be first in the $tags array
$fullnametagged = false ;
for ( $x = 0 ; $x < count ( $tagged ); $x ++ ) {
if ( stristr ( $tagged [ $x ], $tag . ' ' )) {
$fullnametagged = true ;
break ;
2010-11-02 06:42:26 +00:00
}
2014-01-20 07:37:46 +00:00
}
if ( $fullnametagged )
continue ;
require_once ( 'mod/item.php' );
$body = $access_tag = '' ;
$success = handle_tag ( $a , $body , $access_tag , $str_tags , ( local_user ()) ? local_user () : $a -> profile [ 'profile_uid' ] , $tag );
logger ( 'handle_tag: ' . print_r ( $success , tue ), LOGGER_DEBUG );
if ( $access_tag ) {
logger ( 'access_tag: ' . $tag . ' ' . print_r ( $access_tag , true ), LOGGER_DEBUG );
if ( strpos ( $access_tag , 'cid:' ) === 0 ) {
$str_contact_allow .= '<' . substr ( $access_tag , 4 ) . '>' ;
$access_tag = '' ;
2010-11-02 06:42:26 +00:00
}
2014-01-20 07:37:46 +00:00
elseif ( strpos ( $access_tag , 'gid:' ) === 0 ) {
$str_group_allow .= '<' . substr ( $access_tag , 4 ) . '>' ;
$access_tag = '' ;
2010-11-02 06:42:26 +00:00
}
}
2014-01-20 07:37:46 +00:00
if ( $success [ 'replaced' ]) {
$tagged [] = $tag ;
$post_tags [] = array (
'uid' => $a -> profile [ 'profile_uid' ],
'type' => $success [ 'termtype' ],
'otype' => TERM_OBJ_POST ,
'term' => $success [ 'term' ],
'url' => $success [ 'url' ]
);
}
2010-11-02 06:42:26 +00:00
}
}
2010-11-05 03:47:44 +00:00
2014-01-20 07:37:46 +00:00
$r = q ( " select * from item where id = %d and uid = %d limit 1 " ,
intval ( $item_id ),
intval ( $page_owner_uid )
);
2010-11-03 23:48:21 +00:00
2014-01-20 07:37:46 +00:00
if ( $r ) {
$datarray = $r [ 0 ];
$datarray [ 'term' ] = $post_tags ;
item_store_update ( $datarray , $execflag );
2010-11-05 03:47:44 +00:00
}
2010-11-03 23:48:21 +00:00
2010-11-02 06:42:26 +00:00
}
2014-01-20 07:37:46 +00:00
2010-08-08 08:58:26 +00:00
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
return ; // NOTREACHED
2014-01-20 07:37:46 +00:00
2010-08-08 08:58:26 +00:00
}
2011-01-28 02:45:19 +00:00
/**
* default post action - upload a photo
*/
2011-01-27 11:46:09 +00:00
2013-02-06 00:54:09 +00:00
$_REQUEST [ 'source' ] = 'photos' ;
2012-06-25 08:37:44 +00:00
2013-02-02 09:58:11 +00:00
$r = photo_upload ( $a -> channel , $a -> get_observer (), $_REQUEST );
if ( ! $r [ 'success' ]) {
notice ( $r [ 'message' ] . EOL );
}
2010-08-06 04:15:24 +00:00
2011-01-28 02:45:19 +00:00
goaway ( $a -> get_baseurl () . '/' . $_SESSION [ 'photo_return' ]);
2013-02-02 09:58:11 +00:00
2010-08-06 04:15:24 +00:00
}
function photos_content ( & $a ) {
// URLs:
// photos/name
// photos/name/upload
2012-01-16 01:48:42 +00:00
// photos/name/upload/xxxxx (xxxxx is album name)
2010-08-06 04:15:24 +00:00
// photos/name/album/xxxxx
// photos/name/album/xxxxx/edit
// photos/name/image/xxxxx
// photos/name/image/xxxxx/edit
2010-08-09 00:08:39 +00:00
2010-08-06 04:15:24 +00:00
2011-04-22 00:29:47 +00:00
if (( get_config ( 'system' , 'block_public' )) && ( ! local_user ()) && ( ! remote_user ())) {
notice ( t ( 'Public access denied.' ) . EOL );
return ;
}
2012-06-07 15:42:13 +00:00
2011-04-13 00:58:16 +00:00
require_once ( 'include/bbcode.php' );
require_once ( 'include/security.php' );
require_once ( 'include/conversation.php' );
2012-10-25 05:21:35 +00:00
if ( ! x ( $a -> data , 'channel' )) {
2010-08-06 04:15:24 +00:00
notice ( t ( 'No photos selected' ) . EOL );
return ;
}
2013-04-26 03:01:24 +00:00
$ph = photo_factory ( '' );
$phototypes = $ph -> supportedTypes ();
2012-06-07 15:42:13 +00:00
2010-08-06 04:15:24 +00:00
$_SESSION [ 'photo_return' ] = $a -> cmd ;
//
// Parse arguments
//
2013-12-20 01:36:31 +00:00
$can_comment = perm_is_allowed ( $a -> profile [ 'profile_uid' ], get_observer_hash (), 'post_comments' );
2012-10-25 05:21:35 +00:00
if ( argc () > 3 ) {
$datatype = argv ( 2 );
$datum = argv ( 3 );
2010-08-06 04:15:24 +00:00
}
2012-10-25 05:21:35 +00:00
elseif (( argc () > 2 ) && ( argv ( 2 ) === 'upload' ))
2010-08-06 04:15:24 +00:00
$datatype = 'upload' ;
else
$datatype = 'summary' ;
2012-10-25 05:21:35 +00:00
if ( argc () > 4 )
$cmd = argv ( 4 );
2010-08-06 04:15:24 +00:00
else
$cmd = 'view' ;
//
// Setup permissions structures
//
2010-12-06 02:08:36 +00:00
$can_post = false ;
$visitor = 0 ;
2013-10-24 23:47:34 +00:00
2010-08-06 04:15:24 +00:00
2012-10-25 05:21:35 +00:00
$owner_uid = $a -> data [ 'channel' ][ 'channel_id' ];
2013-01-23 01:48:42 +00:00
$owner_aid = $a -> data [ 'channel' ][ 'channel_account_id' ];
2010-09-28 02:48:45 +00:00
2013-10-24 23:47:34 +00:00
$observer = $a -> get_observer ();
2010-12-08 01:16:05 +00:00
2013-10-24 23:47:34 +00:00
$can_post = perm_is_allowed ( $owner_uid , $observer [ 'xchan_hash' ], 'post_photos' );
$can_view = perm_is_allowed ( $owner_uid , $observer [ 'xchan_hash' ], 'view_photos' );
2010-08-06 04:15:24 +00:00
2010-09-28 02:48:45 +00:00
2013-10-24 23:47:34 +00:00
if ( ! $can_view ) {
2011-05-28 07:42:01 +00:00
notice ( t ( 'Access to this item is restricted.' ) . EOL );
return ;
}
2013-10-24 23:47:34 +00:00
$sql_extra = permissions_sql ( $owner_uid );
2010-08-06 04:15:24 +00:00
2011-06-23 09:30:17 +00:00
$o = " " ;
2014-02-12 02:45:50 +00:00
$o .= " <script> var profile_uid = " . $a -> profile [ 'profile_uid' ]
. " ; var netargs = '?f='; var profile_page = " . $a -> pager [ 'page' ] . " ; </script> \r \n " ;
2011-06-23 09:30:17 +00:00
// tabs
2013-10-24 23:47:34 +00:00
2011-06-23 09:30:17 +00:00
$_is_owner = ( local_user () && ( local_user () == $owner_uid ));
2012-10-25 05:21:35 +00:00
$o .= profile_tabs ( $a , $_is_owner , $a -> data [ 'channel' ][ 'channel_address' ]);
2011-06-23 09:30:17 +00:00
2010-08-06 04:15:24 +00:00
//
// dispatch request
//
2013-07-02 23:37:33 +00:00
/**
* Display upload form
*/
2010-08-06 04:15:24 +00:00
2010-09-27 00:24:20 +00:00
if ( $datatype === 'upload' ) {
2010-12-06 02:08:36 +00:00
if ( ! ( $can_post )) {
2010-08-06 04:15:24 +00:00
notice ( t ( 'Permission denied.' ));
return ;
}
2012-01-16 01:48:42 +00:00
2014-01-06 10:54:08 +00:00
if ( array_key_exists ( 'albums' , $a -> data ))
$albums = get_app () -> data [ 'albums' ];
else
$albums = photos_albums_list ( $a -> data [ 'channel' ], $a -> data [ 'observer' ]);
2012-01-16 01:48:42 +00:00
$selname = (( $datum ) ? hex2bin ( $datum ) : '' );
2010-08-06 04:15:24 +00:00
$albumselect = '<select id="photos-upload-album-select" name="album" size="4">' ;
2012-01-16 01:48:42 +00:00
$albumselect .= '<option value="" ' . (( ! $selname ) ? ' selected="selected" ' : '' ) . '> </option>' ;
2014-06-18 23:26:27 +00:00
if ( count ( $albums [ 'albums' ])) {
foreach ( $albums [ 'albums' ] as $album ) {
2014-03-24 00:07:21 +00:00
if ( ! $album [ 'text' ])
2010-08-06 04:15:24 +00:00
continue ;
2013-06-06 06:07:52 +00:00
$selected = (( $selname === $album [ 'text' ]) ? ' selected="selected" ' : '' );
$albumselect .= '<option value="' . $album [ 'text' ] . '"' . $selected . '>' . $album [ 'text' ] . '</option>' ;
2010-08-06 04:15:24 +00:00
}
}
2010-10-18 07:43:49 +00:00
2010-08-06 04:15:24 +00:00
$albumselect .= '</select>' ;
2011-01-28 02:45:19 +00:00
$uploader = '' ;
2012-10-25 05:21:35 +00:00
$ret = array ( 'post_url' => $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ],
2011-01-28 02:45:19 +00:00
'addon_text' => $uploader ,
'default_upload' => true );
call_hooks ( 'photo_upload_form' , $ret );
2012-07-24 03:49:56 +00:00
$default_upload = ' < input id = " photos-upload-choose " type = " file " name = " userfile " /> < div class = " photos-upload-submit-wrapper " >
2011-01-28 02:45:19 +00:00
< input type = " submit " name = " submit " value = " ' . t('Submit') . ' " id = " photos-upload-submit " /> </ div > ' ;
2013-07-02 23:37:33 +00:00
/* Show space usage */
2011-01-28 02:45:19 +00:00
2014-01-07 22:10:28 +00:00
$r = q ( " select sum(size) as total from photo where aid = %d and scale = 0 " ,
intval ( $a -> data [ 'channel' ][ 'channel_account_id' ])
2012-06-25 08:37:44 +00:00
);
2012-10-25 05:21:35 +00:00
$limit = service_class_fetch ( $a -> data [ 'channel' ][ 'channel_id' ], 'photo_upload_limit' );
2012-06-25 08:37:44 +00:00
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 );
}
2013-11-29 22:08:37 +00:00
if ( $_is_owner ) {
$channel = $a -> get_channel ();
$channel_acl = array (
'allow_cid' => $channel [ 'channel_allow_cid' ],
'allow_gid' => $channel [ 'channel_allow_gid' ],
'deny_cid' => $channel [ 'channel_deny_cid' ],
'deny_gid' => $channel [ 'channel_deny_gid' ]
);
}
2013-07-02 23:37:33 +00:00
$albumselect_e = $albumselect ;
2014-06-15 03:16:40 +00:00
$aclselect_e = (( $_is_owner ) ? populate_acl ( $channel_acl , false ) : '' );
2013-01-06 21:42:51 +00:00
2011-05-11 11:37:13 +00:00
$tpl = get_markup_template ( 'photos_upload.tpl' );
2010-08-06 04:15:24 +00:00
$o .= replace_macros ( $tpl , array (
'$pagename' => t ( 'Upload Photos' ),
'$sessid' => session_id (),
2012-06-25 08:37:44 +00:00
'$usage' => $usage_message ,
2012-10-25 05:21:35 +00:00
'$nickname' => $a -> data [ 'channel' ][ 'channel_address' ],
2010-08-06 04:15:24 +00:00
'$newalbum' => t ( 'New album name: ' ),
'$existalbumtext' => t ( 'or existing album name: ' ),
2011-10-01 13:20:41 +00:00
'$nosharetext' => t ( 'Do not show a status post for this upload' ),
2013-01-06 21:42:51 +00:00
'$albumselect' => $albumselect_e ,
2010-08-07 13:20:27 +00:00
'$permissions' => t ( 'Permissions' ),
2013-01-06 21:42:51 +00:00
'$aclselect' => $aclselect_e ,
2011-01-28 02:45:19 +00:00
'$uploader' => $ret [ 'addon_text' ],
'$default' => (( $ret [ 'default_upload' ]) ? $default_upload : '' ),
'$uploadurl' => $ret [ 'post_url' ]
2010-08-06 04:15:24 +00:00
));
return $o ;
}
2013-07-02 23:37:33 +00:00
/*
* Display a single photo album
*/
2010-09-27 00:24:20 +00:00
if ( $datatype === 'album' ) {
2010-08-06 04:15:24 +00:00
2014-08-15 06:05:19 +00:00
if (( strlen ( $datum ) & 1 ) || ( ! ctype_xdigit ( $datum ))) {
notice ( t ( 'Album name could not be decoded' ) . EOL );
2014-08-15 13:05:52 +00:00
logger ( 'mod_photos: illegal album encoding: ' . $datum );
2014-08-15 06:05:19 +00:00
$datum = '' ;
}
2010-08-06 04:15:24 +00:00
$album = hex2bin ( $datum );
2012-10-02 01:02:11 +00:00
$r = q ( " SELECT `resource_id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s'
2013-07-19 03:55:25 +00:00
AND `scale` <= 4 and ( photo_flags = % d or photo_flags = % d ) $sql_extra GROUP BY `resource_id` " ,
2010-12-06 02:08:36 +00:00
intval ( $owner_uid ),
2013-07-19 03:55:25 +00:00
dbesc ( $album ),
intval ( PHOTO_NORMAL ),
intval ( PHOTO_PROFILE )
2010-08-06 04:15:24 +00:00
);
2011-01-04 08:06:36 +00:00
if ( count ( $r )) {
2010-08-06 04:15:24 +00:00
$a -> set_pager_total ( count ( $r ));
2014-09-11 11:07:08 +00:00
$a -> set_pager_itemspage ( 60 );
2011-01-04 08:06:36 +00:00
}
2010-08-06 04:15:24 +00:00
2012-09-10 04:17:06 +00:00
if ( $_GET [ 'order' ] === 'posted' )
$order = 'ASC' ;
else
$order = 'DESC' ;
2013-12-23 02:37:39 +00:00
$r = q ( " SELECT `resource_id`, `id`, `filename`, type, max(`scale`) AS `scale`, `description` FROM `photo` WHERE `uid` = %d AND `album` = '%s'
2013-07-19 03:55:25 +00:00
AND `scale` <= 4 and ( photo_flags = % d or photo_flags = % d ) $sql_extra GROUP BY `resource_id` ORDER BY `created` $order LIMIT % d , % d " ,
2010-12-06 02:08:36 +00:00
intval ( $owner_uid ),
2010-08-06 04:15:24 +00:00
dbesc ( $album ),
2013-07-19 03:55:25 +00:00
intvaL ( PHOTO_NORMAL ),
intval ( PHOTO_PROFILE ),
2010-08-06 04:15:24 +00:00
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2010-08-09 00:08:39 +00:00
2010-09-27 00:24:20 +00:00
if ( $cmd === 'edit' ) {
2014-10-03 17:15:37 +00:00
if (( $album !== t ( 'Profile Photos' )) && ( $album !== 'Profile Photos' ) && ( $album !== 'Contact Photos' ) && ( $album !== t ( 'Contact Photos' ))) {
2010-12-06 02:08:36 +00:00
if ( $can_post ) {
2013-01-07 02:34:54 +00:00
if ( $a -> get_template_engine () === 'internal' ) {
2013-01-06 21:42:51 +00:00
$album_e = template_escape ( $album );
}
else {
$album_e = $album ;
}
2011-05-11 11:37:13 +00:00
$edit_tpl = get_markup_template ( 'album_edit.tpl' );
2010-08-09 00:08:39 +00:00
$o .= replace_macros ( $edit_tpl , array (
'$nametext' => t ( 'New album name: ' ),
2012-10-25 05:21:35 +00:00
'$nickname' => $a -> data [ 'channel' ][ 'channel_address' ],
2013-01-06 21:42:51 +00:00
'$album' => $album_e ,
2010-08-09 00:08:39 +00:00
'$hexalbum' => bin2hex ( $album ),
'$submit' => t ( 'Submit' ),
'$dropsubmit' => t ( 'Delete Album' )
));
}
}
}
else {
2014-10-03 17:15:37 +00:00
if (( $album !== t ( 'Profile Photos' )) && ( $album !== 'Profile Photos' ) && ( $album !== 'Contact Photos' ) && ( $album !== t ( 'Contact Photos' ))) {
2010-12-06 02:08:36 +00:00
if ( $can_post ) {
2014-10-02 19:04:50 +00:00
$edit = array ( t ( 'Edit Album' ), $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/album/' . bin2hex ( $album ) . '/edit' );
2010-08-09 00:08:39 +00:00
}
}
}
2012-01-16 01:48:42 +00:00
2012-09-10 04:17:06 +00:00
if ( $_GET [ 'order' ] === 'posted' )
2014-10-02 19:04:50 +00:00
$order = array ( t ( 'Show Newest First' ), $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/album/' . bin2hex ( $album ));
2012-09-10 04:17:06 +00:00
else
2014-10-02 19:04:50 +00:00
$order = array ( t ( 'Show Oldest First' ), $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/album/' . bin2hex ( $album ) . '?f=&order=posted' );
2012-09-10 04:17:06 +00:00
2014-10-02 19:04:50 +00:00
$photos = array ();
2014-09-06 07:37:15 +00:00
if ( count ( $r )) {
2012-05-21 23:40:11 +00:00
$twist = 'rotright' ;
2010-08-06 04:15:24 +00:00
foreach ( $r as $rr ) {
2013-07-02 23:37:33 +00:00
2012-05-21 23:40:11 +00:00
if ( $twist == 'rotright' )
$twist = 'rotleft' ;
else
$twist = 'rotright' ;
2012-06-07 15:42:13 +00:00
$ext = $phototypes [ $rr [ 'type' ]];
2012-05-21 23:40:11 +00:00
2013-12-26 21:08:16 +00:00
$imgalt_e = $rr [ 'filename' ];
$desc_e = $rr [ 'description' ];
2014-10-02 19:04:50 +00:00
$imagelink = ( $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/image/' . $rr [ 'resource_id' ]
. (( $_GET [ 'order' ] === 'posted' ) ? '?f=&order=posted' : '' ));
$rel = ( " photo " );
$photos [] = array (
'id' => $rr [ 'id' ],
'twist' => ' ' . $twist . rand ( 2 , 4 ),
'link' => $imagelink ,
'rel' => $rel ,
'title' => t ( 'View Photo' ),
'src' => $a -> get_baseurl () . '/photo/' . $rr [ 'resource_id' ] . '-' . $rr [ 'scale' ] . '.' . $ext ,
'alt' => $imgalt_e ,
'desc' => $desc_e ,
'ext' => $ext ,
'hash' => $rr [ 'resource_id' ],
);
2014-09-06 07:37:15 +00:00
}
}
2014-10-02 19:04:50 +00:00
2014-09-06 07:37:15 +00:00
if ( $_REQUEST [ 'aj' ]) {
2014-10-02 19:04:50 +00:00
if ( $photos ) {
$o = replace_macros ( get_markup_template ( 'photosajax.tpl' ), array (
'$photos' => $photos ,
));
}
else {
$o = '<div id="content-complete"></div>' ;
2014-09-11 10:42:16 +00:00
}
2014-10-02 19:04:50 +00:00
echo $o ;
killme ();
}
else {
$o .= " <script> var page_query = ' " . $_GET [ 'q' ] . " '; var extra_args = ' " . extra_query_args () . " ' ; </script> " ;
$tpl = get_markup_template ( 'photo_album.tpl' );
$o .= replace_macros ( $tpl , array (
'$photos' => $photos ,
'$album' => $album ,
'$can_post' => $can_post ,
'$upload' => array ( t ( 'Upload' ), $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/upload/' . bin2hex ( $album )),
'$order' => $order ,
'$edit' => $edit
));
}
if (( ! $photos ) && ( $_REQUEST [ 'aj' ])) {
$o .= '<div id="content-complete"></div>' ;
echo $o ;
2014-09-06 07:37:15 +00:00
killme ();
2010-08-06 04:15:24 +00:00
}
2014-09-06 07:37:15 +00:00
// $o .= paginate($a);
2011-01-04 08:06:36 +00:00
2010-08-06 04:15:24 +00:00
return $o ;
}
2013-07-02 23:37:33 +00:00
/**
* Display one photo
*/
2010-08-06 04:15:24 +00:00
2010-09-27 00:24:20 +00:00
if ( $datatype === 'image' ) {
2010-08-06 04:15:24 +00:00
2010-08-07 13:20:27 +00:00
// fetch image, item containing image, then comments
2010-08-06 13:30:25 +00:00
2013-12-23 02:37:39 +00:00
$ph = q ( " SELECT aid,uid,xchan,resource_id,created,edited,title,`description`,album,filename,`type`,height,width,`size`,scale,profile,photo_flags,allow_cid,allow_gid,deny_cid,deny_gid FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s'
2013-07-19 03:55:25 +00:00
and ( photo_flags = % d or photo_flags = % d ) $sql_extra ORDER BY `scale` ASC " ,
2010-12-06 02:08:36 +00:00
intval ( $owner_uid ),
2013-07-19 03:55:25 +00:00
dbesc ( $datum ),
intval ( PHOTO_NORMAL ),
intval ( PHOTO_PROFILE )
2010-08-06 04:15:24 +00:00
);
2013-07-02 23:37:33 +00:00
if ( ! $ph ) {
/* Check again - this time without specifying permissions */
2014-02-04 04:44:42 +00:00
$ph = q ( " SELECT id FROM photo WHERE uid = %d AND resource_id = '%s'
2013-07-19 03:55:25 +00:00
and ( photo_flags = % d or photo_flags = % d )
2011-09-23 03:03:09 +00:00
LIMIT 1 " ,
intval ( $owner_uid ),
2013-07-19 03:55:25 +00:00
dbesc ( $datum ),
intval ( PHOTO_NORMAL ),
intval ( PHOTO_PROFILE )
2011-09-23 03:03:09 +00:00
);
2013-07-02 23:37:33 +00:00
if ( $ph )
2013-08-28 04:06:11 +00:00
notice ( t ( 'Permission denied. Access to this item may be restricted.' ) . EOL );
2011-09-23 03:03:09 +00:00
else
notice ( t ( 'Photo not available' ) . EOL );
2010-08-06 04:15:24 +00:00
return ;
}
2014-01-28 02:06:09 +00:00
2011-03-12 04:06:13 +00:00
$prevlink = '' ;
$nextlink = '' ;
2012-09-10 04:17:06 +00:00
if ( $_GET [ 'order' ] === 'posted' )
$order = 'ASC' ;
else
$order = 'DESC' ;
2012-10-02 01:02:11 +00:00
$prvnxt = q ( " SELECT `resource_id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `scale` = 0
2013-07-19 03:55:25 +00:00
and ( photo_flags = % d or photo_flags = % d ) $sql_extra ORDER BY `created` $order " ,
2011-03-12 04:06:13 +00:00
dbesc ( $ph [ 0 ][ 'album' ]),
2013-07-19 03:55:25 +00:00
intval ( $owner_uid ),
intval ( PHOTO_NORMAL ),
intval ( PHOTO_PROFILE )
2011-03-12 04:06:13 +00:00
);
if ( count ( $prvnxt )) {
for ( $z = 0 ; $z < count ( $prvnxt ); $z ++ ) {
2012-10-02 01:02:11 +00:00
if ( $prvnxt [ $z ][ 'resource_id' ] == $ph [ 0 ][ 'resource_id' ]) {
2011-03-12 04:06:13 +00:00
$prv = $z - 1 ;
$nxt = $z + 1 ;
if ( $prv < 0 )
$prv = count ( $prvnxt ) - 1 ;
if ( $nxt >= count ( $prvnxt ))
$nxt = 0 ;
break ;
}
}
2013-07-02 23:37:33 +00:00
$prevlink = $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/image/' . $prvnxt [ $prv ][ 'resource_id' ] . (( $_GET [ 'order' ] === 'posted' ) ? '?f=&order=posted' : '' );
$nextlink = $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/image/' . $prvnxt [ $nxt ][ 'resource_id' ] . (( $_GET [ 'order' ] === 'posted' ) ? '?f=&order=posted' : '' );
2011-03-12 04:06:13 +00:00
}
2010-08-06 13:30:25 +00:00
if ( count ( $ph ) == 1 )
$hires = $lores = $ph [ 0 ];
if ( count ( $ph ) > 1 ) {
2010-08-07 00:16:52 +00:00
if ( $ph [ 1 ][ 'scale' ] == 2 ) {
// original is 640 or less, we can display it directly
$hires = $lores = $ph [ 0 ];
}
else {
2010-08-06 13:30:25 +00:00
$hires = $ph [ 0 ];
$lores = $ph [ 1 ];
2010-08-07 00:16:52 +00:00
}
2010-08-06 04:15:24 +00:00
}
2012-10-25 05:21:35 +00:00
$album_link = $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/album/' . bin2hex ( $ph [ 0 ][ 'album' ]);
2011-05-05 08:53:03 +00:00
$tools = Null ;
$lock = Null ;
2010-08-07 00:16:52 +00:00
2010-12-06 02:08:36 +00:00
if ( $can_post && ( $ph [ 0 ][ 'uid' ] == $owner_uid )) {
2011-05-05 08:53:03 +00:00
$tools = array (
2012-10-02 01:02:11 +00:00
'profile' => array ( $a -> get_baseurl () . '/profile_photo/use/' . $ph [ 0 ][ 'resource_id' ], t ( 'Use as profile photo' )),
2011-05-05 08:53:03 +00:00
);
2011-02-03 16:24:58 +00:00
// lock
2011-05-05 08:53:03 +00:00
$lock = ( ( ( $ph [ 0 ][ 'uid' ] == local_user ()) && ( strlen ( $ph [ 0 ][ 'allow_cid' ]) || strlen ( $ph [ 0 ][ 'allow_gid' ])
2011-02-03 16:24:58 +00:00
|| strlen ( $ph [ 0 ][ 'deny_cid' ]) || strlen ( $ph [ 0 ][ 'deny_gid' ])) )
2011-05-05 08:53:03 +00:00
? t ( 'Private Message' )
: Null );
2011-02-03 16:24:58 +00:00
2011-05-05 08:53:03 +00:00
2010-08-08 08:58:26 +00:00
}
2013-10-24 23:47:34 +00:00
$a -> page [ 'htmlhead' ] .= '<script>$(document).keydown(function(event) {' . " \n " ;
if ( $prevlink )
$a -> page [ 'htmlhead' ] .= 'if(event.ctrlKey && event.keyCode == 37) { event.preventDefault(); window.location.href = \'' . $prevlink . '\'; }' . " \n " ;
if ( $nextlink )
$a -> page [ 'htmlhead' ] .= 'if(event.ctrlKey && event.keyCode == 39) { event.preventDefault(); window.location.href = \'' . $nextlink . '\'; }' . " \n " ;
$a -> page [ 'htmlhead' ] .= '});</script>' ;
2012-03-19 08:20:53 +00:00
2011-03-12 04:06:13 +00:00
if ( $prevlink )
2013-10-10 09:15:44 +00:00
$prevlink = array ( $prevlink , '<i class="icon-backward photo-icons""></i>' ) ;
2010-08-08 08:58:26 +00:00
2011-05-05 08:53:03 +00:00
$photo = array (
2012-10-02 01:02:11 +00:00
'href' => $a -> get_baseurl () . '/photo/' . $hires [ 'resource_id' ] . '-' . $hires [ 'scale' ] . '.' . $phototypes [ $hires [ 'type' ]],
2011-05-05 08:53:03 +00:00
'title' => t ( 'View Full Size' ),
2012-10-02 01:02:11 +00:00
'src' => $a -> get_baseurl () . '/photo/' . $lores [ 'resource_id' ] . '-' . $lores [ 'scale' ] . '.' . $phototypes [ $lores [ 'type' ]] . '?f=&_u=' . datetime_convert ( '' , '' , '' , 'ymdhis' )
2011-05-05 08:53:03 +00:00
);
2011-03-12 04:06:13 +00:00
if ( $nextlink )
2013-10-10 09:15:44 +00:00
$nextlink = array ( $nextlink , '<i class="icon-forward photo-icons"></i>' );
2010-08-06 04:15:24 +00:00
2010-08-08 08:58:26 +00:00
2010-08-06 13:30:25 +00:00
// Do we have an item for this photo?
2013-04-09 00:23:26 +00:00
$linked_items = q ( " SELECT * FROM item WHERE resource_id = '%s' and resource_type = 'photo'
$sql_extra LIMIT 1 " ,
2010-08-06 13:30:25 +00:00
dbesc ( $datum )
);
2013-08-29 00:57:45 +00:00
2013-04-09 00:23:26 +00:00
if ( $linked_items ) {
2014-02-04 04:44:42 +00:00
xchan_query ( $linked_items );
$linked_items = fetch_post_tags ( $linked_items , true );
2010-11-05 03:47:44 +00:00
$link_item = $linked_items [ 0 ];
2013-04-09 00:23:26 +00:00
2013-08-29 00:57:45 +00:00
$r = q ( " select * from item where parent_mid = '%s'
2013-04-09 00:23:26 +00:00
and item_restrict = 0 and uid = % d $sql_extra " ,
2013-03-22 01:25:41 +00:00
dbesc ( $link_item [ 'mid' ]),
2010-11-05 03:47:44 +00:00
intval ( $link_item [ 'uid' ])
2010-08-06 13:30:25 +00:00
);
2013-04-09 00:23:26 +00:00
if ( $r ) {
xchan_query ( $r );
$r = fetch_post_tags ( $r , true );
$r = conv_sort ( $r , 'commented' );
}
2010-08-06 13:30:25 +00:00
2014-02-04 04:44:42 +00:00
$tags = array ();
if ( $link_item [ 'term' ]) {
$cnt = 0 ;
foreach ( $link_item [ 'term' ] as $t )
$tags [ $cnt ] = array ( 0 => format_term_for_display ( $t ));
if ( $can_post && ( $ph [ 0 ][ 'uid' ] == $owner_uid )) {
$tags [ $cnt ][ 1 ] = 'tagrm?f=&item=' . $link_item [ 'id' ];
$tags [ $cnt ][ 2 ] = t ( 'Remove' );
}
$cnt ++ ;
}
2010-11-05 03:47:44 +00:00
if (( local_user ()) && ( local_user () == $link_item [ 'uid' ])) {
2013-04-09 00:23:26 +00:00
q ( " UPDATE `item` SET item_flags = (item_flags ^ %d) WHERE parent = %d and uid = %d and (item_flags & %d) " ,
intval ( ITEM_UNSEEN ),
2010-11-05 03:47:44 +00:00
intval ( $link_item [ 'parent' ]),
2013-04-09 00:23:26 +00:00
intval ( local_user ()),
intval ( ITEM_UNSEEN )
2010-11-04 07:19:10 +00:00
);
}
2010-08-09 00:08:39 +00:00
}
2010-08-08 08:58:26 +00:00
2014-01-28 02:06:09 +00:00
// logger('mod_photo: link_item' . print_r($link_item,true));
2013-08-29 00:57:45 +00:00
// FIXME - remove this when we move to conversation module
$r = $r [ 0 ][ 'children' ];
2010-11-05 03:47:44 +00:00
2013-07-02 23:37:33 +00:00
$edit = null ;
if ( $can_post ) {
2014-06-21 23:03:48 +00:00
if ( array_key_exists ( 'albums' , $a -> data ))
$albums = get_app () -> data [ 'albums' ];
else
$albums = photos_albums_list ( $a -> data [ 'channel' ], $a -> data [ 'observer' ]);
2013-01-06 21:42:51 +00:00
2013-07-02 23:37:33 +00:00
$album_e = $ph [ 0 ][ 'album' ];
2013-12-23 02:37:39 +00:00
$caption_e = $ph [ 0 ][ 'description' ];
2013-07-02 23:37:33 +00:00
$aclselect_e = populate_acl ( $ph [ 0 ]);
$edit = array (
'edit' => t ( 'Edit photo' ),
'id' => $ph [ 0 ][ 'id' ],
'rotatecw' => t ( 'Rotate CW (right)' ),
'rotateccw' => t ( 'Rotate CCW (left)' ),
2014-06-21 23:03:48 +00:00
'albums' => $albums [ 'albums' ],
2013-07-02 23:37:33 +00:00
'album' => $album_e ,
'newalbum' => t ( 'New album name' ),
'nickname' => $a -> data [ 'channel' ][ 'channel_address' ],
'resource_id' => $ph [ 0 ][ 'resource_id' ],
'capt_label' => t ( 'Caption' ),
'caption' => $caption_e ,
'tag_label' => t ( 'Add a Tag' ),
'permissions' => t ( 'Permissions' ),
'aclselect' => $aclselect_e ,
'help_tags' => t ( 'Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping' ),
'item_id' => (( count ( $linked_items )) ? $link_item [ 'id' ] : 0 ),
'submit' => t ( 'Submit' ),
'delete' => t ( 'Delete Photo' )
);
2010-08-09 00:08:39 +00:00
}
2010-08-07 13:20:27 +00:00
2010-11-05 03:47:44 +00:00
if ( count ( $linked_items )) {
2010-08-06 13:30:25 +00:00
2011-05-11 11:37:13 +00:00
$cmnt_tpl = get_markup_template ( 'comment_item.tpl' );
$tpl = get_markup_template ( 'photo_item.tpl' );
2010-08-06 13:30:25 +00:00
$return_url = $a -> cmd ;
2011-05-11 11:37:13 +00:00
$like_tpl = get_markup_template ( 'like_noshare.tpl' );
2010-11-02 23:24:23 +00:00
2010-11-04 02:47:07 +00:00
$likebuttons = '' ;
2013-12-20 01:36:31 +00:00
if ( $can_post || $can_comment ) {
2011-03-09 02:53:52 +00:00
$likebuttons = replace_macros ( $like_tpl , array (
2011-05-05 08:53:03 +00:00
'$id' => $link_item [ 'id' ],
2011-03-09 02:53:52 +00:00
'$likethis' => t ( " I like this \x28 toggle \x29 " ),
'$nolike' => t ( " I don't like this \x28 toggle \x29 " ),
2011-03-17 02:36:59 +00:00
'$share' => t ( 'Share' ),
2011-05-05 08:53:03 +00:00
'$wait' => t ( 'Please wait' )
2011-03-09 02:53:52 +00:00
));
}
2010-11-04 02:47:07 +00:00
2011-05-05 08:53:03 +00:00
$comments = '' ;
2010-11-04 02:47:07 +00:00
if ( ! count ( $r )) {
2013-12-20 01:36:31 +00:00
if ( $can_post || $can_comment ) {
2014-10-15 20:41:42 +00:00
$commentbox = replace_macros ( $cmnt_tpl , array (
2012-07-19 00:08:03 +00:00
'$return_path' => '' ,
2013-09-17 05:40:53 +00:00
'$mode' => 'photos' ,
2012-07-19 00:08:03 +00:00
'$jsreload' => $return_url ,
'$type' => 'wall-comment' ,
'$id' => $link_item [ 'id' ],
'$parent' => $link_item [ 'id' ],
'$profile_uid' => $owner_uid ,
2013-10-24 23:47:34 +00:00
'$mylink' => $observer [ 'xchan_url' ],
2012-07-19 00:08:03 +00:00
'$mytitle' => t ( 'This is you' ),
2013-10-24 23:47:34 +00:00
'$myphoto' => $observer [ 'xchan_photo_s' ],
2012-07-19 00:08:03 +00:00
'$comment' => t ( 'Comment' ),
'$submit' => t ( 'Submit' ),
'$preview' => t ( 'Preview' ),
2013-11-14 23:41:25 +00:00
'$ww' => '' ,
'$feature_encrypt' => false
2012-07-19 00:08:03 +00:00
));
2010-08-06 13:30:25 +00:00
}
}
2010-11-02 23:24:23 +00:00
$alike = array ();
$dlike = array ();
2011-05-05 08:53:03 +00:00
$like = '' ;
$dislike = '' ;
2010-08-06 13:30:25 +00:00
// display comments
2013-04-26 03:01:24 +00:00
if ( $r ) {
2010-11-02 23:24:23 +00:00
foreach ( $r as $item ) {
like_puller ( $a , $item , $alike , 'like' );
like_puller ( $a , $item , $dlike , 'dislike' );
}
2011-02-04 09:18:28 +00:00
$like = (( isset ( $alike [ $link_item [ 'id' ]])) ? format_like ( $alike [ $link_item [ 'id' ]], $alike [ $link_item [ 'id' ] . '-l' ], 'like' , $link_item [ 'id' ]) : '' );
2010-11-05 03:47:44 +00: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 23:24:23 +00:00
2010-11-04 07:19:10 +00:00
2010-08-06 13:30:25 +00:00
foreach ( $r as $item ) {
$comment = '' ;
$template = $tpl ;
2010-11-02 23:24:23 +00:00
$sparkle = '' ;
if ((( activity_match ( $item [ 'verb' ], ACTIVITY_LIKE )) || ( activity_match ( $item [ 'verb' ], ACTIVITY_DISLIKE ))) && ( $item [ 'id' ] != $item [ 'parent' ]))
continue ;
2010-08-06 13:30:25 +00:00
$redirect_url = $a -> get_baseurl () . '/redir/' . $item [ 'cid' ] ;
2013-08-29 00:57:45 +00:00
$profile_url = zid ( $item [ 'author' ][ 'xchan_url' ]);
2013-08-28 04:06:11 +00:00
$sparkle = '' ;
2010-12-06 02:08:36 +00:00
2013-08-29 00:57:45 +00:00
$profile_name = $item [ 'author' ][ 'xchan_name' ];
$profile_avatar = $item [ 'author' ][ 'xchan_photo_m' ];
2010-12-06 02:08:36 +00:00
2010-08-06 13:30:25 +00:00
$profile_link = $profile_url ;
$drop = '' ;
2013-10-24 23:47:34 +00:00
if ( $observer [ 'xchan_hash' ] === $item [ 'author_xchan' ] || $observer [ 'xchan_hash' ] === $item [ 'owner_xchan' ])
2011-06-16 03:43:39 +00:00
$drop = replace_macros ( get_markup_template ( 'photo_drop.tpl' ), array ( '$id' => $item [ 'id' ], '$delete' => t ( 'Delete' )));
2010-08-06 13:30:25 +00:00
2013-07-02 23:37:33 +00:00
$name_e = $profile_name ;
$title_e = $item [ 'title' ];
2013-09-17 05:56:36 +00:00
unobscure ( $item );
$body_e = prepare_text ( $item [ 'body' ], $item [ 'mimetype' ]);
2013-07-02 23:37:33 +00:00
2011-05-05 08:53:03 +00:00
$comments .= replace_macros ( $template , array (
2014-10-15 19:15:20 +00:00
'$id' => $item [ 'id' ],
2013-09-17 05:40:53 +00:00
'$mode' => 'photos' ,
2010-08-06 13:30:25 +00:00
'$profile_url' => $profile_link ,
2013-01-06 21:42:51 +00:00
'$name' => $name_e ,
2010-08-06 13:30:25 +00:00
'$thumb' => $profile_avatar ,
2010-09-28 02:48:45 +00:00
'$sparkle' => $sparkle ,
2013-01-06 21:42:51 +00:00
'$title' => $title_e ,
'$body' => $body_e ,
2010-08-06 13:30:25 +00:00
'$ago' => relative_date ( $item [ 'created' ]),
2014-10-15 19:17:07 +00:00
'$indent' => (( $item [ 'parent' ] != $item [ 'id' ]) ? ' comment' : '' ),
2010-08-06 13:30:25 +00:00
'$drop' => $drop ,
'$comment' => $comment
));
2013-08-29 00:57:45 +00:00
}
2013-12-20 01:36:31 +00:00
if ( $can_post || $can_comment ) {
2014-10-15 20:23:38 +00:00
$commentbox = replace_macros ( $cmnt_tpl , array (
2013-08-29 00:57:45 +00:00
'$return_path' => '' ,
'$jsreload' => $return_url ,
'$type' => 'wall-comment' ,
'$id' => $link_item [ 'id' ],
'$parent' => $link_item [ 'id' ],
'$profile_uid' => $owner_uid ,
2013-10-24 23:47:34 +00:00
'$mylink' => $observer [ 'xchan_url' ],
2013-08-29 00:57:45 +00:00
'$mytitle' => t ( 'This is you' ),
2013-10-24 23:47:34 +00:00
'$myphoto' => $observer [ 'xchan_photo_s' ],
2013-08-29 00:57:45 +00:00
'$comment' => t ( 'Comment' ),
'$submit' => t ( 'Submit' ),
'$ww' => ''
));
2010-08-06 13:30:25 +00:00
}
2013-08-29 00:57:45 +00:00
}
2011-05-05 08:53:03 +00:00
$paginate = paginate ( $a );
2010-08-06 13:30:25 +00:00
}
2011-05-05 08:53:03 +00:00
2013-07-02 23:37:33 +00:00
$album_e = array ( $album_link , $ph [ 0 ][ 'album' ]);
$like_e = $like ;
$dislike_e = $dislike ;
2013-01-06 21:42:51 +00:00
2014-02-04 04:44:42 +00:00
2011-05-11 11:37:13 +00:00
$photo_tpl = get_markup_template ( 'photo_view.tpl' );
2011-05-05 08:53:03 +00:00
$o .= replace_macros ( $photo_tpl , array (
'$id' => $ph [ 0 ][ 'id' ],
2013-01-06 21:42:51 +00:00
'$album' => $album_e ,
2011-05-05 08:53:03 +00:00
'$tools' => $tools ,
'$lock' => $lock ,
'$photo' => $photo ,
'$prevlink' => $prevlink ,
'$nextlink' => $nextlink ,
2013-12-23 02:37:39 +00:00
'$desc' => $ph [ 0 ][ 'description' ],
2014-02-04 04:44:42 +00:00
'$tag_hdr' => t ( 'In This Photo:' ),
'$tags' => $tags ,
2011-05-05 08:53:03 +00:00
'$edit' => $edit ,
'$likebuttons' => $likebuttons ,
2013-01-06 21:42:51 +00:00
'$like' => $like_e ,
'$dislike' => $dislike_e ,
2011-05-05 08:53:03 +00:00
'$comments' => $comments ,
2014-10-15 20:23:38 +00:00
'$commentbox' => $commentbox ,
2011-05-05 08:53:03 +00:00
'$paginate' => $paginate ,
));
2013-08-28 04:06:11 +00:00
$a -> data [ 'photo_html' ] = $o ;
2011-05-05 08:53:03 +00:00
2010-08-06 04:15:24 +00:00
return $o ;
}
// Default - show recent photos with upload link (if applicable)
2011-06-23 09:30:17 +00:00
//$o = '';
2010-08-06 04:15:24 +00:00
2012-10-02 01:02:11 +00:00
$r = q ( " SELECT `resource_id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s'
2013-07-19 03:55:25 +00:00
and ( photo_flags = % d or photo_flags = % d ) $sql_extra GROUP BY `resource_id` " ,
2012-10-25 05:21:35 +00:00
intval ( $a -> data [ 'channel' ][ 'channel_id' ]),
2011-06-29 05:33:02 +00:00
dbesc ( 'Contact Photos' ),
2013-07-19 03:55:25 +00:00
dbesc ( t ( 'Contact Photos' )),
intval ( PHOTO_NORMAL ),
intval ( PHOTO_PROFILE )
2010-08-06 04:15:24 +00:00
);
2011-01-04 08:06:36 +00:00
if ( count ( $r )) {
2010-08-06 04:15:24 +00:00
$a -> set_pager_total ( count ( $r ));
2014-09-11 11:07:08 +00:00
$a -> set_pager_itemspage ( 60 );
2011-01-04 08:06:36 +00:00
}
2010-08-06 04:15:24 +00:00
2012-10-02 01:02:11 +00:00
$r = q ( " SELECT `resource_id`, `id`, `filename`, type, `album`, max(`scale`) AS `scale` FROM `photo`
2013-07-19 03:55:25 +00:00
WHERE `uid` = % d AND `album` != '%s' AND `album` != '%s'
and ( photo_flags = % d or photo_flags = % d )
2012-10-02 01:02:11 +00:00
$sql_extra GROUP BY `resource_id` ORDER BY `created` DESC LIMIT % d , % d " ,
2012-10-25 05:21:35 +00:00
intval ( $a -> data [ 'channel' ][ 'channel_id' ]),
2011-06-29 05:33:02 +00:00
dbesc ( 'Contact Photos' ),
2010-08-06 04:15:24 +00:00
dbesc ( t ( 'Contact Photos' )),
2013-07-19 03:55:25 +00:00
intval ( PHOTO_NORMAL ),
intval ( PHOTO_PROFILE ),
2010-08-06 04:15:24 +00:00
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2011-12-22 15:33:14 +00:00
$photos = array ();
2010-08-06 04:15:24 +00:00
if ( count ( $r )) {
2012-05-21 23:40:11 +00:00
$twist = 'rotright' ;
2010-08-06 04:15:24 +00:00
foreach ( $r as $rr ) {
2012-05-21 23:40:11 +00:00
if ( $twist == 'rotright' )
$twist = 'rotleft' ;
else
$twist = 'rotright' ;
2012-06-07 15:42:13 +00:00
$ext = $phototypes [ $rr [ 'type' ]];
2013-01-07 02:34:54 +00:00
if ( $a -> get_template_engine () === 'internal' ) {
2013-01-06 21:42:51 +00:00
$alt_e = template_escape ( $rr [ 'filename' ]);
$name_e = template_escape ( $rr [ 'album' ]);
}
else {
$alt_e = $rr [ 'filename' ];
$name_e = $rr [ 'album' ];
}
2011-12-22 15:33:14 +00:00
$photos [] = array (
'id' => $rr [ 'id' ],
2012-05-21 23:40:11 +00:00
'twist' => ' ' . $twist . rand ( 2 , 4 ),
2012-10-25 05:21:35 +00:00
'link' => $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/image/' . $rr [ 'resource_id' ],
2011-12-22 15:33:14 +00:00
'title' => t ( 'View Photo' ),
2012-10-02 01:02:11 +00:00
'src' => $a -> get_baseurl () . '/photo/' . $rr [ 'resource_id' ] . '-' . ((( $rr [ 'scale' ]) == 6 ) ? 4 : $rr [ 'scale' ]) . '.' . $ext ,
2013-01-06 21:42:51 +00:00
'alt' => $alt_e ,
2011-12-22 15:33:14 +00:00
'album' => array (
2012-10-25 05:21:35 +00:00
'link' => $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/album/' . bin2hex ( $rr [ 'album' ]),
2013-01-06 21:42:51 +00:00
'name' => $name_e ,
2011-12-22 15:33:14 +00:00
'alt' => t ( 'View Album' ),
),
);
2010-08-06 04:15:24 +00:00
}
}
2011-12-22 15:33:14 +00:00
2014-09-06 07:37:15 +00:00
if ( $_REQUEST [ 'aj' ]) {
if ( $photos ) {
$o = replace_macros ( get_markup_template ( 'photosajax.tpl' ), array (
2014-09-11 08:41:11 +00:00
'$photos' => $photos ,
2014-09-06 07:37:15 +00:00
));
}
else {
$o = '<div id="content-complete"></div>' ;
}
echo $o ;
killme ();
}
else {
2014-09-06 07:48:00 +00:00
$o .= " <script> var page_query = ' " . $_GET [ 'q' ] . " '; var extra_args = ' " . extra_query_args () . " ' ; </script> " ;
2014-09-06 07:37:15 +00:00
$tpl = get_markup_template ( 'photos_recent.tpl' );
$o .= replace_macros ( $tpl , array (
'$title' => t ( 'Recent Photos' ),
'$can_post' => $can_post ,
2014-09-28 21:14:49 +00:00
'$upload' => array ( t ( 'Upload' ), $a -> get_baseurl () . '/photos/' . $a -> data [ 'channel' ][ 'channel_address' ] . '/upload' ),
2014-09-06 07:37:15 +00:00
'$photos' => $photos ,
));
2011-12-22 15:33:14 +00:00
2014-09-06 07:37:15 +00:00
}
if (( ! $photos ) && ( $_REQUEST [ 'aj' ])) {
$o .= '<div id="content-complete"></div>' ;
echo $o ;
killme ();
}
2014-09-11 08:41:11 +00:00
// paginate($a);
2010-08-06 04:15:24 +00:00
return $o ;
}
2011-01-28 02:45:19 +00:00