<?php
/*
	Plugin Name: C2EM Crear factures i rebuts
	Description: <p>Crear una factura o un rebut d'un pagament</p>. <p> S'ha de posar el shortcode <code>[c2em_factura form_name1="inscripcio" form_name2="pagament"]</code> on form_name és el nom del formulari des d'on es va pagar</p>
	Author: Arnau Sanchez 
	License: GPL3
	Version: 1.1.3
*/

/*
Pugin que depen de contact-form-7-db per desar les dades.
Es suposo que s'ha creat un formulari (amb CF7 ) i CF7DB ha desat les dades enviades pel mateix formulari
En aquest formulari hi ha d'haver el camp amb nom 'num_ordre' per a que funcioni.
El camp num_ordre es l'identificador de comanada d'on es creara un numero de rebut i el seu rebut en PDF 
*/
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'contact-form-7-to-database-extension/contact-form-7-db.php' ) ) {
	//Iniciem la base de dades 
	function factura_c2em_bbdd() {
		require_once (ABSPATH . '/wp-content/plugins/factura_c2em/factura_c2em_bbdd.php');
		$rebut = new C2EM_factura_bbdd();
    	return $rebut->init();
	}
	//Engeguem els control de la base de dades de rebuts i factures
	factura_c2em_bbdd();

	add_shortcode( 'c2em_factura', 'c2em_factura_html' ); 

	function c2em_factura_html($atts) {
		$camps= array("num_ordre", "comprovar_tresorer","preus");
		//Recuparem l'atribut del shortcode
		$var = shortcode_atts( array(
		    'form_name1' => 'nom formulari',
			'form_name2' => '',
		), $atts );

 		$content="";
		$current_user = wp_get_current_user();
		
		//Si no esta loguejat
		if (0 == $current_user->ID ) {
			$content="<h3>Has d'accedir amb el teu nom d'usuari i contrasenya per poder obtenir el rebut. </h3> ";
			$content.=wp_login_form();
			function my_login_logo_url() {
   				 return home_url();
			}
			add_filter( 'login_headerurl', 'my_login_logo_url' );
			return $content;
		}
		
		
		//Si s'ha enviat el formulari enviat per aqui mateix
		if (isset($_POST['c2emfactura']) &&
                    wp_verify_nonce($_REQUEST['_wpnonce'])) {	
			//Generem i enviem el rebut per mail		
			//$content=c2em_enviarrebut($_POST, $current_user->user_email);
			//Generem i mostrem un link per desacarregar
			//afegim a les dades el dni i nom de la persona que ho solicita
			$content.=c2em_crear_pdf($_POST);
			$admin_mail="<a href='mailto:".get_option("admin_email")."'><span class='dashicons dashicons-email-alt'></span> ".get_option("admin_email")."</a>"; 
			$content.="<br>Si no rep bé les dades, pot torna-ho a provar o es pot posar en contacte amb ".$admin_mail;
			$content.="<br><br>";
		}
		else{
			/*//Creem el formulari a mostrar
			if (!empty($_POST["identidad"])){ //prove del formulari inscripcio
				$id_usuari=$_POST['identidad'];
			}
			if (!empty($_POST["dni"])){ //prove del formulari pagament
				$id_usuari=$_POST['dni'];
			}
			$content=c2em_taula_rebuts($var, $_POST['$id_usuari'], $camps, $current_user->user_login);*/
			$nom=$current_user->user_firstname." ".$current_user->user_lastname;
			$content=c2em_taula_rebuts($var, $camps, $current_user->user_login, $nom);
			if($content==""){
				$content="No hi ha dades de pagament per a l'usuari ".$current_user->user_login. ".<br>";
			}
		}	
		
		
		return $content ;
	}	

	//Generem, desem en el servidor i mostrem el link per descarregar el pdf
	function c2em_crear_pdf($POST){
	
		//Treiem el numero d'ordre per crear el final del nom del fitxer
		$dades = explode(";", $POST['pdf']);
		
		$file_name = 'rebut_c2em_'.$dades[2].'.pdf';
	
		//Direccio per la web
		$file_name_url=home_url(). '/wp-content/plugins/factura_c2em/rebuts/'.$file_name;
		//Direccio interna per desar-lo
		$file_name_path =ABSPATH. '/wp-content/plugins/factura_c2em/rebuts/'.$file_name;
		/*if(file_exists($file_name_path)){
			$content=" <a class='read-more' href='".$file_name_url."' download><span class='dashicons dashicons-download'></span> Descarrega el rebut</a>";
		}
		else{*/
		//Creem el pdf
		require_once (ABSPATH . '/wp-content/plugins/factura_c2em/c2em_fpdf.php');
		ob_clean(); 
		$pdf = new C2EM_FPDF();
		$pdf->cos_factura($POST);
		//El desem en el servidor
		$pdf->Output('F',$file_name_path);
		$content=" <a class='read-more' href='".$file_name_url."?t=".time()."'  download><span class='dashicons dashicons-download'></span> Descarrega el rebut generat</a>";
		//}
		return $content;
		
	}
	
	//Funcio creada abans de que pugues aprendre a com descarregar el fitxer :(
	function c2em_enviarrebut($POST, $email){

		global $wp;
		$current_url = home_url(add_query_arg(array(),$wp->request));
		$message="C2EM li envia el rebut adjunt demanat des de ".$current_url;
		$message.="\nSalutacions, \nEquip C2EM";
		

		$attachments = array();
		$pdf_attachment = array(
		'pdf_doc_attachment_id' => "1",
		);
		$attachments[] = wp_json_encode( $pdf_attachment );

		//Parametres importants per a la funcio c2em_add_string_attachments
		update_option("c2em_fpdf", $POST);
		update_option("c2em_fpdf_send_ok", "ko");
		add_action( 'phpmailer_init', 'c2em_add_string_attachments' );

		$subject="Rebut C2EM";
		if(isset($POST['nom_empresa'])){
			$subject.=" per a \"".$POST['nom_empresa']."\"";
		}
		$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
		wp_mail($email, sprintf(__("[%s] ".$subject), $blogname), $message, $headers='', $attachments);
		
		$content="<br><br>";
		if (get_option("c2em_fpdf_send_ok")=="ok"){
			$content.="Rebut creat i enviat a <span class='dashicons dashicons-email-alt'></span> ".$email. " .  <hr> ";
		}
		else{
			$admin_mail="<a href='mailto:".get_option("admin_email")."'><span class='dashicons dashicons-email-alt'></span> ".get_option("admin_email")."</a>"; 
			$content="Ho sentim, el missatge no s'ha pogut enviar. Provi-ho més tard o enviï un missatge a ".$admin_mail;
		}
		return $content;
	}
	
	function c2em_add_string_attachments( $phpmailer ) {
	// the previous attachment will fail since it's not an actual file
	// we will use the error to attach it as a string
	
		if ( '' !== $phpmailer->ErrorInfo ) {
		
			// error info
			$error_info = $phpmailer->ErrorInfo;
			$translations = $phpmailer->getTranslations();
		
			// See if there was an error attaching something to the email
			if ( false !== stripos( $error_info, $translations['file_access'] ) ) {
				// remove the messaging
				$attachment_string = str_replace( $translations['file_access'], '', $error_info );
				
				// the result will be the json encoded string that was attempted to be attached by default
				$attachment = json_decode( $attachment_string );
			
				// sanity check to see if there is an actual id that we're looking for
				if ( isset( $attachment->pdf_doc_attachment_id ) ) {
				
					// get the doc id so that you can create the content string for the attachment	
					$doc_id = $attachment->pdf_doc_attachment_id;
					// do something to create the string attachment
					$file_name = 'rebut_c2em.pdf';
					require_once (ABSPATH . '/wp-content/plugins/factura_c2em/c2em_fpdf.php');
					$pdf = new C2EM_FPDF();
					$POST = get_option('c2em_fpdf');
					$pdf->cos_factura($POST);
					//$pdf->prova();
					$pdf_string =$pdf->Output('S');
					update_option("c2em_fpdf_send_ok", "ok");
				
					try {
						$phpmailer->AddStringAttachment( $pdf_string, $file_name, 'base64', 'application/pdf' );
					} catch ( phpmailerException $e ) {
						continue;
					}
				}
			}
		}
	}
	
	//Es mostra els intents de pagament i nomes es creara el pdf del primer que esta validat 
	//function c2em_taula_rebuts($var, $identidad, $camps, $use_login){
	function c2em_taula_rebuts($var,  $camps, $use_login, $user_name){	
		$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();
		global $wpdb;
		//recuparem les files que te la taula (una per enviament, segons els submit_time) i que ho ha fet l'usuari loguejat
		$submit_times = $wpdb->get_results( 
								$wpdb->prepare("select DISTINCT `submit_time` from `$tableName` 
												where (`form_name` = '%s' or `form_name` = '%s')  and `field_value` = '%s' 
												ORDER BY  `submit_time` DESC", $var['form_name1'],$var['form_name2'], $use_login),
								ARRAY_N);	
		//Camps del formulari
		$field_names =$wpdb->get_results( 
							$wpdb->prepare("select DISTINCT `field_name` from `$tableName` where (`form_name` = '%s' or `form_name` = '%s') ORDER BY `field_order`", $var['form_name1'],$var['form_name2']),
						ARRAY_N);	

		$primerRebut=true;
		if ( $submit_times && $field_names) {
			$content="<form action=".$_SERVER['REQUEST_URI']." method='post'> ";
			$content.=wp_nonce_field();
			$content.="	<h3>Dades de l'empresa </h3>
					<table>
						<tbody>		
						<tr>
					<td><label for='cif'>CIF*</label> <input class='cif' type='text' name='cif' size='20'  style='display: inline;' required/></td>
					<td><label for='nom_empresa'>Nom de l'empresa*</label> <input class='nom_empresa' type='text' name='nom_empresa' size='40'  style='display: inline;' required/></td>
					</tr>
					<tr>
					<td colspan='2'>
					<label for='direccio'>Adreça*</label> <input type='text' name='direccio' rows='5' col='40'  placeholder='Carrer, número CP Ciutat' required />
					</td>
					</tr>
					</tbody></table>
					<br>";
			$content.="<table align='center'>
						<tbody>		
						<tr>";
							
						$content.="<th> <span style='color: #008080;'><strong>Data de pagament</strong></span></th>";
			foreach ( $field_names as $field_name ){
				$nom_camp="";
				switch ($field_name[0]) {
					case $camps[0]://"Num. Ordre"
						$nom_camp="Num. Ordre";
						$content.="<td class='num_ordre'><span style='color: #008080;'><strong>". $nom_camp ."</strong></span></td>";
						break;
					case $camps[1]://"comprovar_tresorer"
						$nom_camp="Rebut";
						$content.="<td><span style='color: #008080;'><strong>". $nom_camp ."</strong></span></td>";
						break;
					case $camps[2]:// "preus":
						$nom_camp="Preu pagat";
						$content.="<td><span style='color: #008080;'><strong>". $nom_camp ."</strong></span></td>";
						break;
					default:
						continue;	
				}						
			}
			$content.="</tr>";
				
			foreach ( $submit_times as $submit_time ){
				$content.="<tr>";
				$content.="<td >".date('d/m/Y',$submit_time[0])."</td>";	
				$rows = $wpdb->get_results( 
							$wpdb->prepare("select `field_name`, `field_value` from `$tableName` 
										where (`form_name` = '%s' or `form_name` = '%s') and `submit_time` = %F ORDER BY `field_order`", 
										$var['form_name1'],$var['form_name2'], $submit_time[0]),ARRAY_N);
				if ( $rows ) {
					foreach ( $rows as $row ){
						if($row[0]==$camps[0]){//numero ordre
							$content.="<td class='num_ordre'>$row[1]</td>";
						}
						if($row[0]==$camps[2]){//Preu
							if($row[1]!=''){
								$content.="<td>".$row[1]."&euro;</td>";	
							}
							else{
								$content.="<td class='preu0'>Pendent*</td>"; //amb jquery amaguem la files amb una columna amb classe preu0 (preu=0), i.e., no val voler pagar en el moment
							}
						}
						if($row[0]==$camps[1]){	//"comprovar_tresorer"
							if($row[1]!='1' && $row[1]!='2'){
								$content.="<td class='.masterTooltip' title='El pagament encara no està validat pel tresorer.' ><span class='dashicons dashicons-lock' style='font-size:150%;'></span></td>";
							}
							else{
								if($primerRebut){//Nomes genera la primer fila que es troba 
									$content.="<td class='pdf' > <input class='hidden' type='hidden' name='pdf' value='pdf'><span class='dashicons dashicons-thumbs-up' style='color: green;'></span></td> ";
								}
								else{	
									$content.="<td class='pdf' > <input class='hidden' type='hidden' name='pdf' value='pdf'><span class='.masterTooltip dashicons dashicons-welcome-comments' title='Aquest rebut no es genererà.' style='color: red;'></span></td> ";
								}
								$primerRebut=false;
							}			
						}
					}
				}
				$content.="</tr>";
			}
		
		
			$content.="</tbody></table><br>
					<input type='submit' value='Crear Rebut' id='factura' name='c2emfactura' >
					<div id='noespot' style='display: none;'>
						No tens rebuts disponibles per generar. 
						<br>
						<a href='mailto:".get_option("admin_email")."'><span class='dashicons dashicons-email-alt'></span> ".get_option("admin_email")."</a> 
					</div>
			</form>";	
			
			$content.='<script type="text/javascript" language="Javascript">
	            jQuery(document).ready(function() {
					if(!jQuery(".dashicons-thumbs-up").length){
						jQuery("#factura").hide();
						jQuery("#noespot").show();
					}
					
	        		jQuery(".preu0").parents("tr").hide();
					jQuery(".num_ordre").hide();
					
					jQuery("#factura").click(function(){
						//Posem totes les dades de la fila la cadena dades separades per ;
						var dades="";
						jQuery(".pdf").parents("tr").find("td").each(function(){
							//El valor que te el la classe pdf no el posem
							if(!jQuery(this).hasClass("pdf")){
                				dades+=jQuery(this).html()+";";
							}
            			});	
						//afegim a les dades el dni i el nom de qui ho solicita
						jQuery(".hidden").val(dades+"'.$use_login.';'.$user_name.'");
					
					});
	            });
	        </script>

			<script>
			.tooltip {
				display:none;
				position:absolute;
				border:1px solid #333;
				background-color:#161616;
				border-radius:5px;
				padding:10px;
				color:#fff;
				font-size:12px Arial;
			}
		
			</script>';	
			$content.='<script type="text/javascript">
jQuery(document).ready(function() {
// Tooltip only Text
jQuery(".masterTooltip").hover(function(){
        // Hover over code
        var title = jQuery(this).attr("title");
        jQuery(this).data("tipText", title).removeAttr("title");
        jQuery("<p class="tooltip"></p>")
        .text(title)
        .appendTo("body")
        .fadeIn("slow");
}, function() {
        // Hover out code
        jQuery(this).attr("title",jQuery(this).data("tipText"));
        jQuery(".tooltip").remove();
}).mousemove(function(e) {
        var mousex = e.pageX + 20; //Get X coordinates
        var mousey = e.pageY + 10; //Get Y coordinates
        jQuery(".tooltip")
        .css({ top: mousey, left: mousex })
});
});
</script>';
		}
		
		return $content;
	}
	//Shortcode [c2em_inicialitzar_rebuts]
	add_shortcode( 'c2em_inicialitzar_rebuts', 'c2em_inicialitzar_rebuts_html' ); 
	function c2em_inicialitzar_rebuts_html($atts) {
		//Per eliminar tots els rebuts i posar-los de zero
		$rebut = new C2EM_factura_bbdd();
		$rebut->eliminar_totes_files();
		echo "Número de rebuts inicialitzats. Torna a treure aquest shortcode abans de continuar!!!!!";
	}
}
