2010-07-17 00:16:50 +00:00
< ? php
function network_init ( & $a ) {
2011-01-20 22:25:44 +00:00
if ( ! local_user ()) {
2011-01-20 23:30:45 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
2011-01-20 22:25:44 +00:00
return ;
}
2011-01-20 19:19:20 +00:00
2010-07-25 23:27:22 +00:00
require_once ( 'include/group.php' );
2010-10-31 23:38:22 +00:00
if ( ! x ( $a -> page , 'aside' ))
$a -> page [ 'aside' ] = '' ;
2011-01-20 01:56:36 +00:00
$a -> page [ 'aside' ] .= '<div id="network-new-link">' ;
if (( $a -> argc > 1 && $a -> argv [ 1 ] === 'new' ) || ( $a -> argc > 2 && $a -> argv [ 2 ] === 'new' ))
2011-04-20 03:50:02 +00:00
$a -> page [ 'aside' ] .= '<a href="' . $a -> get_baseurl () . '/' . str_replace ( '/new' , '' , $a -> cmd ) . (( x ( $_GET , 'cid' )) ? '/?cid=' . $_GET [ 'cid' ] : '' ) . '">' . t ( 'Normal View' ) . '</a>' ;
2011-01-20 01:56:36 +00:00
else
2011-04-20 03:50:02 +00:00
$a -> page [ 'aside' ] .= '<a href="' . $a -> get_baseurl () . '/' . $a -> cmd . '/new' . (( x ( $_GET , 'cid' )) ? '/?cid=' . $_GET [ 'cid' ] : '' ) . '">' . t ( 'New Item View' ) . '</a>' ;
2011-01-20 01:56:36 +00:00
$a -> page [ 'aside' ] .= '</div>' ;
2011-04-13 01:22:58 +00:00
$a -> page [ 'aside' ] .= group_side ( 'network' , 'network' , true );
2010-07-17 00:16:50 +00:00
}
2010-09-21 02:34:44 +00:00
function network_content ( & $a , $update = 0 ) {
2010-07-17 00:16:50 +00:00
2011-04-13 00:58:16 +00:00
require_once ( 'include/conversation.php' );
2010-07-17 00:16:50 +00:00
if ( ! local_user ())
2011-01-20 22:25:44 +00:00
return login ( false );
2010-10-31 23:38:22 +00:00
$o = '' ;
2010-07-17 00:16:50 +00:00
$contact_id = $a -> cid ;
2010-07-25 23:27:22 +00:00
$group = 0 ;
2010-07-20 12:21:19 +00:00
2011-02-02 04:23:58 +00:00
$nouveau = false ;
2011-02-17 08:52:26 +00:00
require_once ( 'include/acl_selectors.php' );
2011-02-02 04:23:58 +00:00
2011-04-20 03:50:02 +00:00
$cid = (( x ( $_GET [ 'cid' ])) ? intval ( $_GET [ 'cid' ]) : 0 );
2011-02-17 08:40:35 +00:00
if (( $a -> argc > 2 ) && $a -> argv [ 2 ] === 'new' )
$nouveau = true ;
if ( $a -> argc > 1 ) {
if ( $a -> argv [ 1 ] === 'new' )
$nouveau = true ;
else {
$group = intval ( $a -> argv [ 1 ]);
2011-04-20 03:50:02 +00:00
$def_acl = array ( 'allow_gid' => '<' . $group . '>' );
2011-02-17 08:40:35 +00:00
}
2011-02-17 07:05:48 +00:00
}
2011-04-20 03:50:02 +00:00
if ( $cid )
$def_acl = array ( 'allow_cid' => '<' . intval ( $cid ) . '>' );
2010-07-24 22:21:33 +00:00
if ( ! $update ) {
2011-04-04 03:41:40 +00:00
if ( group ) {
if (( $t = group_public_members ( $group )) && ( ! get_pconfig ( local_user (), 'system' , 'nowarn_insecure' ))) {
$plural_form = sprintf ( tt ( '%d member' , '%d members' , $t ), $t );
notice ( sprintf ( t ( 'Warning: This group contains %s from an insecure network.' ), $plural_form ) . EOL );
notice ( t ( 'Private messages to this group are at risk of public disclosure.' ) . EOL );
}
}
2010-09-19 04:11:18 +00:00
$o .= '<script> $(document).ready(function() { $(\'#nav-network-link\').addClass(\'nav-selected\'); });</script>' ;
2010-07-26 11:22:19 +00:00
$_SESSION [ 'return_url' ] = $a -> cmd ;
2010-10-20 03:52:05 +00:00
$geotag = (( $a -> user [ 'allow_location' ]) ? load_view_file ( 'view/jot_geotag.tpl' ) : '' );
2010-09-23 01:00:19 +00:00
$tpl = load_view_file ( 'view/jot-header.tpl' );
2010-07-17 00:16:50 +00:00
2010-10-20 03:52:05 +00:00
$a -> page [ 'htmlhead' ] .= replace_macros ( $tpl , array (
'$baseurl' => $a -> get_baseurl (),
2010-12-06 02:08:36 +00:00
'$geotag' => $geotag ,
2011-03-21 07:21:35 +00:00
'$nickname' => $a -> user [ 'nickname' ],
'$linkurl' => t ( 'Please enter a link URL:' ),
'$utubeurl' => t ( 'Please enter a YouTube link:' ),
'$vidurl' => t ( " Please enter a video \x28 .ogg \x29 link/URL: " ),
'$audurl' => t ( " Please enter an audio \x28 .ogg \x29 link/URL: " ),
2011-03-30 01:57:26 +00:00
'$whereareu' => t ( 'Where are you right now?' ),
'$title' => t ( 'Enter a title for this item' )
2010-10-20 03:52:05 +00:00
));
2010-07-24 22:21:33 +00:00
2010-09-23 01:00:19 +00:00
$tpl = load_view_file ( " view/jot.tpl " );
2010-09-17 10:43:03 +00:00
if (( $group ) || ( is_array ( $a -> user ) && (( strlen ( $a -> user [ 'allow_cid' ])) || ( strlen ( $a -> user [ 'allow_gid' ])) || ( strlen ( $a -> user [ 'deny_cid' ])) || ( strlen ( $a -> user [ 'deny_gid' ])))))
$lockstate = 'lock' ;
else
$lockstate = 'unlock' ;
2010-07-17 14:03:06 +00:00
2010-10-18 07:43:49 +00:00
$celeb = ((( $a -> user [ 'page-flags' ] == PAGE_SOAPBOX ) || ( $a -> user [ 'page-flags' ] == PAGE_COMMUNITY )) ? true : false );
2011-02-11 10:35:19 +00:00
$jotplugins = '' ;
$jotnets = '' ;
2011-04-18 06:27:11 +00:00
2011-04-19 03:20:04 +00:00
$mail_disabled = (( function_exists ( 'imap_open' ) && ( ! get_config ( 'system' , 'imap_disabled' ))) ? 0 : 1 );
2011-04-18 06:27:11 +00:00
$mail_enabled = false ;
$pubmail_enabled = false ;
2011-04-19 03:20:04 +00:00
if ( ! $mail_disabled ) {
$r = q ( " SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1 " ,
intval ( local_user ())
);
if ( count ( $r )) {
$mail_enabled = true ;
if ( intval ( $r [ 0 ][ 'pubmail' ]))
$pubmail_enabled = true ;
}
2011-04-18 06:27:11 +00:00
}
if ( $mail_enabled ) {
$selected = (( $pubmail_enabled ) ? ' checked="checked" ' : '' );
$jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . 'value="1" /> '
. t ( " Post to Email " ) . '</div>' ;
}
2011-02-06 09:08:12 +00:00
call_hooks ( 'jot_tool' , $jotplugins );
2011-02-11 10:35:19 +00:00
call_hooks ( 'jot_networks' , $jotnets );
2011-02-06 09:08:12 +00:00
$tpl = replace_macros ( $tpl , array ( '$jotplugins' => $jotplugins ));
2011-01-26 15:17:28 +00:00
2010-07-24 22:21:33 +00:00
$o .= replace_macros ( $tpl , array (
'$return_path' => $a -> cmd ,
2011-03-08 03:58:22 +00:00
'$action' => 'item' ,
'$share' => t ( 'Share' ),
'$upload' => t ( 'Upload photo' ),
'$weblink' => t ( 'Insert web link' ),
'$youtube' => t ( 'Insert YouTube video' ),
2011-03-17 04:14:22 +00:00
'$video' => t ( 'Insert Vorbis [.ogg] video' ),
'$audio' => t ( 'Insert Vorbis [.ogg] audio' ),
2011-03-08 03:58:22 +00:00
'$setloc' => t ( 'Set your location' ),
'$noloc' => t ( 'Clear browser location' ),
2011-03-30 01:57:26 +00:00
'$title' => t ( 'Set title' ),
2011-03-08 03:58:22 +00:00
'$wait' => t ( 'Please wait' ),
'$permset' => t ( 'Permission settings' ),
'$content' => '' ,
'$post_id' => '' ,
2010-07-24 22:21:33 +00:00
'$baseurl' => $a -> get_baseurl (),
2010-08-21 23:31:46 +00:00
'$defloc' => $a -> user [ 'default-location' ],
2010-07-24 22:21:33 +00:00
'$visitor' => 'block' ,
2011-02-01 03:07:13 +00:00
'$emailcc' => t ( 'CC: email addresses' ),
2011-02-11 10:35:19 +00:00
'$jotnets' => $jotnets ,
2011-02-01 03:07:13 +00:00
'$emtitle' => t ( 'Example: bob@example.com, mary@example.com' ),
2010-09-17 10:43:03 +00:00
'$lockstate' => $lockstate ,
2011-04-20 03:50:02 +00:00
'$acl' => populate_acl ((( $group || $cid ) ? $def_acl : $a -> user ), $celeb ),
'$bang' => (( $group || $cid ) ? '!' : '' ),
2011-03-29 00:24:11 +00:00
'$profile_uid' => local_user ()
2010-07-24 22:21:33 +00:00
));
2010-07-17 00:16:50 +00:00
2010-07-25 23:27:22 +00:00
// The special div is needed for liveUpdate to kick in for this page.
// We only launch liveUpdate if you are on the front page, you aren't
// filtering by group and also you aren't writing a comment (the last
// criteria is discovered in javascript).
2010-09-21 05:27:33 +00:00
$o .= '<div id="live-network"></div>' . " \r \n " ;
2011-02-17 08:40:35 +00:00
$o .= " <script> var profile_uid = " . $_SESSION [ 'uid' ]
. " ; var netargs = ' " . substr ( $a -> cmd , 8 )
2011-04-20 03:50:02 +00:00
. (( x ( $_GET , 'cid' )) ? '/?cid=' . $_GET [ 'cid' ] : '' )
2011-02-17 08:40:35 +00:00
. " '; var profile_page = " . $a -> pager [ 'page' ] . " ; </script> \r \n " ;
2010-09-21 05:27:33 +00:00
2010-07-24 22:21:33 +00:00
}
2010-07-17 00:16:50 +00:00
2010-07-25 23:27:22 +00:00
// We aren't going to try and figure out at the item, group, and page level
// which items you've seen and which you haven't. You're looking at some
// subset of items, so just mark everything seen.
2010-07-24 22:21:33 +00:00
$r = q ( " UPDATE `item` SET `unseen` = 0
WHERE `unseen` = 1 AND `uid` = % d " ,
intval ( $_SESSION [ 'uid' ])
);
2010-07-17 00:16:50 +00:00
2010-07-25 23:27:22 +00:00
// We don't have to deal with ACL's on this page. You're looking at everything
// that belongs to you, hence you can see all of it. We will filter by group if
// desired.
2010-07-24 13:56:02 +00:00
2010-09-17 10:10:19 +00:00
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) " ;
2010-07-17 00:16:50 +00:00
2010-07-25 23:27:22 +00:00
if ( $group ) {
2010-08-11 08:48:43 +00:00
$r = q ( " SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
2010-07-25 23:27:22 +00:00
intval ( $group ),
intval ( $_SESSION [ 'uid' ])
);
if ( ! count ( $r )) {
2011-02-17 07:10:18 +00:00
if ( $update )
killme ();
2010-08-11 22:40:18 +00:00
notice ( t ( 'No such group' ) . EOL );
2010-07-25 23:27:22 +00:00
goaway ( $a -> get_baseurl () . '/network' );
2011-04-20 03:50:02 +00:00
// NOTREACHED
2010-07-25 23:27:22 +00:00
}
$contacts = expand_groups ( array ( $group ));
2011-01-03 21:53:26 +00:00
if (( is_array ( $contacts )) && count ( $contacts )) {
$contact_str = implode ( ',' , $contacts );
}
else {
$contact_str = ' 0 ' ;
notice ( t ( 'Group is empty' ));
}
2011-01-20 01:56:36 +00:00
2011-01-03 21:53:26 +00:00
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( $contact_str )) " ;
2011-02-28 10:56:46 +00:00
$o = '<h2>' . t ( 'Group: ' ) . $r [ 0 ][ 'name' ] . '</h2>' . $o ;
2010-07-25 23:27:22 +00:00
}
2011-04-20 03:50:02 +00:00
elseif ( $cid ) {
2011-04-20 04:09:25 +00:00
$r = q ( " SELECT `id`,`name`,`network`,`writable` FROM `contact` WHERE `id` = %d
2011-04-20 03:50:02 +00:00
AND `blocked` = 0 AND `pending` = 0 LIMIT 1 " ,
intval ( $cid )
);
if ( count ( $r )) {
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( " . intval ( $cid ) . " )) " ;
$o = '<h2>' . t ( 'Contact: ' ) . $r [ 0 ][ 'name' ] . '</h2>' . $o ;
2011-04-20 04:09:25 +00:00
if ( $r [ 0 ][ 'network' ] !== NETWORK_MAIL && $r [ 0 ][ 'network' ] !== NETWORK_DFRN && $r [ 0 ][ 'writable' ] && ( ! get_pconfig ( local_user (), 'system' , 'nowarn_insecure' ))) {
notice ( t ( 'Private messages to this person are at risk of public disclosure.' ) . EOL );
}
2011-04-20 03:50:02 +00:00
}
else {
notice ( t ( 'Invalid contact.' ) . EOL );
goaway ( $a -> get_baseurl () . '/network' );
// NOTREACHED
}
}
2010-07-17 00:16:50 +00:00
2011-04-20 03:50:02 +00:00
if (( ! $group ) && ( ! $cid ) && ( ! $update ))
2011-01-17 00:40:09 +00:00
$o .= get_birthdays ();
2010-07-17 00:16:50 +00:00
$r = q ( " SELECT COUNT(*) AS `total`
FROM `item` LEFT JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
2010-07-19 13:58:03 +00:00
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
2010-07-17 00:16:50 +00:00
$sql_extra " ,
intval ( $_SESSION [ 'uid' ])
);
2011-03-28 02:53:36 +00:00
if ( count ( $r )) {
2010-07-17 00:16:50 +00:00
$a -> set_pager_total ( $r [ 0 ][ 'total' ]);
2011-03-28 02:53:36 +00:00
$a -> set_pager_itemspage ( 40 );
}
2010-07-17 00:16:50 +00:00
2011-01-20 01:56:36 +00:00
if ( $nouveau ) {
2011-03-29 00:24:11 +00:00
// "New Item View" - show all items unthreaded in reverse created date order
2011-01-20 01:56:36 +00:00
$r = q ( " SELECT `item`.*, `item`.`id` AS `item_id`,
2011-04-11 10:22:09 +00:00
`contact` . `name` , `contact` . `photo` , `contact` . `url` , `contact` . `rel` , `contact` . `writable` ,
2011-01-20 02:31:04 +00:00
`contact` . `network` , `contact` . `thumb` , `contact` . `dfrn-id` , `contact` . `self` ,
2011-01-20 01:56:36 +00:00
`contact` . `id` AS `cid` , `contact` . `uid` AS `contact-uid`
FROM `item` , `contact`
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
AND `contact` . `id` = `item` . `contact-id`
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
$sql_extra
ORDER BY `item` . `created` DESC LIMIT % d , % d " ,
intval ( $_SESSION [ 'uid' ]),
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2011-03-31 14:52:51 +00:00
2011-01-20 01:56:36 +00:00
}
else {
2011-03-29 00:24:11 +00:00
// Normal conversation view
// First fetch a known number of parent items
2011-03-28 02:53:36 +00:00
$r = q ( " SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid`
FROM `item` LEFT JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
2011-01-20 01:56:36 +00:00
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
2011-03-28 02:53:36 +00:00
AND `item` . `parent` = `item` . `id`
2011-01-20 01:56:36 +00:00
$sql_extra
2011-03-28 02:53:36 +00:00
ORDER BY `item` . `created` DESC LIMIT % d , % d " ,
2011-03-07 03:24:01 +00:00
intval ( local_user ()),
2011-01-20 01:56:36 +00:00
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2011-03-28 02:53:36 +00:00
2011-03-29 00:24:11 +00:00
// Then fetch all the children of the parents that are on this page
2011-03-28 02:53:36 +00:00
$parents_arr = array ();
$parents_str = '' ;
if ( count ( $r )) {
foreach ( $r as $rr )
$parents_arr [] = $rr [ 'item_id' ];
$parents_str = implode ( ', ' , $parents_arr );
$r = q ( " SELECT `item`.*, `item`.`id` AS `item_id`,
2011-04-11 10:22:09 +00:00
`contact` . `name` , `contact` . `photo` , `contact` . `url` , `contact` . `rel` , `contact` . `writable` ,
2011-03-28 02:53:36 +00:00
`contact` . `network` , `contact` . `thumb` , `contact` . `dfrn-id` , `contact` . `self` ,
`contact` . `id` AS `cid` , `contact` . `uid` AS `contact-uid`
FROM `item` , ( SELECT `p` . `id` , `p` . `created` FROM `item` AS `p` WHERE `p` . `parent` = `p` . `id` ) as `parentitem` , `contact`
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
AND `contact` . `id` = `item` . `contact-id`
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
AND `item` . `parent` = `parentitem` . `id` AND `item` . `parent` IN ( % s )
$sql_extra
ORDER BY `parentitem` . `created` DESC , `item` . `gravity` ASC , `item` . `created` ASC " ,
intval ( local_user ()),
dbesc ( $parents_str )
);
}
2011-01-20 01:56:36 +00:00
}
2010-07-17 00:16:50 +00:00
2011-04-11 23:15:38 +00:00
// Set this so that the conversation function can find out contact info for our wall-wall items
$a -> page_contact = $a -> contact ;
2011-04-11 04:21:16 +00:00
$mode = (( $nouveau ) ? 'network-new' : 'network' );
2011-03-29 00:24:11 +00:00
2011-04-11 04:21:16 +00:00
$o .= conversation ( $a , $r , $mode , $update );
2010-07-24 22:21:33 +00:00
2011-01-23 22:56:14 +00:00
if ( ! $update ) {
2011-03-29 00:24:11 +00:00
2010-07-24 22:21:33 +00:00
$o .= paginate ( $a );
2011-01-23 22:56:14 +00:00
$o .= '<div class="cc-license">' . t ( 'Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.' ) . '</div>' ;
}
2010-07-24 22:21:33 +00:00
2010-07-17 00:16:50 +00:00
return $o ;
2011-03-30 15:10:14 +00:00
}