<?php 

include_once ('include/usession.inc.php');

include_once ('include/config.php');
include_once ('include/template.inc.php');
include_once ('include/template_settings.inc.php');
include_once ('include/active_user.php');
include_once ('include/meeting.inc.php');
include_once ('include/messagebutton.inc.php');
include_once ('include/palette.inc.php');


class UserMessageFeed {
	
	var $doc_title;
	private $tpl;
	private $js_includes = array();
	private $css_includes = array();
	private $template_settings = array();
	private $palette;
	
	public function __construct () {
		
	    $this->palette = new Palette();
		array_push ($this->js_includes, '/js/support.js');
		array_push ($this->js_includes, '/js/touch_support.js');
		
		array_push ($this->css_includes, '/include/fonts/font-awesome/css/font-awesome.min.css');
		array_push ($this->css_includes, '/include/style/messagebox.css');
		$this->doc_title = 'Message center';
	}
	
	public function init_template () {
		
		$th = '';
		if (isset($_SESSION['th'])) {
			$th = $_SESSION['th'];
		}
		$this->tpl = new Template($th);
		$this->template_settings = $this->tpl->get_settings_ref();
		// enable pseudo template if meeting is known
		if (isset($_SESSION['meeting_id']) && intval($_SESSION['meeting_id'])) {
			$this->tpl->set_mid($_SESSION['meeting_id']);
			$pt = $this->tpl->enable_pseudo_template($_SESSION['meeting_id']);
			if ($pt !== false) {
				//var_dump($pt);
			}
		}
	}
	
	public function get_meeting_properties_by_name ($mname) {
		$mt = new Meeting();
		// try name first
		$mdata = $mt->exists ($mname);
		if ($mdata === false) {
			// try with alias
			$mdata = $mt->exists_by_alias ($mname);
			if ($mdata === false) {
				// a meeting with this name does not exist, try to get a list of
				// available meetings.
				
				return false;
			}
		}
		return $mdata;
	}
	
	public function get_meeting_properties_by_hash ($mh) {
		$mt = new Meeting();
		// try name first
		$mdata = $mt->exists_by_hash ($mh);
		if ($mdata !== false) {
			$_SESSION['meeting_id'] = $mdata['meeting_id'];
		}
		return $mdata;
	}

	public function get_meeting_properties_by_id ($id) {
		$mt = new Meeting();
		// try name first
		$mdata = $mt->get ($id);
		if ($mdata !== false) {
			$_SESSION['meeting_id'] = $mdata['meeting_id'];
		}
		return $mdata;
	}
	
	
	public function display_message_window ($mdata) {
		
		if ($mdata['meeting_type'] == 'messagebox') {
			return $this->display_messagebox($mdata);
		}
		array_push ($this->js_includes, '/js/ranking_support.js');
		array_push ($this->css_includes, '/include/style/ranking.css');
		return $this->display_ranking($mdata);
	}
		
	public function display_messagebox ($mdata) {
	
		if ($mdata['th'] != '') {
			$_SESSION['th'] = $mdata['th'];
		}
		$this->doc_title = $mdata['name'];
		$_SESSION['meeting_id'] = $mdata['meeting_id'];
		$mb = new MessageButton();	
		$mb->set_queue($mdata['mhash']);	
		$mbprops = $mb->get_properties();
		if ($mbprops['enabled'] == false) {
			$ctext = 'Message to the moderator:';
			$sbtext = 'Send to moderator';
			$ubtext = 'Upload';
			$uctext = 'Upload a photo or an image:';
			$phtext = 'Type your message here...';
		} else {
			$ctext = $mbprops['message_caption'];
			$sbtext = $mbprops['submit_button_text'];
			$ubtext = $mbprops['upload_button_text'];
			$uctext = $mbprops['upload_caption'];
			$phtext = $mbprops['message_placeholder'];
		}
		if ($mdata['color_picker_enabled']) {
    		$rows = 5;
		} else {
		    $rows = 6;
		}
		$form = ' <!-- message popup -->	
            <script> var random_color='.$mdata['random_color_enabled'].'; </script>		
			<div id="idMessagePopup" class="messagePopup" style="display: block;">	
				<h2>'.$ctext.'</h2>			
				<form name="messageForm">
					<!--	
					<label for="messageContent">'.$ctext.'</label>
					<br> -->
					<textarea name="messageContent" cols="40" rows="'.$rows.'" placeholder="'.$phtext.'"></textarea>';
        if ($mdata['color_picker_enabled']) {
		      $form .= $this->color_change_widget();
        }
        $form .= '<br>					
					<input class="formButton" onclick="touch_send_moderator_message(\''.$mdata['mhash'].'\');" name="messageSendModerator" value="'.$sbtext.'" type="button">';
	    //$form .= "<a href='#' id='messageColorSelect' class='messageToolButton'  onclick='render_color_changer(); return false;'> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </a>";
	    
		if ($mdata['show_upload'] || $mdata['show_help_button']) {
//			$form .= '<div id="picContainer"> <label for="sendPic" id="sendPicLabel">'.$uctext.'</label>					
//					<span id="sendPicSelectorContainer"><a href="#" onclick="get_file();"><img id="picActuator" src="/include/images/camwhite100.png" title="Add a photo or image file to your message"></a><input type="file" accept="image/*;capture=camera" name="sendPic" id="sendPicSelector"></span>
//					<span id="helpButton"><a href="#" onclick="show_help();"><img id="helpActuator" src="/include/images/questionmarkwhite100.png" title="Help"></a></span>
//					<span id="imgUploadPercLabel"></span>
//					</div>';
			$form .= '<div id="picContainer"> ';
			if ($mdata['show_upload']) {
			     $form .= '<label for="sendPic" id="sendPicLabel">'.$uctext.'</label>
					<span id="sendPicSelectorContainer"><a href="#" onclick="get_file(); return false;"><i id="iconActuator" class="fa fa-camera-retro fa-4x" title="Add a photo or image file to your message"></i><img id="picActuator" src="/include/images/camwhite100.png" title="Add a photo or image file to your message"></a><input type="file" accept="image/*;capture=camera" name="sendPic" id="sendPicSelector"></span>';
			}
			if ($mdata['show_help_button']) {
				$form .= '<span id="helpButton"><a href="#" onclick="show_help(); return false;" class="veryBig">?</a></span>';
			}
			if ($mdata['show_upload']) {
			    $form .= '<span id="imgUploadPercLabel"></span>';
			}
			$form .= '</div>';
				
		}
		$form .= '			<span id="messageStatus"></span>
				</form>				 		
			</div> <!-- ! message popup --> ';
		
		if ($mdata['show_upload']) {
//			$form .= $this->display_uploader_window($mdata, $uctext, $ubtext);
		}
		$form .= $this->script_color_palette();
		return $form;
	}
	
	public function color_change_widget() {
	    
	    $colors = $this->palette->get_colors();
	    
	    $form = "<ul class='colorList'>";
	    foreach ($colors as $key => $color) {
	        $form .= "<li><span onclick=\"select_bgcolor('".$color."'); return false;\" style=\"background-color: ".$color.";\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </li>";
	    }
	    $form .= "</ul><br>";
	    
        return $form;	    
	}
	
	public function script_color_palette () {
	    
	    $colors = $this->palette->get_colors();
	    
	    $form = "\n<script> var color_palette = [";
	    foreach ($colors as $key => $color) {
	        $form .= "\"".$color."\",";
	    }
	    $form .= "];</script>";
	    return $form;
	}
	
	public function display_ranking ($mdata) {
		
		$form = '';
		if ($mdata['th'] != '') {
			$_SESSION['th'] = $mdata['th'];
		}
		$this->doc_title = $mdata['name'];
		$_SESSION['meeting_id'] = $mdata['meeting_id'];
		$mb = new MessageButton();
		$mb->set_queue($mdata['mhash']);
		$mbprops = $mb->get_properties();
		if ($mbprops['enabled'] == false) {
			$ctext = 'Message to the moderator:';
			$sbtext = 'Send to moderator';
			$ubtext = 'Upload';
			$uctext = 'Upload a photo or an image:';
			$phtext = 'Type your message here...';
		} else {
			$ctext = $mbprops['message_caption'];
			$sbtext = $mbprops['submit_button_text'];
			$ubtext = $mbprops['upload_button_text'];
			$uctext = $mbprops['upload_caption'];
			$phtext = $mbprops['message_placeholder'];
		}
		$form = ' <!-- message popup -->
            <script> var random_color='.$mdata['random_color_enabled'].'; </script>
			<div id="idMessagePopup" class="messagePopup" style="display: block;">
				<script> var ranking_queue = "'.$mdata['mhash'].'"; init_ranking();</script>
				<!-- <h2>'.$ctext.'</h2> -->
				<form name="messageForm">
					
					<!-- <label for="messageContent">'.$ctext.'</label>
					<br> -->
					<textarea name="messageContent" cols="30" rows="1" placeholder="'.$phtext.'"></textarea>
					
					<input class="formButton" onclick="touch_send_moderator_message(\''.$mdata['mhash'].'\');" name="messageSendModerator" value="'.$sbtext.'" type="button">';
		
		$form .= '			<span id="messageStatus"></span>
				</form>
				<div id="idMessageRanking"></div>
			</div> <!-- ! message popup --> ';
		
		$form .= $this->script_color_palette();
		return $form;
	}
	
	public function display_uploader_window ($mdata, $uctext, $ubtext) {
		
		$form = ' <!-- uploader popup -->
			<div id="idUploadPopup" class="messagePopup" style="display: block;">
				<form name="uploadForm">
					<label for="sendPic">'.$uctext.'</label>
					<br>
					<input type="file" accept="image/*;capture=camera" name="sendPic">
					<span id="imgUploadPercLabel"></span>
					<br> 
					<input class="formButton" onclick="touch_send_moderator_pic(\''.$mdata['mhash'].'\');" name="uploadSendModerator" value="'.$ubtext.'" type="button">
					<span id="messageStatusUL"></span>
				</form>
			</div> <!-- ! message popup --> ';
		return $form;
	}
	
	// This used to display a list of public meetings, but that had no practival use
	// Now we just call the splash page.
	public function display_meetings () {
		
		
		$form =	$this->display_splash_page();
		return $form;
	}
	
	
	public function display_splash_page () {
		
		$file = file_get_contents('include/static/splash.html');
		return $file;
	}
	
	public function get_meeting_list () {
		
		$mm = new Meeting();
		$list = $mm->get_list();
		return $list;
	}
	
	
	public function resolve_short_url ($su) {
		
		$opts = array(
				'http' => array(
						'method' => 'GET',
						'header' => "Accept: */*\r\n" .
						"Referer: ".BASEURL."\r\n".
						"Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n".
						"Accept-Language: en\r\n",
						'timeout' => 10,
						'ignore_errors' => true
							
				)
		);
		
		$context = stream_context_create($opts);
		
		$file = file_get_contents (IVSIURL.'oljson.php?'.$su, false, $context, 0, 30000);		
		
		if ($file === false) {
		      //echo "Error retrieving file\n";
		      return false;
		}
		$this->response_headers = $http_response_header;
		if ($this->get_status() == "200") {
			
			$su_data = json_decode ($file, true);
			return $su_data;
		}
		return FALSE;
	}
	
	// Retrieves the HTTP status code from the response headers
	public function get_status () {
	
		if (!is_array($this->response_headers)) {
			return false;
		}
		$status = false;
		// Normally first line should be the exit code already, but it is
		// more foolproof to go through all
		foreach ($this->response_headers as $key => $value) {
			$items = explode(' ', $value);
			//var_dump($items);
			if (strncmp('HTTP', $items[0], 4) == 0) {
				$status = $items[1];
				break;
			}
	
		}
		return $status;
	}
	
	
	public function run () {
		
		$static_content = false;
		$form = '';
		$doc_elem = array();
		$js_text = 'function init() {setInterval(\'ping_server()\', 290000); uploader_init();}';
		
		// if no parameters given bail out to global homepage
		if (!count($_GET) ) {
			$static_content = true;
			$form = $this->display_meetings();
			
			//header ("Location: ". HOMEURL);
			//return '';
		}
		
		if (isset($_GET['mh'])) {
			$mdata = $this->get_meeting_properties_by_hash ($_GET['mh']);
			if ($mdata === false) {
				$static_content = true;
				$form = $this->display_meetings();
			} else {
				$form = $this->display_message_window($mdata);
			}
			// register user here, maybe we have a sensible meeting_id by now.
			$ua = new ActiveUser($_SESSION['c_company'], 
								$_SESSION['meeting_id'], session_id());
		} else {

			foreach ($_GET as $key => $value) {
			
				//echo $key;
				break;
			}
			// first check if our key is linking to a message queue or to an ivs script
			if (1) {
				// 	
				$su_data = $this->resolve_short_url($key);
				// var_dump($su_data);
				if (isset($su_data['s_id']) && $su_data['s_id'] != 0) {
					
					header ("Location: ".$su_data['url']."&fv=1");
					$content = 'If you are not being redirected, please click <a href="'.$su_data['url'].'&fv=1">here</a>';
				} else if (isset($su_data['m_id']) && intval($su_data['m_id']) != 0) {
					$mdata = $this->get_meeting_properties_by_id ($su_data['m_id']);
					if ($mdata === false) {
						$static_content = true;
						$form = $this->display_meetings();
					} else {
						$form = $this->display_message_window($mdata);
					}
					// register user here, maybe we have a sensible meeting_id by now.
					$ua = new ActiveUser($_SESSION['c_company'],
									$_SESSION['meeting_id'], session_id());
					
				} else {
					// error set probably
					$static_content = true;
					
					$form = $this->display_meetings($su_data['error']);
				}
			} else {
				// first key is ur short url to the IVS-Internet script, redirect...			
				header ("Location: ".IVSIURL."ol.php?".$key);
				$content = 'If you are not being redirected, please click <a href="https://www.ivsinternet.nl/ol.php?'.$key.'">here</a>';
			}
		}	
		if ($static_content) {
			$doc = $form;
		} else {
			$this->init_template();
			$contents = $form;
			$doc_elem['page_title'] = "<h1 id='pageTitle'>".$this->doc_title."</h1>"; 
			$doc_elem['doc_title'] = $this->doc_title;
			$doc_elem['menu'] = '';
			$doc_elem['content'] = $contents;
			$doc_elem['scripting'] = $js_text;		
			$doc_elem['tracker_code'] = file_get_contents (TRACKER_CODE);
			
			$doc = $this->tpl->run($doc_elem, $this->js_includes, $this->css_includes);
		}
		return $doc;
	}
}


$mf = new UserMessageFeed ();
$out = $mf->run();

echo $out;

?>