'Inscription à la newsletter', 'page callback' => '_bmc_newsletter_inscription', 'access callback' => true, 'type' => MENU_CALLBACK, ); return $items; } function _bmc_newsletter_inscription() { // création de la soumission de formulaire global $user; $email = @$_POST['email']; if($email && filter_var($email, FILTER_VALIDATE_EMAIL)){ $titre = date('d/m/Y H:i:s') . ' - ' . $email; $node_values = array( 'type' => '_newsletter_entry', 'uid' => $user->uid, 'status' => 0, 'comment' => 0, 'promote' => 0, ); $my_node = entity_create('node', $node_values); $ewrapper = entity_metadata_wrapper('node', $my_node); $ewrapper->title->set($titre); $ewrapper->field_email->set($email); $ewrapper->save(); echo 'ok'; } else { echo 'error'; } } /** * export */ function bmc_newsletter_views_pre_render(&$view){ // dpm($view); if ($view->name == 'newsletter' && count($view->args) > 0){ _bmc_newsletter_export($view->result); exit(); } } function _bmc_newsletter_export($result){ $sortie = array(); // dpm($result); // return; $headers = array( 'Date de création', 'Email', ); foreach($result as $row){ $tab = array( date('Y/m/d H:i:s', $row->node_created), $row->field_field_email[0]['raw']['safe_value'], ); $sortie[] = $tab; } _bmc_newsletter_xls($headers, $sortie); // } function _bmc_newsletter_clean_me_please($str){ return str_replace(array('''), array('\''), utf8_decode($str)); } function _bmc_newsletter_xls($headers, $data){ include_once('Excel.class.php'); $xls = new Excel('export'); $xls->home(); foreach($headers as $s){ $xls->label(_bmc_newsletter_clean_me_please($s)); $xls->right(); } $xls->down(); foreach ($data as $o) { $xls->home(); foreach($o as $s){ $xls->label(_bmc_newsletter_clean_me_please($s)); $xls->right(); } $xls->down(); } $xls->send(); } language == 'en-EN') { $MOIS = $MOIS_EN; $MOIS_COURTS = $MOIS_COURTS_EN; $JOURS = $JOURS_COURTS; $JOURS_COURTS = $JOURS_COURTS_EN; } //------------------------------------------------------------------------ // formatages des dates propres au types de noeuds et au contexte //------------------------------------------------------------------------ function bmc_formate_date_spectacle_session_datetime($session) { return bmc_formate_date_datetime($session['dates'][0]); } /** * formatage des dates pour la page spectacle */ function bmc_formate_dates_spectacle_page($session) { return bmc_formate_dates_spectacle_session_accueil($session); } /** * formatage des dates pour la page saison */ function bmc_formate_dates_spectacle_saison($session) { return bmc_formate_dates_spectacle_session_accueil($session); } /** * format la date pour les slides de la page d'accueil */ function bmc_formate_dates_spectacle_slide_accueil($session) { return bmc_formate_dates_spectacle_session_accueil($session); } function bmc_formate_dates_spectacle_session_accueil($session) { $dates = $session['dates']; $l = count($dates); if (!$l) { return ''; } $d0 = $dates[0]; $m0 = bmc_formate_date_mc($d0); $y0 = bmc_formate_date_a($d0); $return = bmc_formate_date_d($d0); if ($l > 1) { $d1 = $dates[$l - 1]; $m1 = bmc_formate_date_mc($d1); $y1 = bmc_formate_date_a($d1); if ($m1 != $m0) { $return .= ' ' . $m0; } if ($y1 != $y0) { $return .= ' ' . $y0; } $return .= ' > ' . bmc_formate_date_d($d1); $m0 = $m1; $y0 = $y1; } $return .= ' ' . $m0; $return .= ' ' . $y0; return $return; } function bmc_formate_dates_spectacle_session_tournee($data) { $tournee = $data['tournee']; foreach ($data['tournees'] as $d) { if ($tournee == bmc_sanitize_text($d['ville'])) { $dates = $d['dates']; break; } } $dates_sessions = array(); foreach ($dates as $date) { $dates_sessions[]['time'] = strtotime($date['datetime']); } $l = count($dates_sessions); if (!$l) { return ''; } $d0 = $dates_sessions[0]; $m0 = bmc_formate_date_mc($d0); $y0 = bmc_formate_date_a($d0); $return = bmc_formate_date_d($d0); if ($l > 1) { $d1 = $dates_sessions[$l - 1]; $m1 = bmc_formate_date_mc($d1); $y1 = bmc_formate_date_a($d1); if ($m1 != $m0) { $return .= ' ' . $m0; } if ($y1 != $y0) { $return .= ' ' . $y0; } $return .= ' > ' . bmc_formate_date_d($d1); $m0 = $m1; $y0 = $y1; } $return .= ' ' . $m0; $return .= ' ' . $y0; return $return; } function bmc_formate_date_actu_accueil($d) { global $MOIS; if ($surcharge = $d['surcharge']) { return $surcharge; } $d = $d['time']; return date('d', $d) . ' ' . $MOIS[date('n', $d)] . ' ' . date('Y', $d); } function bmc_formate_date_calendrier_accueil_jour($d = null) { return date('d', $d); } function bmc_formate_date_calendrier_accueil_mly($d = null) { global $MOIS; return $MOIS[date('n', $d)] . ' ' . date('y', $d); } function bmc_formate_date_calendrier_accueil_mc($d = null) { global $MOIS_COURTS; return $MOIS_COURTS[date('n', $d)]; } //------------------------------------------------------------------------ // fonctions génériques de formatage des dates //------------------------------------------------------------------------ /** * format de date jour court (sans mois) => Lun. 6 */ function bmc_formate_date_jc($d) { global $JOURS_COURTS; $d = $d['time']; return ucfirst($JOURS_COURTS[date('N', $d)]) . ' ' . date('d', $d); } /** * format de date mois long => Novembre */ function bmc_formate_date_ml($d) { global $MOIS; $d = $d['time']; return $MOIS[date('n', $d)]; } /** * format de date mois court => nov. */ function bmc_formate_date_a($d) { return date('Y', $d['time']); } /** * format de date mois court => nov. */ function bmc_formate_date_mc($d) { global $MOIS_COURTS; $d = $d['time']; return $MOIS_COURTS[date('n', $d)]; } /** * format de date mois long => Novembre */ function bmc_formate_date_d($d) { $d = $d['time']; return date('d', $d); } /** * format de date jour et mois long => Mercredi 20 Novembre */ function bmc_formate_date_jml($d) { global $MOIS; global $JOURS; $d = $d['time']; $date = ucfirst($JOURS[date('N', $d)]) . ' ' . date('j', $d) . ' ' . $MOIS[date('n', $d)]; return $date; } /** * format de date jour et mois long =>20 Novembre */ function bmc_formate_date_dml($d) { global $MOIS; global $JOURS; $d = $d['time']; $date = date('j', $d) . ' ' . $MOIS[date('n', $d)]; return $date; } /** * format de date jour et mois long => Mercredi 20 Novembre */ function bmc_formate_date_heure($d) { $d = $d['time']; $minutes = date('i', $d); if ($minutes == '00') { $minutes = ''; } $date = date('H', $d) . 'h' . $minutes; return $date; } /** * format de date pour l'attribut datetime des balises time */ function bmc_formate_date_datetime($d) { $d = $d['time']; return date('Y-m-d', $d); } //------------------------------------------------------------------------ // extraction et parsing //------------------------------------------------------------------------ /** * retourne la première session jouée en local */ function bmc_extract_session_spectacle($node) { $sessions = bmc_extract_sessions_spectacle($node); foreach ($sessions as $session) { if (!$session['tournee']) { return $session; } } } /** * retourne les sessions jouées en tournée uniquement */ function bmc_extract_sessions_spectacle_tournees($node) { $sessions = bmc_extract_sessions_spectacle($node); $tournee = array(); foreach ($sessions as $session) { if ($session['tournee']) { $tournee[] = $session; } } return $tournee; } /** * extraction des sessions de représentations d'un noeud spectacle * qu'elle fassent partie de la tournée ou des sessions jouées à MC */ function bmc_extract_sessions_spectacle($node) { $dates = array(); if (!count($node->field_session_representation)) { return $dates; } $eid_tab = array(); foreach ($node->field_session_representation['und'] as $eid) { $eid_tab[] = $eid['value']; } $e_tab = entity_load('field_collection_item', $eid_tab); foreach ($e_tab as $n => $e) { if (!$d = bmc_parse_dates_spectacle($e)) { continue; } $dates[] = $d; } return $dates; } /** * * conversion d'un field collection de représentation en tableau * @return array('time', 'date', 'lieu', 'surcharge') */ function bmc_parse_dates_spectacle($e) { if (!count($e->field_date)) { return; } $dates = array(); foreach ($e->field_date['und'] as $d) { $d = $d['value']; $dates[] = array( 'time' => strtotime($d), 'date' => $d, ); } return array( 'dates' => $dates, 'lieu' => @$e->field_lieu['und'][0]['safe_value'], 'ville' => @$e->field_ville['und'][0]['safe_value'], 'pays' => @$e->field_pays['und'][0]['safe_value'], 'tournee' => $e->field_tournee['und'][0]['value'] == 1, 'site_internet' => @$e->field_lien['und'][0]['safe_value'], 'periode_check' => $e->field_periode['und'][0]['value'], 'vignette' => dnk_get_image(@$e->field_visuel['und'][0], 'spectacle_vignette'), 'not_see_hour' => @$e->field_no_dates['und'][0]['value'], ); } /** * * récupération des données de date d'une actu * @return array('time', 'date', 'type', 'surcharge') */ function bmc_parse_date_actu($e) { if (!$d = @$e->field_date_jour['und'][0]['value']) { return; } return array( 'time' => strtotime($d), 'date' => $d, 'surcharge' => @$e->field_datetexte['und'][0]['safe_value'], ); } field_media); foreach($e_tab as $e){ if($media = bmc_extract_media_diaporama($e)){ $medias[] = $media; } } return $medias; } function bmc_extract_media_diaporama($e){ $type = $e->field_type_media['und'][0]['value']; $media = array( 'type' => $type, 'legende' => @$e->field_corps['und'][0]['safe_value'], 'visuel' => bmc_extract_cover($e), ); switch($type){ case 'video' : if(!count($e->field_url_page_video)){return;} $media['video'] = $e->field_url_page_video['und'][0]['safe_value']; break; } return $media; } //------------------------------------------------------------------------- //------------------------------------------------------------------------- /** * récup de la vignette de l'actualité * soit la vignette, soit la première image du diapo s'il en est */ function bmc_extract_vignette_actu($node){ if(!count($node->field_visuel)){ return bmc_extract_visuel_actualite($node); } return $node->field_visuel['und'][0]; } /** * récupération du visuel pour une remontée de slide * @$node est une entityref */ function bmc_extract_visuel_remontee_slide($node){ switch($node->type){ case 'spectacle' : return bmc_extract_visuel_spectacle($node); case 'actualite' : return bmc_extract_visuel_actualite($node); case 'page' : return bmc_extract_visuel_page($node); } return null; } /** * récup de la cover d'une actu */ function bmc_extract_visuel_actualite($node){ if(bmc_extract_visuel_spectacle($node)){ return bmc_extract_visuel_spectacle($node); } else{ $img = array( 'ancrage' => "MC", 'uri' => "public://default.jpg", 'width' => 480, 'height' => 344, 'alt' => "Ballets de Monte Carlo", ); return $img; } } /** * récup de la cover d'une page */ function bmc_extract_visuel_page($node){ return bmc_extract_cover($node); } /** * retourne la cover sous forme de tableau image augmenté (opacité et ancrage) à passer à dnk_get_image */ function bmc_extract_cover($e){ if(@$e->field_cover){ if(!count($e->field_cover)){ return; } $eid = $e->field_cover['und'][0]['value']; $e = entity_load('field_collection_item', array($eid)); $e = $e[$eid]; return bmc_extract_cover($e); } // le visuel n'a pas été rempli pour la cover if(!count($e->field_visuel)){ return null; $img = array( 'ancrage' => "MC", 'uri' => "public://default.jpg", 'width' => 1000, 'height' => 600, 'alt' => "Ballets de Monte Carlo", ); return $img; } $img = $e->field_visuel['und'][0]; $img['opacity'] = $e->field_opacite['und'][0]['value']; $img['ancrage'] = $e->field_ancrage['und'][0]['value']; return $img; } /** * retourne la première image des médias d'un spectacle */ function bmc_extract_visuel_spectacle($node){ if(count($node->field_media)){ // récup des médias du spectacle foreach($node->field_media['und'] as $o){ $eid = $o['value']; $e = entity_load('field_collection_item', array($eid)); $e = $e[$eid]; if($e->field_type_media['und'][0]['value'] == 'image'){ if (null == $img = bmc_extract_cover($e)){ continue; } return $img; } } } return bmc_extract_cover($node); } Les Ballets de Monte-Carlo
field_collection_item_field_data_field_session_representatio; // if(date('Y', strtotime($date)) < (date('Y') - 1)){continue;} $spectacles[$date] = $row->nid; if(!in_array($row->nid, $nid_tab)){ $nid_tab[] = $row->nid; } } // remplissage du tableau du calendrier sans trou // à partir du mois de septembre de la saison du premier spectacle jusqu'au mois d'aout de la saison $calendrier = array(); //dpm($spectacles); end($spectacles); $d1 = new DateTime(key($spectacles)); reset($spectacles); $d0 = new DateTime(key($spectacles)); $yn = $y0 = $d0->format('Y'); $y1 = $d1->format('Y'); // dpm($y0.' Premier'); // dpm($y1.' Dernier'); // si les spectacles sont répartis sur deux années (ex. 2016/2017), on affiche la saison complète // c-a-d de sept 2016 à août 2017 // en janvier, les spectacles de 2016 sont archivés, on n'affiche alors que les mois du premier au dernier spectacle (janvier à août) $mn = $m0 = ($y0 != $y1 ? 9 : $d0->format('n'));//septembre //$d0->format('n'); $m1 = $d1->format('n');//aout //$d1->format('n'); $n = 0;// soupape de sécurité do{ if(++$n == 15){break;}// soupape de sécurité, si la boucle débloque, on lock // if($yn == $y1 && $mn == $m1){break;}// si on n'a qu'un mois $calendrier[$yn.'-'.$mn] = array(); if(++$mn > 12){ $yn++; $mn = 1; } }while($yn.$mn != $y1.$m1);// on s'arête au mois n-1 $calendrier[$yn.'-'.$mn] = array();// du coup on ajoute le dernier mois // remplissage des spectacles dans le calendrier $node_tab = node_load_multiple($nid_tab); foreach($spectacles as $date => $nid){ $e = $node_tab[$nid]; $datetime = new DateTime($date); $year = $datetime->format('Y'); $month = $datetime->format('n'); $day = $datetime->format('d'); $sessions = bmc_extract_sessions_spectacle($e); //dpm($sessions); foreach($sessions as $session){ $tournee = ''; //dpm($session['tournee']); if($session['tournee']){ $tournee = 'tournee'; } $calendrier[$year.'-'.$month][$day] = array( 'date' => $date, 'spectacle' => array( 'titre' => $e->title, 'choregraphe' => @$e->field_choregraphe['und'][0]['safe_value'], 'compagnie' => @$e->field_compagnie['und'][0]['safe_value'], 'institution' => bmc_extract_institution(@$e->field_institution['und'][0]['tid']), 'vignette' => dnk_get_image(bmc_extract_visuel_spectacle($e), 'spectacle_miniature_calendrier_accueil'), 'lien' => get_node_translated_path($e->nid), 'tournee' => $tournee ), ); } } //dpm($calendrier); //--------------------------------------------- //--------------------------------------------- // Actus //--------------------------------------------- //--------------------------------------------- /*$view_result = views_get_view_result('actualites', 'list'); $actus = array(); $nid_tab = array(); foreach($view_result as $row){ $nid_tab[] = $row->nid; } $node_tab = node_load_multiple($nid_tab); $i = 0; foreach($node_tab as $e){ $date = bmc_parse_date_actu($e); if(!$texte = @$e->body['und'][0]['safe_summary']){ $texte = strip_tags(truncate_utf8(@$e->body['und'][0]['safe_value'], 105, true, true)); } $diaporama = bmc_extract_diaporama($e); $video = false; foreach($diaporama as $d): if($d['type'] == 'video'){ $video = true; } endforeach; $actus[] = array( 'titre' => $e->title, 'date' => bmc_formate_date_actu_accueil($date), 'datetime' => bmc_formate_date_datetime($date), 'corps' => $texte, 'institution' => bmc_extract_institution(@$e->field_institution['und'][0]['tid']), 'vignette' => dnk_get_image(bmc_extract_vignette_actu($e), 'actu_vignette'), 'lien' => get_node_translated_path($e->nid), 'video' => $video ); $i++; if($i > 2){ break; } }*/ $actus = array(); if(count($node->field_actualites)){ foreach($node->field_actualites['und'] as $e){ $e = $e['entity']; if(!$texte = @$e->body['und'][0]['safe_summary']){ $texte = strip_tags(truncate_utf8(@$e->body['und'][0]['safe_value'], 105, true, true)); } $date = bmc_parse_date_actu($e); $actus[] = array( 'titre' => $e->title, 'date' => bmc_formate_date_actu_accueil($date), 'datetime' => bmc_formate_date_datetime($date), 'corps' => $texte, 'institution' => bmc_extract_institution(@$e->field_institution['und'][0]['tid']), 'vignette' => dnk_get_image(bmc_extract_vignette_actu($e), 'actu_vignette'), 'lien' => get_node_translated_path($e->nid), //'video' => $video ); } } //--------------------------------------------- //--------------------------------------------- // Slides //--------------------------------------------- //--------------------------------------------- $slides = array(); if(count($node->field_slide)){ $now = time(); // pour chaque slide foreach($node->field_slide['und'] as $o){ $eid = $o['value']; $e = entity_load('field_collection_item', array($eid)); $e = $e[$eid]; $type = $e->field_type_slide['und'][0]['value']; // hors des dates de publication automatique $date_debut_publication = strtotime($e->field_date_publication['und'][0]['value']); $date_fin_publication = strtotime($e->field_date_publication['und'][0]['value2']); if($now < $date_debut_publication || ($date_debut_publication != $date_fin_publication && $now > $date_fin_publication) && $type !== 'video'){ continue; } // dpm($e); $slide = array( 'titre' => null, 'visuel' => null, 'date' => null, 'compagnie' => null, 'choregraphe' => null, 'lieu' => null, 'lien_billetterie' => null, 'texte_billetterie' => __t('accueil.slider.reserver'), 'lien_bouton' => null, 'texte_bouton' => @$e->field_nom['und'][0]['safe_value'], 'url_video' => @$e->field_video['und'][0]['safe_value'], ); // type de slide switch($type){ case 'content' : // remontée de contenu $target = @$e->field_contenu_cible['und'][0]['entity']; if(!$target){continue;} $slide['titre'] = $target->title; $slide['visuel'] = dnk_get_image(bmc_extract_visuel_remontee_slide($target), 'slide_accueil', true); $slide['lien_bouton'] = get_node_translated_path($target->nid); if($target->type == 'spectacle'){ // dpm($target); $slide['date'] = bmc_formate_dates_spectacle_slide_accueil(bmc_extract_session_spectacle($target)); $slide['lieu'] = bmc_extract_lieu($target); $slide['compagnie'] = @$target->field_compagnie['und'][0]['safe_value']; $slide['choregraphe'] = @$target->field_choregraphe['und'][0]['safe_value']; $slide['lien_billetterie'] = @$target->field_lien['und'][0]['safe_value']; $institution = bmc_extract_institution(@$target->field_institution['und'][0]['tid']); $slide['color'] = $institution['colorClass']; } break; case 'original' : // contenu original $slide['lien_bouton'] = @$e->field_lien['und'][0]['safe_value']; break; case 'video': $video_uid = @$e->field_video_file['und'][0]['uri']; $video_url = file_create_url($video_uid); $slide['video'] = $video_url; $slide['lien_bouton'] = @$e->field_lien['und'][0]['safe_value']; if($slide['url_video']){ unset($slide['url_video']); } break; } // surcharge if($titre = @$e->field_titre['und'][0]['value']){ $slide['titre'] = $titre; } // surcharge visuel if($visuel = dnk_get_image(bmc_extract_cover($e), 'slide_accueil', true)){ $slide['visuel'] = $visuel; } $slide['type'] = $type; $slides[] = $slide; } } drupal_add_js(array( 'mois'=>$MOIS, 'mois_courts'=>$MOIS_COURTS, ), 'setting'); $data = array( 'titre' => $node->title, 'slides' => $slides, 'actus' => $actus, 'spectacles' => $calendrier, ); // dpm($calendrier); include 'layouts/accueil.php';