<?php

function manage_content(&$a) {

	if((! get_account_id()) || ($_SESSION['delegate'])) {
		notice( t('Permission denied.') . EOL);
		return;
	}

	require_once('include/security.php');

	$change_channel = ((argc() > 1) ? intval(argv(1)) : 0);

	if((argc() > 2) && (argv(2) === 'default')) {
		$r = q("select channel_id from channel where channel_id = %d and channel_account_id = %d limit 1",
			intval($change_channel),
			intval(get_account_id())
		);
		if($r) {
			q("update account set account_default_channel = %d where account_id = %d",
				intval($change_channel),
				intval(get_account_id())
			);
		}
		goaway(z_root() . '/manage');
	}

	if($change_channel) {
		$r = change_channel($change_channel);

		if((argc() > 2) && !(argv(2) === 'default')) {
			goaway(z_root() . '/' . implode('/',array_slice($a->argv,2))); // Go to whatever is after /manage/, but with the new channel
		}
		else {
			if($r && $r['channel_startpage'])
				goaway(z_root() . '/' . $r['channel_startpage']); // If nothing extra is specified, go to the default page
		}
		goaway(z_root());
	}

	$channels = null;

	if(local_channel()) {
		$r = q("select channel.*, xchan.* from channel left join xchan on channel.channel_hash = xchan.xchan_hash where channel.channel_account_id = %d and not ( channel_pageflags & %d )>0 order by channel_name ",
			intval(get_account_id()),
			intval(PAGE_REMOVED)
		);

		$account = get_app()->get_account();

		if($r && count($r)) {
			$channels = $r;
			for($x = 0; $x < count($channels); $x ++) {
				$channels[$x]['link'] = 'manage/' . intval($channels[$x]['channel_id']);
				$channels[$x]['default'] = (($channels[$x]['channel_id'] == $account['account_default_channel']) ? "1" : ''); 
				$channels[$x]['default_links'] = '1';


				$c = q("SELECT id, item_restrict, item_flags FROM item
					WHERE item_restrict = 0 and item_unseen = 1 and uid = %d",
					intval($channels[$x]['channel_id'])
				);

				if($c) {	
					foreach ($c as $it) {
						if($it['item_flags'] & ITEM_WALL)
							$channels[$x]['home'] ++;
						else
							$channels[$x]['network'] ++;
					}
				}


				$intr = q("SELECT COUNT(abook.abook_id) AS total FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash where abook_channel = %d and (abook_flags & %d)>0 and not ((abook_flags & %d)>0 or (xchan_flags & %d)>0)",
					intval($channels[$x]['channel_id']),
					intval(ABOOK_FLAG_PENDING),
					intval(ABOOK_FLAG_SELF|ABOOK_FLAG_IGNORED),
					intval(XCHAN_FLAGS_DELETED|XCHAN_FLAGS_ORPHAN)
				);

				if($intr)
					$channels[$x]['intros'] = intval($intr[0]['total']);


				$mails = q("SELECT count(id) as total from mail WHERE channel_id = %d AND not (mail_flags & %d)>0 and from_xchan != '%s' ",
					intval($channels[$x]['channel_id']),
					intval(MAIL_SEEN),		
					dbesc($channels[$x]['channel_hash'])
				);

				if($mails)
					$channels[$x]['mail'] = intval($mails[0]['total']);
		

				$events = q("SELECT type, start, adjust FROM `event`
					WHERE `event`.`uid` = %d AND start < '%s' AND start > '%s' and `ignore` = 0
					ORDER BY `start` ASC ",
					intval($channels[$x]['channel_id']),
					dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + 7 days')),
					dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days'))
				);

				if($events) {
					$channels[$x]['all_events'] = count($events);

					if($channels[$x]['all_events']) {
						$str_now = datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y-m-d');
						foreach($events as $e) {
							$bd = false;
							if($e['type'] === 'birthday') {
								$channels[$x]['birthdays'] ++;
								$bd = true;
							}
							else {
								$channels[$x]['events'] ++;
							}
							if(datetime_convert('UTC', ((intval($e['adjust'])) ? date_default_timezone_get() : 'UTC'), $e['start'], 'Y-m-d') === $str_now) {
								$channels[$x]['all_events_today'] ++;
								if($bd)
									$channels[$x]['birthdays_today'] ++;
								else
									$channels[$x]['events_today'] ++;
							}
						}
					}
				}
			}
		}
		
	    $r = q("select count(channel_id) as total from channel where channel_account_id = %d and not ( channel_pageflags & %d )>0",
			intval(get_account_id()),
			intval(PAGE_REMOVED)
		);
		$limit = account_service_class_fetch(get_account_id(),'total_identities');
		if($limit !== false) {
			$channel_usage_message = sprintf( t("You have created %1$.0f of %2$.0f allowed channels."), $r[0]['total'], $limit);
		}
		else {
			$channel_usage_message = '';
 		}
	}

	$links = array(
		array( 'new_channel', t('Create a new channel'), t('Create a new channel'))
	);

	$delegates = q("select * from abook left join xchan on abook_xchan = xchan_hash where 
		abook_channel = %d and (abook_their_perms & %d) > 0",
		intval(local_channel()),
		intval(PERMS_A_DELEGATE)
	);

	if($delegates) {
		for($x = 0; $x < count($delegates); $x ++) {
			$delegates[$x]['link'] = 'magic?f=&dest=' . urlencode($delegates[$x]['xchan_url']) 
			. '&delegate=' . urlencode($delegates[$x]['xchan_addr']);
		}
	}
	else {
		$delegates = null;
	}



	$o = replace_macros(get_markup_template('channels.tpl'), array(
		'$header'           => t('Channel Manager'),
		'$msg_selected'     => t('Current Channel'),
		'$selected'         => local_channel(),
		'$desc'             => t('Switch to one of your channels by selecting it.'),
		'$msg_default'      => t('Default Channel'),
		'$msg_make_default' => t('Make Default'),
		'$links'            => $links,
		'$all_channels'     => $channels,
		'$mail_format'      => t('%d new messages'),
		'$intros_format'    => t('%d new introductions'),
		'$channel_usage_message' => $channel_usage_message,
		'$delegate_header'  => t('Delegated Channels'),
		'$delegates'        => $delegates,

	));


	return $o;

}