<?php
/*
Autor: asanch92
shortcode: [c2em_acreditacions], el formulari CF7 ha de tenir un unic camp select i un unic camp input amb name=codi i no es obligatori per funcionar
Si es posar el shortcode [c2em_acreditacions] en un formulari CF7 es creara els camps datalectura.
És important que  hi hagi el camp select amb el nom franja i que hi hagi la relacio de la franja horaria i l'hora per tal de fer-la coincidir amb l'hora de client en comptes del servidor
[select franja "Ara|+2:00" "matí del primer dia|10:00-12:00" "tarda del primer dia|12:00-16:00" "matí del segon|8:00-10:00"] </p>

*/
//shortcode: [c2em_acreditacions]


//Definim el marge per arribar tard
define('RETARD', '00:15'); 

add_action( 'wpcf7_init', 'wpcf7_c2em_acreditacions' );
function wpcf7_c2em_acreditacions() {
    wpcf7_add_shortcode( 'c2em_acreditacions', 'c2em_acreditacions_php' ); 
}

function c2em_acreditacions_php(){
 	$content = '<input type="hidden" name="datalectura" value="'.time().'"<br>';
	$content.='<script type="text/javascript" language="Javascript">
	            jQuery(document).ready(function() {
					//Despres de seleccionar anem al camp entrada de dades
					jQuery("select").change(function(){
						jQuery(\'[name="codi"]\').focus();
					});
					jQuery(\'[name="codi"]\').keyup(function(){
						//te estructura de dni
						//alert(jQuery(this).val().length);
						if(jQuery(this).val().length=="9"){
							alert("codi");
						}
					});
	        		jQuery(":submit").click(function(){
						jQuery(\'[name="datalectura"]\').val("'.time().'");
					});
	            });
	        </script>';
	
    return $content ;
}

function comprovar_acreditacio($result, $tag) {  
	$form_codi='codi';
	$tag = new WPCF7_Shortcode( $tag );
	if ( $form_codi == $tag->name ) { //Nomes aplicat al camp de formulari amb nom $form_NIF
		$the_value = strtoupper($_POST[$form_codi]);
		if(!username_exists($the_value)){ 
			$result->invalidate( $tag, "L'usuari amb dni ".$the_value." no existeix." );
		}
	}
	
	return $result;
}

add_filter( 'wpcf7_validate_text', 'comprovar_acreditacio', 10, 2 );
add_filter( 'wpcf7_validate_text*', 'comprovar_acreditacio', 10, 2 );

// Despres d'enviar el missatge, posem les dades de l'usuari
function acreditacio_after_send_mail( $cf7 ) {
	$tags = $cf7->form_scan_shortcode();	 
	foreach ( $tags as $tag ) {
		if($tag['name']=='codi'){
			add_filter( 'wpcf7_form_response_output', 'acreditacio_form_response_output', 10, 4 );
		}
	}
}
add_action('wpcf7_mail_sent', 'acreditacio_after_send_mail');

//Si arriba aqui vol dir que les dades son valides i el formulari te un camp amb el nom 'codi'
//Tambe es necessita el camp franja per saber l'hora a comparar
//Mostrem en la seccio output el resultat 
function acreditacio_form_response_output($output, $class, $content, $this){
	$class = 'wpcf7-response-output';
	$role = '';
	$content = '';

	$role = 'alert';

	$submission = WPCF7_Submission::get_instance();
	$formdata = $submission->get_posted_data();
	$the_value = $formdata['codi'];
	$user = get_user_by( 'login', $the_value);
	$content='User is ' . $user->first_name . ' ' . $user->last_name. '<br>';

	$class .= ' wpcf7-mail-sent-ok';

	$atts = array(
		'class' => trim( $class ),
		'role' => trim( $role ) );

	$atts = wpcf7_format_atts( $atts );

	$output = sprintf( '<div %1$s>%2$s</div>',
		$atts, esc_html( $content ) );
	$the_value = $formdata['franja'];
	$output.= '<br>'.veure_reserves($user->ID, $the_value);
	return $output;
}

function veure_reserves($id, $franja){
	global $wpdb;
	$wpdb->show_errors();
	//Consultem els events reservats per l'usuari id
	$table_nameb = $wpdb->prefix.'em_bookings';
	$table_namee =  $wpdb->prefix.'em_events';
//$wpdb->prefix.'em_tickets_bookings'
	$rows = $wpdb->get_results ($wpdb->prepare("select event_name, event_start_time, event_end_time, event_start_date from `$table_nameb` b, `$table_namee` e  where e.event_id=b.event_id and `person_id` = '%s' ", $id));	
	/*$results = $wpdb->get_results("SELECT b.".implode(', b.', array_keys($EM_Booking->fields))." FROM ".EM_BOOKINGS_TABLE." b, ".EM_EVENTS_TABLE." e WHERE e.event_id=b.event_id AND person_id={$this->ID} {$blog_condition} {$status_condition} ORDER BY ".get_option('dbem_bookings_default_orderby','event_start_date')." ".get_option('dbem_bookings_default_order','ASC'),ARRAY_A);*/
	$wpdb->hide_errors();
	$content="";
	if ( $rows) {
		foreach ( $rows as $row ){
			$content.="Nom event apuntat: ". $row->event_name.".<br>";
			$content.="Hora inici: ". $row->event_start_time.".<br>";
			$content.="Hora final: ". $row->event_end_time.".<br>";
			//Convertim la data a time
			$dia=strtotime($row->event_start_date);
			//Convertim l'hora d'inici de l'event
			$horaIniciEvent=date("G:i",strtotime($row->event_start_time)); //G es 24h
			$horaFiEvent=date("G:i",strtotime($row->event_end_time)); 
			//Posem el dia d'ara en el format del dia en el event
			$today=date("Y-m-d");
			//Si l'event es el dia d'avui
			if ($row->event_start_date == $today) {
				//$content.="mateeix Dia: ". $today." .".$row->event_start_date."<br>";
				$Hora_ara= localtime(time(), true);
				$horaAraServidor=date("G:i");
				switch ($franja[0]){
					//Si $franja comensa per +, sumem les hores al temps actual del servidor
					case '+':
						//treim el simbol + i el convertim a temps
						$sumarHores=strtotime(substr($franja,1));
						//Hora inici de la franja
						$hif=$horaAraServidor+$sumarHores;
						$hff=$hif+date("G:i",RETARD); 
						$content.="ara : ".$hif.".<br>";
						break;
					//Si $franja comensa per -, restes les hores al temps actual del servidor
					case '-':
						$restarHores=strtotime(substr($franja,1));
						//Hora inici de la franja
						$hif=$horaAraServidor-$restarHores;
						$hff=$hif+date("G:i",RETARD); 
						break;
					//altrament:
					default:
						//Separem $franja en l'hora d'inicis de la franja (hif) i l'hora final de la franja (hff), suposo que te estructura: 10:00-12:00
						list($hifStr, $hffStr) = explode("-", $franja);
						//Convertim les hores en string al format HH:mm
						$hif=date("G:i",strtotime($hifStr));
						$hff=date("G:i",strtotime($hffStr));
				}
				
				//Comprovem que l'hora de l'event es troba dintre la franja horaria escollida
				if($horaIniciEvent-$hif>0 && $horaFiEvent-$hff0 ){
					$content.="Hora inici envet es mes tard que l'hora inici de la franja: ".$horaIniciEvent."<br>";
				}
				//Si l'hora de l'event coincideix amb la franja escollida
				$content.="araf : ".$hif.".<br>";
					$content.="dia: ".$dia.".<br>";
				$content.="Hora ara: ".$franja.".<br>";
			}
			/*else{
				$content.="L'event el qual esta apuntat no és avui"<br>";
			}*/
		}
	}
	return $content;
}
?>
