<?php

/*  Copyright 2014-2015 Scott Paterson

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

/*
Autor: asanch92
shortcode: [c2em_update_preu form_name="inscripcio" field_names="camp1;camp2;camp3..."]
Mostrar el contingut del què s'ha enviat pel formulari form_name, que haurà de tenir el camp "comprovar_tresorer" i "preu". Es podra actualitzar aquest camp i el preu
Dintre dels field_names no cal que es trobin "comprovar_tresorer" i "preu"
S'ha de posar el shortcode [c2em_update_preu form_name="inscripcio"] en una pagina per veure el contingut. Només hi podrà accedir amb permisos d'administrador
*/
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'contact-form-7-to-database-extension/contact-form-7-db.php' ) ) {

	add_shortcode( 'c2em_update_preu', 'c2em_veure_preu_html' ); 

	function c2em_veure_preu_html($atts) {
		$content="";
		//Si l'usuari no es administrador, sortim
	/*	if (!current_user_can('update_core')){
			$content="Has de tenir permisos d'administrador per veure aquesta pàgina. ";
			 return $content;
		}*/
		//Recuparem l'atribut del shortcode
		$var = shortcode_atts( array(
		    'form_name' => 'nom formulari',
			'field_names' => 'camp1;camp2',
		), $atts );
		//$content="<h3>".$var['form_name']."</h3>";
		$content="";
		//Recupareme el nom de la taula que crea CF7DB
		require_once (ABSPATH . '/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPlugin.php');
		$plugin = new CF7DBPlugin;
		$tableName = $plugin->getSubmitsTableName();
		
		//Si s'ha enviat el formulari per canviar els preus
		if (isset($_POST['cfdbc2emupdatepreus']) &&
                    wp_verify_nonce($_REQUEST['_wpnonce'])) {
			
			foreach ($_POST as $name => $value) { // busquem els checkboxes, 
				//si $name no te en el nom la paraula canviar, no es el camp del POST que ens interessa
				$canviar=strripos($name,'canviar');
				if($canviar===false){
					continue;
				}
				if($value!='no_canviar' ){
             		update_confirmacio_preu($value, $name, $var, $tableName);
					//actualitzem el rol a 'inscrit', inscrit-30 o 'subscriber'
 					c2em_update_role($value, $name, $tableName);
					//actualitzem el rol de subscriptor a inscrit
					$content.="<em>Dades modificades.</em> ";
				}
			}
		}

			

		//contingut a mostrar en forma de taula html
		$content.=c2em_show_form($var, $tableName);
		
		return $content ;
	}	
	
	


	function update_confirmacio_preu( $value, $name, $var, $tableName){
		// Dots and spaces in variable names are converted to underscores. For example <input name="a.b" /> becomes $_REQUEST["a_b"].
		// http://www.php.net/manual/en/language.variables.external.php
		// We are expecting a time value like '1300728460.6626' but will instead get '1300728460_6626'
		// so we need to put the '.' back in before going to the DB.
		global $wpdb;
		$name = str_replace('_', '.', $name);
		//treiem el text canviar del davant
		$name = str_replace('canviar', '', $name);

		//actualitzem el camp 'comprovar_tresorer'
		//Codis necessaris per controlar el tipus de pagament per gestionar despres el tresorer
		switch ($value) {
			case ''://el -4 es per saber que hem desmarcat per aqui
       			$confirmacio='-4';
        		break;
			case '1': 
				$confirmacio='1'; 
				break;
			default: // Validat per aqui, considerem que s'ha pagat per transferència  
				$confirmacio='2';
		}
		//$confirmacio=($value=='')? '-4' : '1'; 
		$wpdb->update($tableName, 
						array( 
							'field_value' => $confirmacio	// string
						), 
						array( 'form_name' => $var['form_name'] ,
								'field_name' => 'comprovar_tresorer',
								'submit_time' =>$name),
						array( 
							'%s'	// value1
						), 
						array( '%b', '%s', '%f' ) 
					);
		//actualitzem el camp 'preu' si es validad per aqui
	//	if($value!='' || $value!='1'){
		if($confirmacio=='2'){
			$wpdb->update($tableName, 
							array( 
								'field_value' => $value	// string
							), 
							array( 
									'field_name' => 'preus',
									'submit_time' =>$name),
							array( 
								'%s'	// value1
							), 
							array( '%s', '%f' ) 
						);
		}

	}

	//actualitzem el rol a 'inscrit'  o 'subscriber'
	function c2em_update_role($value, $submit_time, $tablename){
		// Dots and spaces in variable names are converted to underscores. For example <input name="a.b" /> becomes $_REQUEST["a_b"].
		// http://www.php.net/manual/en/language.variables.external.php
		// We are expecting a time value like '1300728460.6626' but will instead get '1300728460_6626'
		// so we need to put the '.' back in before going to the DB.
		//Recupareme el dni
		global $wpdb;
		$submit_time = str_replace('_', '.', $submit_time);
		//treiem el text 'canviar' del davant de $submit_time
		$submit_time = str_replace('canviar', '', $submit_time);
		//recuparem el login segons el submit_time i el camp identidad o dni 
		$row = $wpdb->get_row($wpdb->prepare("select * from `$tablename` 
												where `submit_time` = '%s' and (`field_name`='identidad' or `field_name`='dni')
												",$submit_time));	
		if ($row) {
			//Recuparem la dades de l'usuari a wp
			$user = get_user_by( 'login', $row->field_value);
			//Actualitzem el rol si esta validat a inscrit o inscrit-30 o sino a subcriber, que era l'original
			if($value==''){ //no validat 
				//li posem el subscriber
				$user->set_role('subscriber');
				//li treiem el role inscrit 
				if(in_array( 'inscrit', $user->roles)){
					$user->remove_role('inscrit');
				}	
				//li treiem el role inscrit-30
				if(in_array( 'inscrit-30', $user->roles)){
					$user->remove_role('inscrit-30');
				}
			}
			if($value!='' && $value!='1'){//valditat
				//treiem el rol subscriber
				if(in_array( 'subscriber', $user->roles)){
					$user->remove_role('subscriber');
				}	
				if($value=='30'){
					$user->set_role('inscrit-30');
					if(in_array( 'inscrit', $user->roles)){
						$user->remove_role('inscrit');
					}
				}
				else{
					$user->set_role('inscrit');
					if(in_array( 'inscrit-30', $user->roles)){
						$user->remove_role('inscrit-30');
					}
				}
			}
		}
	}
	//contingut a mostrar en forma de taula html
	function c2em_show_form($var, $tableName){
		//Recuparem en vector els camps i treiem espais
		$field_names=explode(";", $var['field_names']);
		$arr_length = count($field_names);
		for($i=0;$i<$arr_length;$i++){
			$field_names[$i]=trim($field_names[$i]);
		}
		
		global $wpdb;
		//recuparem les files que te la taula (una per enviament, segons els submit_time)
		$submit_times = $wpdb->get_results( 
							$wpdb->prepare("select DISTINCT `submit_time` from `$tableName` where `form_name` = '%s' ORDER BY  `submit_time` DESC", $var['form_name']),
						ARRAY_N);	
		//Camps del formulari
		$table_field_names =$wpdb->get_results( 
							$wpdb->prepare("select DISTINCT `field_name` from `$tableName` where `form_name` = '%s' ORDER BY `field_order`", $var['form_name']),
						ARRAY_N);	
		if ( $submit_times && $table_field_names) {
			$content="<form action=".$_SERVER['REQUEST_URI']." method='post'> ";
			$content.=wp_nonce_field();
			$content.="<input name='cfdbc2emupdatepreus' type='hidden' value='rows'/>
						<span class='dashicons dashicons-thumbs-up' style='color: green;'></span> Pagat per tarjeta (validat pel TPV). <code>comprovar_tresorer==1  </code><br>
						<span class='dashicons dashicons-thumbs-up' style='color: blue;'></span> Pagat per transferència (o validat per aquí). <code>comprovar_tresorer==2 </code><br>
						<span class='dashicons dashicons-warning'' style='color: LightPink;'></span> Encara no ha pagat. Preu no validat ni pel TPV ni pel tresorer.. <code>comprovar_tresorer==-1  </code><br>
						<span class='dashicons dashicons-warning' style='color: Magenta;'></span> Modificat per aquí que encara no ha pagat. Preu no validat ni pel TPV ni pel tresorer.. <code>comprovar_tresorer==-4 </code><br>
						<span class='dashicons dashicons-dismiss' style='color: orange;'></span> Error en la targeta. Per més detalls s'ha de consultar el TPV virtual. <code>comprovar_tresorer==-2  </code><br>
						<span class='dashicons dashicons-dismiss' style='color: red;'></span> Error en la rebuda de la signatura, el més probable que la clau d'encriptació no sigui correcte. Per més detalls s'ha de consultar el TPV virtual. <code>comprovar_tresorer==-3  </code><br>
						<span class='dashicons dashicons-dismiss' style='color: yellow;'></span> Error desconegut. Per més detalls s'ha de consultar el TPV virtual. <br><br>
						<table id='taula'>
						 <thead>		
							<tr>";
			foreach ( $table_field_names as $table_field_name ){
				//no mostrem les dues ultimes columnes
				if($table_field_name[0]=="Submitted Login" || $table_field_name[0] == "Submitted From"){
					continue;
				}
				//Només posem els camps que s'ha donat al shortcode i es troben en el formulari
				if(in_array($table_field_name[0],$field_names) || $table_field_name[0]=="preus" || $table_field_name[0]=="comprovar_tresorer"){
					$content.="<th>". $table_field_name[0] ."</th>";	
				}		
			}
			$content.="</tr> </thead><tbody>";
		
			foreach ( $submit_times as $submit_time ){
				$content.="<tr>";
				$rows = $wpdb->get_results( 
							$wpdb->prepare("select `field_name`, `field_value` from `$tableName` 
										where `form_name` = '%s' and `submit_time` = %F ORDER BY `field_order`", 
										$var['form_name'], $submit_time[0]),ARRAY_N);
				if ( $rows ) {
					foreach ( $rows as $row ){
						if($row[0]=="Submitted Login" || $row[0] == "Submitted From"){
							continue;
						}
						//El camp comprovar_tresores, l'actualitzem si s'ha posat un preu o no
						if($row[0]=="comprovar_tresorer"){
							switch ($row[1]) {
								case '2':
									$content.="<td class='.masterTooltip' title='Si no es vol validar, en el preu escollir la opció \"No comprovat\" '> <span class='dashicons dashicons-thumbs-up' style='color: blue;'></span></td> ";
									break;
								case '1':
									$content.="<td class='.masterTooltip' title='Si no es vol validar, en el preu escollir la opció \"No comprovat\" '> <span class='dashicons dashicons-thumbs-up' style='color: green;'></span></td> ";
									break;
								case '-1':
									$content.="<td class='.masterTooltip' title='Encara no ha pagat. Es validarà en el moment que es posi un preu' ><span class='dashicons dashicons-warning' style='color: LightPink;'></span></td>";
									break;
								case '-2':
									$content.="<td class='.masterTooltip' title='Error en la targeta. Es validarà en el moment que es posi un preu' ><span class='dashicons dashicons-dismiss' style='color: tomato;'></span></td>";
									break;
								case '-3':
										$content.="<td class='.masterTooltip' title='Error en la rebuda de la signatura, el més probable que la clau d\''encriptació no sigui correcte. Es validarà en el moment que es posi un preu' ><span class='dashicons dashicons-dismiss' style='color: red;'></span></td>";
								case '-4':
										$content.="<td class='.masterTooltip' title='Modificat per aquí per considerar que encara no ha pagat. Es validarà en el moment que es posi un preu' ><span class='dashicons dashicons-warning' style='color: Magenta;'></span></td>";
									break;
								 default:
									$content.="<td class='.masterTooltip' title='Error desconegut. Es validarà en el moment que es posi un preu' ><span class='dashicons dashicons-dismiss' style='color: yellow;'></span></td>";

							}
							/*if($row[1]=='2'){
								$content.="<td class='.masterTooltip' title='Si no es vol validar, en el preu escollir la opció \"No comprovat\" '> <span class='dashicons dashicons-thumbs-up' style='color: blue;'></span></td> ";
							}
							elseif($row[1]=='1'){	
								$content.="<td class='.masterTooltip' title='Si no es vol validar, en el preu escollir la opció \"No comprovat\" '> <span class='dashicons dashicons-thumbs-up' style='color: green;'></span></td> ";
							}
							else{//Errors de pagament
								
								$content.="<td class='.masterTooltip' title='Es validarà en el moment que es posi un preu' ><span class='dashicons dashicons-dismiss' style='color: red;'></span></td>";
							}
							//continue; 
							$content.="<td>";
							if($row[1]!='1'){
								//$content.="<input type='checkbox' id='hidden".$submit_time[0]."' value='checkhidden' checked='checked' style='display: none;'>";
								$content.="<input type='checkbox' name='".$submit_time[0]."' id='".$submit_time[0]."' value='initUncheck'>";
							}
							else{
								$content.="<input type='checkbox' name='".$submit_time[0]."' id='".$submit_time[0]."' value='initCheckHidden' style='display: none;' >";
								$content.="<input type='checkbox' name='initCheck' value='initCheck' checked='checked' >";
							}		
											
							$content.="</td>";*/
							
						}
						if(in_array($row[0],$field_names) && $row[0]!="preus" ){
							$rols='';
							if($row[0]=='identidad' || $row[0]=='dni'){
								$user = get_user_by( 'login', $row[1]);
								//Tots els rols separats per coma, si es que n'hi ha algun
								if(count($user->roles)>0){
									$rols=implode("','",$user->roles); 
								}	
								$content.="<td>".$row[1]." (rols: ".$rols.")</td>";		
							}
							else{
								$content.="<td>".$row[1]."</td>";		
							}	
						}
						if($row[0]=="preus" ){
							if($row[1]==''){
								$str="Encara no ha ingressat res ";
							}
							else{
								$str="Ha ingressat: ".$row[1]."&euro;. ";
							}
							$content.="<td>".$str."<br>Canviar a: <div><select name='canviar".$submit_time[0]."' id='".$submit_time[0]." '>
											  <option value='no_canviar' selected='selected'>'No canviar'</option>
											  <option value='30'>30 &euro;</option>
											  <option value='75'>75 &euro;</option>
											  <option value='100'>100&euro;</option>
											  <option value='95'>95 &euro;</option>
											  <option value='120'>120 &euro;</option>
											  <option value=''>'No comprovat'</option>
											  <option value='0'>'Gratuït'</option>
											  <option value='1'>'Preu anterior pagat per TPV'</option>
											</select></div></td>";
						}
					}
				}
				$content.="</tr>";
			}
		
		
			$content.="</tbody></table><br>
			
			<input type='submit' value='Actualitzar' id='actualitzar' name='cfdbc2emupdate' style='display: none;'>
			<br>
			</form>";
//<a	 href='' ><button  type='button' id='actualitzar' name='cfdbc2emupdate' onclick='this.form.submit()' disabled>Actualitza</button></a>
//<a	name='cfdbc2emupdate' onclick='this.form.submit()' id='actualitzar' href='' disabled >Actualitza</a>
			//Afegim les funcions jQuery que modificara-la taula, aconsegueixo posaro en el header pero no respon
			//add_action( 'wp_enqueue_scripts', 'add_my_script' );
			$content.="<script type='text/javascript' language='Javascript'>
                jQuery(document).ready(function() {
            		jQuery('select').click(function(){
						jQuery('#actualitzar').show();
					});
				    jQuery('#taula').DataTable( {
					});
                });

            </script>";

		}

		return $content;
	}
	
}
