<?php /** @file */

namespace Zotlabs\Daemon;

class Cron_daily {

	static public function run($argc,$argv) {

		logger('cron_daily: start');

		/**
		 * Cron Daily
		 *
		 */


		require_once('include/dir_fns.php');
		check_upstream_directory();


		// Fire off the Cron_weekly process if it's the correct day.
 
		$d3 = intval(datetime_convert('UTC','UTC','now','N'));
		if($d3 == 7) {
			Master::Summon(array('Cron_weekly'));
		}

		// once daily run birthday_updates and then expire in background

		// FIXME: add birthday updates, both locally and for xprof for use
		// by directory servers

		update_birthdays();

		// expire any read notifications over a month old

		q("delete from notify where seen = 1 and created < %s - INTERVAL %s",
			db_utcnow(), db_quoteinterval('30 DAY')
		);

		// expire any unread notifications over a year old

		q("delete from notify where seen = 0 and created < %s - INTERVAL %s",
			db_utcnow(), db_quoteinterval('1 YEAR')
		);


		//update statistics in config
		require_once('include/statistics_fns.php');
		update_channels_total_stat();
		update_channels_active_halfyear_stat();
		update_channels_active_monthly_stat();
		update_local_posts_stat();


		// expire old delivery reports

		$keep_reports = intval(get_config('system','expire_delivery_reports'));
		if($keep_reports === 0)
			$keep_reports = 10;

		q("delete from dreport where dreport_time < %s - INTERVAL %s",
			db_utcnow(),
			db_quoteinterval($keep_reports . ' DAY')
		);

		// expire any expired accounts
		downgrade_accounts();

		// If this is a directory server, request a sync with an upstream
		// directory at least once a day, up to once every poll interval. 
		// Pull remote changes and push local changes.
		// potential issue: how do we keep from creating an endless update loop? 

		$dirmode = get_config('system','directory_mode');

		if($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) {
			require_once('include/dir_fns.php');
			sync_directories($dirmode);
		}


		Master::Summon(array('Expire'));
		Master::Summon(array('Cli_suggest'));

		remove_obsolete_hublocs();

		call_hooks('cron_daily',datetime_convert());

		set_config('system','last_expire_day',$d2);

		/**
		 * End Cron Daily
		 */
	}
}