<?php
/*
  Fichier : TEMPLATEPATH. '/inc/modules/tcp-Annuaire.inc.php'
  Objet : Création d'un TCP
  Nom : TCP Annuaire
  Description : Crée un nouveau TCP pour la gestion d'un annuaire
*/

// Création du TCP
function at111_init_TCP_Annuaire() {
	$labels = array(
		'name' => 'Annuaire',
		'singular_name' => 'Annuaire',
		'add_new' => 'Ajouter',
		'add_new_item' => 'Ajouter un contenu',
		'edit_item' => 'Modifier',
		'new_item' => 'Nouveau',
		'all_items' => 'Tous les contenu',
		'view_item' => 'Visualiser',
		'search_items' => 'Rechercher',
		'not_found' =>  'Aucun contenu trouvé',
		'not_found_in_trash' => 'Aucun contenu trouvé dans la corbeille',
		'parent_item_colon' => '',
		'menu_name' => 'Annuaire'
	);
	$args = array(
		'labels' => $labels,
		'public' => true,
		'publicly_queryable' => true,
		'show_ui' => true,
		'show_in_menu' => true,
		'query_var' => true,
		'rewrite' => array( 'slug' => 'annuaire' ),
		'has_archive' => true,
//    	'hierarchical' => false,
		'menu_position' => 20,
		'menu_icon' => 'dashicons-share',
		'supports' => array( 'title', 'editor', 'thumbnail' )
	);
	// Enregistrement du TCP
	register_post_type( 'annuaire', $args );

	// Labels des rubriques.
	$rubLabels = array(
		'name' => 'Rubriques',
		'singular_name' => 'Rubrique',
		'search_items' => 'Rechercher',
		'popular_items' => 'Rubriques souvent utilisées',
		'all_items' => 'Toutes les rubriques',
		'edit_item' => 'Modifier une rubrique',
		'update_item' => 'Mettre à jour une rubrique',
		'add_new_item' => 'Ajouter une rubrique',
		'new_item_name' => 'Nouvelle rubrique'
	);

	// Rubriques.
	register_taxonomy('annuaire-rubrique', 'annuaire', array(
		'hierarchical' => true,
		'label' => 'Rubriques',
		'labels' => $rubLabels,
		'rewrite' => array( 'slug' => 'annuaire-rubrique' ),
		'show_in_nav_menus' => false,
		'show_admin_column' => true
	));
}
add_action('init', 'at111_init_TCP_Annuaire');

// Gestion des colonnes de la liste de contenus
// Pour créer un filtre sur les métadonnées ou autres, voir : http://justintadlock.com/archives/2011/06/27/custom-columns-for-custom-post-types

// Création des entêtes de colonnes
add_filter( 'manage_edit-annuaire_columns', 'my_edit_Annuaire_columns' ) ;
function my_edit_Annuaire_columns( $columns ) {
	$columns = array(
		'cb' => '<input type="checkbox" />',
		'title' => __( 'Titre' ),
		'annuaire-rubrique' => __( 'Rubrique' ),
		'date' => __( 'Date de publication' )
	);
	return $columns;
}

// Remplissage des lignes du tableau
add_action( 'manage_annuaire_posts_custom_column', 'my_manage_Annuaire_columns', 10, 2 );
function my_manage_Annuaire_columns( $column, $post_id ) {
	global $post;
	switch( $column ) {
		case 'annuaire-rubrique' :
			$terms = get_the_terms( $post_id, 'annuaire-rubrique' );
			/* Si des taxonomies sont trouvées */
			if (!empty($terms)) {
				$out = array();
				/* On boucle sur chacune des taxonomies et on place un lien */
				foreach ( $terms as $term ) {
					$out[] = sprintf( '<a href="%s">%s</a>',
						esc_url( add_query_arg( array( 'post_type' => $post->post_type, 'annuaire-rubrique' => $term->slug ), 'edit.php' ) ),
						esc_html( sanitize_term_field( 'name', $term->name, $term->term_id, 'annuaire-rubrique', 'display' ) )
					);
				}
				/* On associe les taxonomies, séparées par une virgule */
				echo join( ', ', $out );
			}
			/* Si aucune taxonomie n'est trouvée, on affiche un message */
			else {
				_e( 'Aucune rubrique trouvée' );
			}
			break;
		/* Break out */
		default :
			break;
	}
}

// Rajout de l'entrée Options pour export de l'annuaire

add_action('admin_menu', 'a111_annuaire_menu');

function a111_annuaire_menu() {
	add_submenu_page("edit.php?post_type=annuaire", "Options", "Options", "manage_options", '/options_annuaire', "options_annuaire");
}

function options_annuaire(){
	?>
	<div class="wrap">
		<h1>Options de l'annuaire</h1>
		<div class="wrap">
			<h2>Export de l'annuaire</h2>
			<div class="">
				<form method="post">
					<p>Cet outil vous permet d'exporter tout l'annuaire publié dans fichier .csv.<br />Les cellules sont séparées d'un point virgule et les lignes d'un saut de ligne. A préciser à l'éditeur lors de l'ouverture du fichier .csv</p>
					<p>
						<input type="submit" name="export_annuaire" value="Exporter l'annuaire" class="button button-primary button-large" />
					</p>
				</form>
			</div>
		</div>
	</div>
	<?php
}


add_action('wp_loaded', 'a111_export_annuaire');

function a111_export_annuaire(){
	if(isset($_POST['export_annuaire']) && !empty($_POST['export_annuaire'])){
		$args = array('post_type' => 'annuaire',
			'post_status' =>'publish',
			'posts_per_page' => -1,
			'orderby' => 'title',
			'order' => 'ASC',
		);
		$the_query = new WP_Query($args);
		global $post;
		if($the_query->have_posts()){
			header('Content-type: text/csv');
			header('Content-disposition: attachment;filename=exportAnnuaire.csv');
			$returnCsv = '';
			$returnCsv .= 'Titre;';
			$taxos = get_terms(array('taxonomy' => 'annuaire-rubrique', 'hide_empty' => false));
			foreach($taxos as $taxo){
				$returnCsv .= 'Categorie: '.$taxo->name.';';
			}

			$returnCsv .= 'Activites;Missions;Contact Principal; Fonction principal; Contact Secondaire; Fonction Secondaire; Adresse; Latitude; Longitude; Telephone; Fax;Mobile; E-mail;Site internet;Public;Autres informations;Horaires';

			$returnCsv .= "\n";
			while($the_query->have_posts()){
				$the_query->the_post();
				$postMeta = get_post_meta($post->ID);

				$terms = get_the_terms($post->ID, 'annuaire-rubrique');

				$returnCsv .= '"'.sanitize_string(get_the_title()).'";';
				foreach($taxos as $taxo){
					$hasTaxo = false;
					foreach($terms as $term){
						if($taxo->slug == $term->slug){
							$hasTaxo = true;
							break;
						}
					}
					if($hasTaxo){
						//$returnCsv .= '"'.$taxo->name.'";';
						$returnCsv .= '"X";';
					}else{
						$returnCsv .= '"";';
					}
				}

				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_activites'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_missions'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_contact_principal'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_fonction_principal'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_contact_secondaire'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_fonction_secondaire'][0]).'";';
				if(!empty($postMeta['annuaire_localisation']) && $postMeta['annuaire_localisation_bool'][0] == '1'){
					$adresse = unserialize($postMeta['annuaire_localisation'][0]);
					$returnCsv .= '"'.str_replace(';', ',', $adresse['address']).'";';
					$returnCsv .= '"'.str_replace(';', ',', $adresse['lat']).'";';
					$returnCsv .= '"'.str_replace(';', ',', $adresse['lng']).'";';
				}else{
					$returnCsv .= '"'.sanitize_string($postMeta['annuaire_adresse'][0]).'";';
					$returnCsv .= '"";';
					$returnCsv .= '"";';
				}
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_telephone'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_fax'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_mobile'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_courriel'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_siteinternet'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_public'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_autresinformations'][0]).'";';
				$returnCsv .= '"'.sanitize_string($postMeta['annuaire_horaires'][0]).'"';
				$returnCsv .= "\n";

			}

			echo mb_convert_encoding($returnCsv, 'UTF-8');
			exit();

		}else{
			echo 'no post';
		}
	}
}

function sanitize_string($str){
	$str = wp_strip_all_tags($str);
	$str = html_entity_decode($str);
	$str = str_replace(';', ',', $str);
	$str = preg_replace( "/\r|\n/", " ", $str );

	return $str;
}