<?php
if(!defined('IN_MYBB')) die();

function mnxt_events_info(){
	return array(
		'name'			=> 'XThreads Events - XThreads Plugin',
		'description'	=> 'Integrating XThreads event forum to MyBB Calendar.',
		'website'		=> 'http://mybbhacks.zingaburga.com',
		'author'		=> 'XThreads Mania',
		'authorsite'	=> 'http://mybbhacks.zingaburga.com',
		'version'		=> '1.0',
		'compatibility' => '1*',
		'guid'        	=> ''
	);
}

function mnxt_events_activate(){
	global $db;
	mnxt_events_deactivate();
	if(!$db->field_exists('tid','events')){
		$db->add_column('events','tid','int(11) unsigned NOT NULL default 0');
		$db->write_query('ALTER TABLE `'.$db->table_prefix.'events` ADD KEY `tid` (`tid`)');
	}
	$gid = $db->insert_query('settinggroups',array(
		'name'			=> 'mnxt_events',
		'title'			=> 'XThreads Events - XThreads Plugin',
		'description'	=> 'Integrating XThreads event forum to MyBB Calendar.',
		'disporder'		=> 99,
		'isdefault'		=> 0
	));
	$s = array();
	$s[] = array(
		'name'			=> 'mnxt_events_cid',
		'title'			=> 'Calendar ID',
		'description'	=> 'Calendar ID to be used for the XThreads Events forum. Please enter 0 to disable the entire features of this plugin.',
		'optionscode'	=> 'numeric',
		'value'			=> 0,
		'disporder'		=> 1,
		'gid'			=> (int)$gid
	);
	$s[] = array(
		'name'			=> 'mnxt_events_fids',
		'title'			=> 'Forum ID',
		'description'	=> 'Forum ID for the XThreads Events forum. Please enter 0 to disable this feature.<br /><em>Note: Disabling this setting only disable the XThreads Events forum integration to MyBB Calendar. You can still use the "Next X Days Events" features as long as the Calendar ID setting above is not set as 0.</em>',
		'optionscode'	=> 'numeric',
		'value'			=> 0,
		'disporder'		=> 2,
		'gid'			=> (int)$gid
	);
	$s[] = array(
		'name'			=> 'mnxt_events_key',
		'title'			=> 'Date Custom Thread Field Key',
		'description'	=> 'Custom thread field key for the date in the XThreads Events forum.',
		'optionscode'	=> 'text',
		'value'			=> '',
		'disporder'		=> 3,
		'gid'			=> (int)$gid
	);
	$s[] = array(
		'name'			=> 'mnxt_events_key_desc',
		'title'			=> 'Description Custom Thread Field Key',
		'description'	=> 'Custom thread field key for the description in the XThreads Events forum.',
		'optionscode'	=> 'text',
		'value'			=> '',
		'disporder'		=> 4,
		'gid'			=> (int)$gid
	);
	$s[] = array(
		'name'			=> 'mnxt_events_next_days',
		'title'			=> 'Display The Next X Days Events',
		'description'	=> 'How many next days the next events should be displayed? The data will be pulled out from the calendar ID set in the Calendar ID setting above. Please enter 0 to disable this feature.',
		'optionscode'	=> 'numeric',
		'value'			=> 0,
		'disporder'		=> 5,
		'gid'			=> (int)$gid
	);
	$s[] = array(
		'name'			=> 'mnxt_events_next_days_limit',
		'title'			=> 'Limit for The Next X Days Events',
		'description'	=> 'How many events (max) for the next days events should be displayed?',
		'optionscode'	=> 'numeric',
		'value'			=> 0,
		'disporder'		=> 6,
		'gid'			=> (int)$gid
	);
	$db->insert_query_multiple('settings',$s);
	rebuild_settings();
	$t = array();
	$t[] = array(
		'title'		=> 'index_mnxt_events',
		'template'	=> $db->escape_string('<tr>
	<td class="tcat"><strong class="smalltext">Next Events</strong></td>
</tr>
<tr>
	<td class="trow1">{$index_mnxt_events_event}</td>
</tr>'),
		'sid'		=> -1
	);
	$t[] = array(
		'title'		=> 'index_mnxt_events_event',
		'template'	=> $db->escape_string('<div class="smalltext"><a href="{$mnxt_events_url}" title="{$mnxt_events_desc}"><strong>{$mnxt_events_date}:</strong> {$mnxt_events_name}</a></div>'),
		'sid'		=> -1
	);
	$t[] = array(
		'title'		=> 'calendar_mnxt_events_link',
		'template'	=> $db->escape_string('<div class="smalltext"><a href="{$mnxt_events_url}"><em>Read More</em></a></div>'),
		'sid'		=> -1
	);
	$db->insert_query_multiple('templates',$t);
	require_once MYBB_ROOT.'/inc/adminfunctions_templates.php';
	find_replace_templatesets('index_boardstats','#'.preg_quote('{$forumstats}').'#','{\$forumstats}{\$index_mnxt_events}');
	find_replace_templatesets('calendar_dayview_event','#'.preg_quote('{$event[\'description\']}').'#','{\$event[\'description\']}{\$calendar_mnxt_events_link}');
	find_replace_templatesets('calendar_event','#'.preg_quote('{$event[\'description\']}').'#','{\$event[\'description\']}{\$calendar_mnxt_events_link}');
}
function mnxt_events_deactivate(){
	global $db;
	if($db->field_exists('tid','events')) $db->drop_column('events','tid');
	$gid = $db->fetch_field($db->simple_select('settinggroups','gid','name="mnxt_events"'),'gid');
	if($gid){
		$db->delete_query('settings','gid='.$gid);
		$db->delete_query('settinggroups','gid='.$gid);
	}
	rebuild_settings();
	$db->delete_query('templates','title IN ("index_mnxt_events","index_mnxt_events_event","calendar_mnxt_events_link")');
	require_once MYBB_ROOT.'/inc/adminfunctions_templates.php';
	find_replace_templatesets('index_boardstats','#'.preg_quote('{$index_mnxt_events}').'#','',0);
	find_replace_templatesets('calendar_dayview_event','#'.preg_quote('{$calendar_mnxt_events_link}').'#','',0);
	find_replace_templatesets('calendar_event','#'.preg_quote('{$calendar_mnxt_events_link}').'#','',0);
}
function mnxt_events_cid(){
	if((int)$GLOBALS['mybb']->settings['mnxt_events_cid'] > 0) return true;
	return false;
}
function mnxt_events_forum(){
	if(!mnxt_events_cid()) return false;
	if((int)$GLOBALS['mybb']->settings['mnxt_events_fids'] > 0) return true;
	return false;
}
function mnxt_events_forum_ids($fid){
	if((int)$fid == (int)$GLOBALS['mybb']->settings['mnxt_events_fids']) return true;
	return false;
}
function mnxt_events_time($dmy){
	if(!$dmy) return;
	list($d,$m,$y) = explode('-',$dmy);
	$time = gmmktime(0,0,0,$m,$d,$y);
	return $time;
}
function mnxt_events_toggle_visibility($tids,$a=0){
	if(!mnxt_events_forum()) return;
	$a = (int)$a;
	if(!is_array($tids)) $tids = array($tids);
	if(empty($tids)) return;
	$tids = array_map('intval',$tids);
	$GLOBALS['db']->update_query('events',array('visible'=>$a),'cid='.(int)$GLOBALS['mybb']->settings['mnxt_events_cid'].' AND tid IN ('.implode(',',$tids).')');
}

$plugins->add_hook('datahandler_post_insert_thread_post','mnxt_events_1');
function mnxt_events_1(&$t){
	if(!mnxt_events_forum()) return;
	if($t->data['fid'] != $GLOBALS['mybb']->settings['mnxt_events_fids']) return;
	$dt = array(
		'cid' => (int)$GLOBALS['mybb']->settings['mnxt_events_cid'],
		'uid' => $t->post_insert_data['uid'],
		'name' => $t->post_insert_data['subject'],
		'description' => $t->data['xthreads_'.$GLOBALS['mybb']->settings['mnxt_events_key_desc']],
		'dateline' => TIME_NOW,
		'visible' => $t->thread_insert_data['visible'],
		'starttime' => mnxt_events_time($t->data['xthreads_'.$GLOBALS['mybb']->settings['mnxt_events_key']]),
		'tid' => $t->post_insert_data['tid']
	);
	$GLOBALS['db']->insert_query('events',$dt);
}

$plugins->add_hook('datahandler_post_update_thread','mnxt_events_2');
function mnxt_events_2(&$t){
	if(!mnxt_events_forum()) return;
	if(!mnxt_events_forum_ids($t->data['fid'])) return;
	$dt = array(
		'name'=>$GLOBALS['db']->escape_string($t->thread_update_data['subject'])
	);
	$tf = 'xthreads_'.$GLOBALS['mybb']->settings['mnxt_events_key'];
	$tf_desc = 'xthreads_'.$GLOBALS['mybb']->settings['mnxt_events_key_desc'];
	if(isset($t->data[$tf])) $dt['starttime'] = mnxt_events_time($t->data[$tf]);
	if(isset($t->data[$tf_desc])) $dt['description'] = $t->data[$tf_desc];
	$GLOBALS['db']->update_query('events',$dt,'cid='.(int)$GLOBALS['mybb']->settings['mnxt_events_cid'].' AND tid='.(int)$t->tid);
}

$plugins->add_hook('class_moderation_delete_thread','mnxt_events_3');
function mnxt_events_3($tid){
	if(!mnxt_events_forum()) return;
	if(!$tid) return;
	$GLOBALS['db']->delete_query('events','cid='.(int)$GLOBALS['mybb']->settings['mnxt_events_cid'].' AND tid='.(int)$tid);
}

$plugins->add_hook('class_moderation_soft_delete_threads','mnxt_events_4');
$plugins->add_hook('class_moderation_unapprove_threads','mnxt_events_4');
function mnxt_events_4($tids){
	if(!mnxt_events_forum()) return;
	mnxt_events_toggle_visibility($tids);
}

$plugins->add_hook('class_moderation_restore_threads','mnxt_events_5');
$plugins->add_hook('class_moderation_approve_threads','mnxt_events_5');
function mnxt_events_5($tids){
	if(!mnxt_events_forum()) return;
	mnxt_events_toggle_visibility($tids,1);
}

$plugins->add_hook('class_moderation_change_thread_subject','mnxt_events_6');
function mnxt_events_6(&$t){
	if(!mnxt_events_forum()) return;
	if(!is_array($t['tids'])) $t['tids'] = array($t['tids']);
	if(empty($t['tids'])) return;
	$t['tids'] = array_map('intval',$t['tids']);
	foreach($t['tids'] as $tid){
		$thread = get_thread($tid);
		if(!mnxt_events_forum_ids($thread['fid'])) continue;
		$dt = array(
			'name'=>$GLOBALS['db']->escape_string($thread['subject'])
		);
		$GLOBALS['db']->update_query('events',$dt,'cid='.(int)$GLOBALS['mybb']->settings['mnxt_events_cid'].' AND tid='.(int)$tid);
	}
}
$plugins->add_hook('global_start','mnxt_events_7');
function mnxt_events_7(){
	if(!mnxt_events_cid()) return;
	if(THIS_SCRIPT == 'index.php' && isset($GLOBALS['templatelist'])) $GLOBALS['templatelist'] .= ',index_mnxt_events,index_mnxt_events_event';
	if(THIS_SCRIPT == 'calendar.php' && isset($GLOBALS['templatelist'])) $GLOBALS['templatelist'] .= ',calendar_mnxt_events_link';
}
$plugins->add_hook('index_start','mnxt_events_8');
function mnxt_events_8(){
	if(!mnxt_events_cid()) return;
	global $mybb,$db;
	if(!(int)$mybb->settings['mnxt_events_next_days']) return;
	$days = TIME_NOW + ((int)$mybb->settings['mnxt_events_next_days']*86400);
	$q = $db->simple_select('events','*','cid='.(int)$mybb->settings['mnxt_events_cid'].' AND visible=1 AND starttime BETWEEN '.TIME_NOW.' AND '.$days,array('limit'=>(int)$mybb->settings['mnxt_events_next_days_limit']));
	if(!$db->num_rows($q)) return;
	global $index_mnxt_events;
	$num_events = my_number_format($db->num_rows($q));
	$index_mnxt_events_event = '';
	while($dt = $db->fetch_array($q)){
		$mnxt_events_url = get_event_link($dt['eid']);
		if(mnxt_events_forum() && $dt['tid']) $mnxt_events_url = get_thread_link($dt['tid']);
		$mnxt_events_desc = htmlspecialchars_uni($dt['description']);
		$mnxt_events_name = htmlspecialchars_uni($dt['name']);
		$mnxt_events_date = my_date($mybb->settings['dateformat'],$dt['starttime']);
		eval('$index_mnxt_events_event .= "'.$GLOBALS['templates']->get('index_mnxt_events_event').'";');
	}
	if($index_mnxt_events_event) eval('$index_mnxt_events = "'.$GLOBALS['templates']->get('index_mnxt_events').'";');
}
$plugins->add_hook('calendar_event_end','mnxt_events_9');
function mnxt_events_9(){
	if(!mnxt_events_forum()) return;
	global $mybb,$event,$calendar_mnxt_events_link;
	$calendar_mnxt_events_link = '';
	if($event['cid'] != (int)$mybb->settings['mnxt_events_cid']) return;
	if(!$event['tid']) return;
	global $moderator_options,$addevent,$edit_event;
	$moderator_options = $edit_event = '';
	$mnxt_events_url = get_thread_link($event['tid']);
	eval('$calendar_mnxt_events_link = "'.$GLOBALS['templates']->get('calendar_mnxt_events_link').'";');
}
$plugins->add_hook('calendar_start','mnxt_events_10');
function mnxt_events_10(){
	if(!mnxt_events_forum()) return;
	global $templates;
	control_object($templates,'
		function get($title, $eslashes=1, $htmlcomments=1){
			if($title == \'calendar_dayview_event\'){
				mnxt_events_9();
			}
			return parent::get($title, $eslashes, $htmlcomments);
		}
	');
}
$plugins->add_hook('calendar_editevent_start','mnxt_events_11');
$plugins->add_hook('calendar_do_editevent_start','mnxt_events_11');
function mnxt_events_11(){
	if(!mnxt_events_forum()) return;
	global $mybb,$event;
	if($event['cid'] != (int)$mybb->settings['mnxt_events_cid']) return;
	if(!$event['tid']) return;
	$t = get_thread($event['tid']);
	redirect('editpost.php?pid='.(int)$t['firstpost'],'This event is associated with XThreads Event forum. You\'ll be redirected for editing the thread.');
}
?>