ldc-groupe/content/themes/ldc/functions.php
Vincent BRIDIER 1ec7c28ea2 - Add message plugin
- Update contact
2020-10-09 14:58:29 +02:00

1480 lines
45 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// TODO : vérifier si pas d'incidence sur les dates du site
//date_default_timezone_set('Europe/Paris');
/*******************************************************************
SMTP Mail/HTML Mail
*******************************************************************/
add_filter( "wp_mail_content_type", "set_html_content_type" );
function set_html_content_type() {
return "text/html";
}
add_action( 'phpmailer_init', 'configure_smtp' );
function configure_smtp( PHPMailer $phpmailer ){
$phpmailer->isSMTP(); //switch to smtp
$phpmailer->Host = SMTP_HOST;
$phpmailer->SMTPAuth = SMTP_AUTH;
$phpmailer->Port = SMTP_PORT;
$phpmailer->Username = SMTP_USER;
$phpmailer->Password = SMTP_PASS;
$phpmailer->SMTPSecure = SMTP_SECURE;
$phpmailer->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
}
/* REMOVE EMOJI START */
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
/* REMOVE EMOJI END */
remove_filter ('the_content', 'wpautop');
add_filter( 'excerpt_length', function(){
return 50;
});
/* REMOVE GUTENBERG STYLES START */
function smartwp_remove_wp_block_library_css(){
wp_dequeue_style( 'wp-block-library' );
wp_dequeue_style( 'wp-block-library-theme' );
}
add_action( 'wp_enqueue_scripts', 'smartwp_remove_wp_block_library_css' );
/* REMOVE GUTENBERG STYLES END */
/* REMOVE ATTRS START */
add_action('wp_loaded', 'prefix_output_buffer_start');
function prefix_output_buffer_start() {
ob_start("prefix_output_callback");
}
function prefix_output_callback($buffer) {
return preg_replace( "%[ ]type=[\'\"]text\/(javascript|css)[\'\"]%", '', $buffer );
}
/* REMOVE ATTRS END */
/* CF7 remove tags START */
add_filter( 'wpcf7_autop_or_not', '__return_false' );
/* CF7 remove tags end */
function load_js_css() {
wp_enqueue_style('fonts', get_template_directory_uri() . '/fonts/stylesheet.css');
wp_enqueue_style('swiper', get_template_directory_uri() . '/css/swiper.min.css');
wp_enqueue_style('fancybox', get_template_directory_uri() . '/css/jquery.fancybox.min.css');
wp_enqueue_style('styles', get_stylesheet_uri());
wp_enqueue_style('media-styles', get_template_directory_uri() . '/css/media.css');
/* wp_deregister_script('jquery');
wp_register_script('jquery', get_template_directory_uri() . '/js/jquery-1.11.1.min.js');
wp_enqueue_script('jquery');*/
//wp_enqueue_script( 'twentytwenty-js', get_template_directory_uri() . '/js/index.js', array(), $theme_version, false );
wp_enqueue_script( 'jquery-js', get_template_directory_uri() . '/js/jquery-1.11.1.min.js', array(), null, false );
wp_localize_script('jquery-js', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
wp_enqueue_script( 'chart-js', get_template_directory_uri() . '/js/Chart.js', array(), null, false );
wp_enqueue_script('swiper',get_template_directory_uri() . '/js/swiper.min.js',array('jquery'),null,true);
wp_enqueue_script('masonry',get_template_directory_uri() . '/js/masonry.pkgd.min.js',array('jquery'),null,true);
wp_enqueue_script('fancybox',get_template_directory_uri() . '/js/jquery.fancybox.min.js',array('jquery'),null,true);
//wp_enqueue_script('tagcanvas',get_template_directory_uri() . '/js/jquery.tagcanvas.min.js',array('jquery'),null,true);
wp_enqueue_script('tagcanvas',get_template_directory_uri() . '/js/tagcanvas.min.js',array('jquery'),null,true);
wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/script.js', array('jquery') );
wp_enqueue_script( 'cont-script', get_template_directory_uri() . '/js/cont-page.js', array('jquery') );
wp_localize_script( 'ajax-script', 'cc_ajax_object',
array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
// wp_localize_script('jquery', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
// wp_enqueue_script('script', get_template_directory_uri() . '/js/script.js', array('jquery'), null, true);
$translation_array = array( 'templateUrl' => get_stylesheet_directory_uri() );
wp_localize_script( 'script', 'theme_path', $translation_array );
}
add_action( 'wp_enqueue_scripts', 'load_js_css');
function global_vars() {
global $current_time;
$current_time = current_time('timestamp');
}
add_action( 'init', 'global_vars' );
/* POST THUMBNAILS START */
if (function_exists('add_theme_support')) {
add_theme_support('post-thumbnails');
set_post_thumbnail_size(412, 240);
}
/* POST THUMBNAILS END */
add_action('after_setup_theme', function(){
register_nav_menus( array(
'top' => 'Top menu',
));
register_nav_menus( array(
'header_left' => 'Header menu left',
));
register_nav_menus( array(
'header_right' => 'Header menu right',
));
register_nav_menus( array(
'footer' => 'Footer menu',
));
register_nav_menus( array(
'mobile' => 'Mobile menu',
));
/* register_nav_menus( array(
'copyright' => 'Copyright',
));*/
});
/* ACF theme options START */
if( function_exists('acf_add_options_page') ) {
acf_add_options_page(
array(
'page_title' => 'Paramètres site',
'menu_title' => 'Paramètres site',
'menu_slug' => 'theme-options',
'capability' => 'edit_posts',
'parent_slug' => '',
'position' => false,
)
);
acf_add_options_sub_page(
array(
'page_title' => 'Paramètres site',
'menu_title' => 'Paramètres site',
'menu_slug' => 'theme-options-global',
'capability' => 'edit_posts',
'parent_slug' => 'theme-options',
'position' => false,
'icon_url' => false,
'redirect' => false,
)
);
}
/* ACF theme options END */
/* FILTER START */
function get_tags_in_use($category_name, $type = 'name'){
$my_posts = new WP_Query(
"category_name=".$category_name,
'posts_per_page = -1'
);
$tags_by_id = array();
$tags_by_name = array();
$tags_by_slug = array();
if ($my_posts->have_posts()): while ($my_posts->have_posts()): $my_posts->the_post();
$post_tags = wp_get_post_tags($my_posts->post->ID);
foreach ($post_tags as $tag):
$tag_id = $tag->term_id;
$tag_name = $tag->name;
$tag_slug = $tag->slug;
if (!in_array($tag_id, $tags_by_id))
array_push($tags_by_id, $tag_id);
if (!in_array($tag_name, $tags_by_name))
array_push($tags_by_name, $tag_name);
if (!in_array($tag_slug, $tags_by_slug))
array_push($tags_by_slug, $tag_slug);
endforeach;
endwhile; endif;
if ($type == 'id')
return $tags_by_id;
if ($type == 'name')
return $tags_by_name;
if ($type == 'slug')
return $tags_by_slug;
}
function tags_filter($category_name = 'none') {
$tags = get_tags_in_use($category_name);
if(empty($tags)) {
return false;
}
echo "<ul>";
foreach ($tags as $tag):
$term = get_term_by('name', $tag, 'post_tag');
echo '<li>';
echo '<a class="tax-filter"
data-tag="' . $term->slug . '"
data-category="' . $category_name . '"
>' . $term->name . '</a>';
echo ' </li>';
endforeach;
echo "</ul>";
}
function ajax_filter_posts_scripts() {
// Enqueue script
wp_register_script('afp_script', get_template_directory_uri() . '/js/ajax-filter-posts.js', false, null, false);
wp_enqueue_script('afp_script');
if (isset($_GET['tag'])) {
$tag = $_GET['tag'];
}else{
$tag ='';
}
wp_localize_script( 'afp_script', 'afp_vars', array(
'afp_nonce' => wp_create_nonce( 'afp_nonce' ), // Create nonce which we later will use to verify AJAX request
'afp_ajax_url' => admin_url( 'admin-ajax.php' ),
'afp_tags' => $tag,
)
);
}
add_action('wp_enqueue_scripts', 'ajax_filter_posts_scripts', 100);
// Script for getting posts
function ajax_filter_get_posts() {
$p = '';
$l = 9;
if (isset($_GET['limit'])) {
$l = $_GET['limit'];
}
if (isset($_GET['taxonomy'])) {
$p .= ' tag="' . implode(',', $_GET['taxonomy']) . '"';
}
if (isset($_GET['order'])) {
$p .= ' order="' . $_GET['order'] . '"';
}
if (isset($_GET['category'])) {
$p .= ' category="' . $_GET['category'] . '"';
} else {
$p .= ' category="news"';
}
if (isset($_GET['years'])) {
$p .= ' custom_args="date_query:' . implode(',', $_GET['years']) . '"';
}
if (isset($_GET['list'])) {
$p .= ' theme_repeater="' . $_GET['list'] . '"';
}
if (isset($_GET['id'])) {
$p .= ' id="' . $_GET['id'] . '"';
}
echo do_shortcode('[ajax_load_more loading_style="infinite fading-circles" post_type="post" posts_per_page="'.$l.'" max_pages="1" scroll="true" nested="true" button_label="Voir plus d’actualités" ' . $p . ']');
die();
}
add_action('wp_ajax_filter_posts', 'ajax_filter_get_posts');
add_action('wp_ajax_nopriv_filter_posts', 'ajax_filter_get_posts');
/* FILTER END */
function get_posts_years_array($cat) {
$years = [];
$cat_id = $cat->term_id;
$args = array( 'cat' => $cat_id, 'posts_per_page' => -1 );
$query = new WP_Query( $args ); // Start the wordpress loop!
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
$catarrays[] = $cat_id;
$arrays[] = intval(get_the_time( __( 'Y', 'archives-category-date' ) ));
endwhile;
endif;
$uniq_arrs = array_unique( $arrays );
foreach($uniq_arrs as $arr) {
$years[$arr] = ($arr-1).'/'.$arr;
}
return $years;
}
function filter_years_html($years, $category) {
echo "<ul>";
foreach ($years as $y => $string):
echo '<li>';
echo '<a class="tax-filter"
data-year="' . $y . '"
data-category="' . $category . '"
>' . $string . '</a>';
echo ' </li>';
endforeach;
echo "</ul>";
}
/* Fix 404 error for custom post type pages */
flush_rewrite_rules( false );
/* Thumbs START */
/*add_image_size('social-icon', 32, 32, true);
add_image_size('info-icon', 75, 75, true);
add_image_size('expertise-icon', 40, 40, true);*/
/* Thumbs END */
/*
function custom_post_type_create() {
register_post_type( 'infopage',
array(
'labels' => array(
'name' => __( 'Infopages' ),
'singular_name' => __( 'Infopage' )
),
'public' => true,
'publicly_queryable'=> true,
'show_ui' => true,
'query_var' => true,
'show_in_nav_menus' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'infopages','with_front' => false),
'supports' => array('title','editor', 'thumbnail'),
'has_archive' => true
)
);
register_taxonomy('infopage-cat', array('infopage'), array(
'label' => 'Infopage Categories', // определяется параметром $labels->name
'labels' => array(
'name' => 'Infopage Categories',
'singular_name' => 'Infopage Categories',
),
'public' => true,
'hierarchical' => true,
'show_in_nav_menus' => true,
'has_archive' => true,
'rewrite' => false,
) );
}
add_action( 'init', 'custom_post_type_create' );*/
function catName($cat_id) {
$cat_id = (int) $cat_id;
$category = get_category($cat_id);
return $category->name;
}
function catLink($cat_id) {
$category = get_the_category();
$category_link = get_category_link($cat_id);
return $category_link;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////// POC LDC 2020 //////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////// POC : REPONDRE AUX CONTACTS DIRECTEMENT DEPUIS L'ADMINISTRATION //////////////////////
// Contact Ajax
function getMessageType($postID){
switch ($postID){
case 6249:
return 1;
break;
}
}
function sendNotification($postID, $ref) {
switch ($postID){
case 6249:
$email = ['vincent.bridier@ldc.fr'];
break;
}
wp_mail($email, "Vous avez un message à traiter sur le site LDC", "$ref");
}
function generateRandomString($length = 10) {
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
add_action( 'wp_ajax_ContactAjx', 'ContactAjx');
add_action( 'wp_ajax_nopriv_ContactAjx', 'ContactAjx');
function ContactAjx() {
global $wpdb;
// TODO : Validation Recaptcha with toekn
// TODO : Test variables required
//check_ajax_referer( 'ajax-security-nonce', 'security' );
$postID = sanitize_text_field($_POST['id']);
$firstname = sanitize_text_field($_POST['firstname']);
$lastname = sanitize_text_field($_POST['lastname']);
$email = sanitize_email($_POST['email']);
$content = "";
foreach ($_POST as $key => $item){
if ($key === 'firstname' || $key === 'lastname' || $key === 'email' || $key === 'action' || $key === 'id' || $key === 'token')
continue;
if (is_array($item)){
$content .= ucfirst($key) . " :\n\r";
foreach ($item as $v){
$content .= "- $v \n\r";
}
}else{
$content .= ucfirst($key) . " : " . $item . "\n\r";
}
}
$ref = date('ymd') . '-' . generateRandomString(4);
$wpdb->insert(
'wp_messages',
[
'ref' => $ref,
'firstname' => $firstname,
'lastname' => $lastname,
'email' => $email,
'content' => $content,
'status' => 0,
'date' => date('Y-m-d H:i:s'),
'type_id' => getMessageType($postID)
], [
'%s',
'%s',
'%s',
'%s',
'%s',
'%d',
'%s',
'%d'
]
);
sendNotification($postID, $ref);
die();
}
// Ajout script spécifique sur l'admin message
function my_enqueue($hook) {
$screen = get_current_screen();
if ('edit-message' !== $screen->id) {
return;
}
wp_register_script( 'jQuery', 'https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js', null, null, true );
wp_enqueue_script('jQuery');
wp_enqueue_script( 'fancy', get_template_directory_uri() . '/assets/js/fancy.js',false,'1.1',true);
wp_enqueue_style( 'fancycss', get_template_directory_uri() . '/assets/js/fancy.css',false,'1.1','all');
wp_localize_script('fancy', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
wp_enqueue_style( 'fancyboxcss', get_template_directory_uri() . '/assets/js/fancybox/jquery.fancybox.min.css',false,'1.1','all');
wp_enqueue_script( 'fancyboxjs', get_template_directory_uri() . '/assets/js/fancybox/jquery.fancybox.min.js',false,'1.1','all');
$html = "<div id='reponse-msg' style='display:none'>";
$html .= "</div>";
echo($html);
}
add_action('admin_enqueue_scripts', 'my_enqueue');
add_action( 'wp_ajax_getMsg', 'getMsg' );
add_action( 'wp_ajax_nopriv_getMsg', 'getMsg' );
function getMsg(){
global $wpdb;
$msg_id = $_POST['id'];
$msg = $wpdb->get_row("SELECT * FROM wp_messages, wp_messages_types WHERE wp_messages.type_id = wp_messages_types.id AND wp_messages.id = $msg_id LIMIT 1", OBJECT);
if ($msg === NULL)
die('<h1>Message inconnu</h1>');
$html = "<div class='msg-reponse'>";
$html .= "<h1>Message du consommateur :</h1>";
$html .= "<p><strong>Nom Prénom : </strong>".$msg->lastname." ".$msg->firstname."</p>";
$html .= "<p><strong>E-mail : </strong>".$msg->email."</p>";
$html .= "<p>".nl2br($msg->content)."</p>";
$html .= "<h1>Réponse :</h1>";
$html .= "<p>".nl2br($msg->response)."</p>";
$html .= "</div>";
echo($html);
die();
}
//Ajax pour ouvrir la page de réponse
add_action( 'wp_ajax_getReponseForMsg', 'getReponseForMsg' );
add_action( 'wp_ajax_nopriv_getReponseForMsg', 'getReponseForMsg' );
function getReponseForMsg(){
global $wpdb;
$msg_id = $_POST['id'];
$msg = $wpdb->get_row("SELECT * FROM wp_messages, wp_messages_types WHERE wp_messages.type_id = wp_messages_types.id AND wp_messages.id = $msg_id LIMIT 1", OBJECT);
if ($msg === NULL)
die('<h1>Message inconnu</h1>');
$html = "<div class='msg-reponse'>";
$html .= "<h1>Message du consommateur :</h1>";
$html .= "<p><strong>Nom Prénom : </strong>".$msg->lastname." ".$msg->firstname."</p>";
$html .= "<p><strong>E-mail : </strong>".$msg->email."</p>";
$html .= "<p>".nl2br($msg->content)."</p>";
$html .= "<h1>Votre Réponse :</h1>";
$html .= "<input type='hidden' name='email' id='emailTosend' value='".$msg->email."'/>";
$html .= "<textarea name='answer' id='msgTosend'></textarea>";
$html .= "<button class='send-answer' id='msgTosend'>Envoyer</button>";
$html .= "</div>";
echo($html);
die();
}
// Function to change email address
function wpb_sender_email( $original_email_address ) {
return 'nepasrepondre@ldc.fr';
}
// Function to change sender name
function wpb_sender_name( $original_email_from ) {
return 'Groupe LDC';
}
// Hooking up our functions to WordPress filters
add_filter( 'wp_mail_from', 'wpb_sender_email' );
add_filter( 'wp_mail_from_name', 'wpb_sender_name' );
//Ajax d'envoi de la réponse
add_action( 'wp_ajax_sendReponse', 'sendReponse' );
add_action( 'wp_ajax_nopriv_sendReponse', 'sendReponse' );
function sendReponse(){
global $wpdb;
$email = $_POST['email'];
$message = $_POST['message'];
$msg_id = $_POST['id'];
$ref = $_POST['ref'];
$message = "REF: $ref <br><br>" . nl2br($message);
wp_mail($email, "Réponse à votre message sur le site LDC", $message);
$wpdb->update(
'wp_messages',
[
'response' => $message,
'response_date' => date('Y-m-d H:i:s'),
'status' => 1,
], ['id' => $msg_id], [
'%s',
'%s',
'%d',
]
);
$html = "<h1>Message Envoyé !</h1>";
echo($html);
die();
}
///////////////////// RECUPERATION ET AFFICHAGE DE LA BOURSE //////////////////////
add_filter( 'cron_schedules', function ( $schedules ) {
$schedules['every-15-minutes'] = array(
'interval' => 15 * MINUTE_IN_SECONDS,
'display' => __( 'Every 15 minutes' )
);
return $schedules;
} );
if (!wp_next_scheduled( 'getFinancialData_hook')) {
wp_schedule_event(strtotime('4:30:00'), 'daily', 'getFinancialData_hook');
}
add_action( 'getFinancialData_hook', 'getFinancialHistoryData');
if (!wp_next_scheduled ( 'getIntradayData_hook')) {
wp_schedule_event(strtotime('9:00:00'), 'every-15-minutes', 'getIntradayData_hook');
}
add_action('getIntradayData_hook', 'getIntradayData');
//Fonction Pour récupérer les données de l'action (A utiliser dans un cron toutes les 15 minutes entre 09h 17h30)
function getIntradayData() {
global $wpdb;
$token = "A0RACEYVTKIGRF5M";
$baseUrl = 'https://www.alphavantage.co/query?apikey=' . $token . '&function=TIME_SERIES_INTRADAY&symbol=LOUP.PA&interval=15min&outputsize=full';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $baseUrl);
$response = curl_exec($ch);
curl_close($ch);
$intraday = json_decode($response, true);
// Check the return value of curl_exec(), too
if ($intraday === false) {
throw new \Exception(curl_error($ch), curl_errno($ch));
}
if (!isset($intraday['Time Series (15min)'])) {
return;
}
// Clear table
$wpdb->query("DELETE FROM wp_financialdata_intraday");
foreach ($intraday['Time Series (15min)'] as $date => $datas) {
// Skip <> current day datas
if (date('Y-m-d', strtotime($date)) !== date('Y-m-d'))
continue;
$open = $datas['1. open'];
$high = $datas['2. high'];
$low = $datas['3. low'];
$close = $datas['4. close'];
$volume = $datas['5. volume'];
$fDate = new DateTime($date, new DateTimeZone('America/New_York'));
$tDate = $fDate->setTimezone(new DateTimeZone('Europe/Paris'));
$wpdb->insert(
'wp_financialdata_intraday',
[
'date' => $tDate->format('Y-m-d H:i:s'),
'open' => $open,
'high' => $high,
'low' => $low,
'close' => $close,
'volume' => $volume
], [
'%s',
'%f',
'%f',
'%f',
'%f',
'%f',
'%d'
]
);
}
$baseUrl = 'https://www.alphavantage.co/query?apikey=' . $token . '&function=GLOBAL_QUOTE&symbol=LOUP.PA';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $baseUrl);
$response = curl_exec($ch);
curl_close($ch);
$stock = json_decode($response, true);
// Check the return value of curl_exec(), too
if ($stock === false) {
throw new \Exception(curl_error($ch), curl_errno($ch));
}
if (!isset($stock['Global Quote'])) {
return;
}
$wpdb->replace(
'wp_financialdata',
array(
'name' => 'stock',
'data' => json_encode($stock['Global Quote']),
),
array(
'%s',
'%s',
)
);
exit;
}
//Fonction pour récupérer les données historiques de l'action (A utiliser dans un cron toutes les nuits)
function getFinancialHistoryData()
{
global $wpdb;
$token = "A0RACEYVTKIGRF5M";
//Get historical data for financial data
$url_historical = 'https://www.alphavantage.co/query?apikey=' . $token . '&function=TIME_SERIES_DAILY&symbol=LOUP.PA&outputsize=full';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url_historical);
$response = curl_exec($ch);
curl_close($ch);
$history = json_decode($response, true);
// Check the return value of curl_exec(), too
if ($history === false) {
throw new \Exception(curl_error($ch), curl_errno($ch));
}
if (!isset($history['Time Series (Daily)'])) {
return;
}
foreach ($history['Time Series (Daily)'] as $date => $day) {
// Skip current day datas
if ($date === date('Y-m-d'))
continue;
$open = $day['1. open'];
$high = $day['2. high'];
$low = $day['3. low'];
$close = $day['4. close'];
$volume = $day['5. volume'];
$test = $wpdb->get_results($wpdb->prepare("SELECT id FROM wp_financialdata_history WHERE date = %d", [$date]), OBJECT);
if (!$test) {
$wpdb->insert(
'wp_financialdata_history',
[
'date' => $date,
'open' => $open,
'high' => $high,
'low' => $low,
'close' => $close,
'volume' => $volume
], [
'%s',
'%f',
'%f',
'%f',
'%f',
'%f',
'%d'
]
);
}
}
exit;
}
//AJAX pour récupérer les données de l'action en fonction de la période pour les afficher dans un chartJS
add_action( 'wp_ajax_getGraphData', 'getGraphData' );
add_action( 'wp_ajax_nopriv_getGraphData', 'getGraphData' );
function getFinancialHistoryDatasByPeriod($period = false)
{
global $wpdb;
if ($period){
if ($period === "5"){
return $wpdb->get_results("SELECT * FROM wp_financialdata_history LIMIT 5");
}
return $wpdb->get_results("SELECT * FROM wp_financialdata_history WHERE date > CURDATE() - INTERVAL $period DAY");
}
return $wpdb->get_results("SELECT * FROM wp_financialdata_history");
}
function getGraphData(){
$period = $_POST['period'];
global $wpdb;
$date_arr = [];
$values = [];
switch ($period){
case '5':
case '30':
case '182':
case '365':
case '1825':
$periodDatas = getFinancialHistoryDatasByPeriod($period);
break;
case 'YTD':
$p = date('z');
$periodDatas = getFinancialHistoryDatasByPeriod($p);
break;
case 'all':
$periodDatas = getFinancialHistoryDatasByPeriod();
break;
case 'intraday':
$periodDatas = $wpdb->get_results("SELECT * FROM wp_financialdata_intraday");
break;
}
foreach ($periodDatas as $item) {
if($period == 'intraday'){
array_push($date_arr, date('H:i', strtotime($item->date)));
} else {
array_push($date_arr, date('d/m/Y', strtotime($item->date)));
}
array_push($values, $item->close);
}
$date_arr = array_reverse($date_arr);
$values = array_reverse($values);
echo json_encode(array("dates" => $date_arr, "values" => $values));
die();
}
///////////////////// POC : ALERTES POUR LES OFFRES D'EMPLOI //////////////////////
//Fonction pour récupérer et enregistrer les données DigitalRecruiters dans une table
function getDataFromDigitalRecruiters(){
global $wpdb;
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_URL, 'https://app.digitalrecruiters.com/export/job-ads/VB6kTDohe53TK0SMiu4CRGpj14UXLvgzh3mFu7eY');
$result = curl_exec($ch);
curl_close($ch);
$poles = array();
$metier = array();
$type = array();
$tps = array();
if($result){
$oDigitalRecruiter = json_decode($result);
if(isset($oDigitalRecruiter->ads)){
foreach($oDigitalRecruiter->ads as $offer){
$hierarchy_array = $offer->entity->hierarchy;
foreach ($hierarchy_array as $oHierarchy) {
if($oHierarchy->column_name == "Pôles"){
$p = $oHierarchy->public_name;
}
}
if(!in_array($p, $poles)){
array_push($poles, $p);
}
$m = $offer->service;
if(!in_array($m, $metier)){
array_push($metier, $m);
}
$t = $offer->contract_type;
if(!in_array($t, $type)){
array_push($type, $t);
}
$tp = $offer->contract_work_period;
if(!in_array($tp, $tps)){
array_push($tps, $tp);
}
}
}
}
$wpdb->replace(
'wp_recruiterdata',
array(
'name' => 'poles',
'data' => json_encode($poles),
),
array(
'%s',
'%s',
)
);
$wpdb->replace(
'wp_recruiterdata',
array(
'name' => 'metiers',
'data' => json_encode($metier),
),
array(
'%s',
'%s',
)
);
$wpdb->replace(
'wp_recruiterdata',
array(
'name' => 'types',
'data' => json_encode($type),
),
array(
'%s',
'%s',
)
);
$wpdb->replace(
'wp_recruiterdata',
array(
'name' => 'temps',
'data' => json_encode($tps),
),
array(
'%s',
'%s',
)
);
$wpdb->replace(
'wp_recruiterdata',
array(
'name' => 'data',
'data' => json_encode($oDigitalRecruiter->ads),
),
array(
'%s',
'%s',
)
);
die();
}
// Ajax pour enregistrer les utilisateurs a l'alerte job avec leur paramètres
add_action( 'wp_ajax_registerMailJobAlert', 'registerMailJobAlert' );
add_action( 'wp_ajax_nopriv_registerMailJobAlert', 'registerMailJobAlert' );
function registerMailJobAlert(){
global $wpdb;
$poles = sanitize_text_field($_POST['poles']);
$metiers = sanitize_text_field($_POST['metiers']);
$types = sanitize_text_field($_POST['types']);
$temps = sanitize_text_field($_POST['temps']);
$email = sanitize_email($_POST['email']);
$token = $_POST['token'];
$secret = "6LePZvAUAAAAAHW0Upj3jRH9wTzGrMO1aWpg9ICn";
if(isset($_SERVER["HTTP_X_FORWARDED_FOR"]) && $_SERVER["HTTP_X_FORWARDED_FOR"] != ""){
if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',')) {
$explode = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$remoteip = trim($explode[0]);
}else{
$remoteip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
}else{
$remoteip = $_SERVER["REMOTE_ADDR"];
}
$api_url = "https://www.google.com/recaptcha/api/siteverify?secret=". $secret. "&response=" . $token. "&remoteip=" . $remoteip ;
$decode = json_decode(file_get_contents($api_url), true);
if ($decode['success'] == true){
$data = array(
'poles' => $poles,
'metiers' => $metiers,
'types' => $types,
'temps' => $temps
);
$wpdb->delete( 'wp_jobalert', array( 'email' => $email ) );
$wpdb->replace(
'wp_jobalert',
array(
'email' => $email,
'data' => json_encode($data),
),
array(
'%s',
'%s',
)
);
echo(json_encode('ok'));
}else{
echo(json_encode('Une erreur est survenue. Veuillez recharger la page.'));
}
die();
}
//Fonctions qui cherchent les annonces correspondantes et les envoient par mail (A mettre dans un cron toutes les nuits)
//Attention, Il faut mettre la configuration SMTP pour l'envoi de mail / Faire un template de mail
function checkMailToAlert() {
global $wpdb;
//Récupère les informations des personnes enregistrés pour l'alerte
$alertData = $wpdb->get_results(
"
SELECT email, data
FROM wp_jobalert
",
ARRAY_A
);
//Récupère les informations de digitalrecruiter (les différents poles, types, metiers, temps et la liste des annonces)
$jobData = $wpdb->get_results(
"
SELECT name, data
FROM wp_recruiterdata
",
ARRAY_A
);
//Créé les tableaux des infos digitalrecruiters
foreach ($jobData as $dataValues) {
switch ($dataValues['name']) {
case 'poles':
$poles = json_decode($dataValues['data']);
break;
case 'metiers':
$metiers = json_decode($dataValues['data']);
break;
case 'types':
$types = json_decode($dataValues['data']);
break;
case 'temps':
$temps = json_decode($dataValues['data']);
break;
case 'data':
$jobads = json_decode($dataValues['data']);
break;
}
}
//Pour chaque personne ayant demandés une alerte
foreach ($alertData as $userData) {
$userEmail = $userData['email'];
$userPoleFilter = "";
$userMetierFilter = "";
$userTypeFilter = "";
$userTempsFilter = "";
$userJobAds = $jobads;
//Correspondance entre ID des filtres utilisateurs avec les tableaux des infos digitalrecruiters (Récupère la valeur de recherche)
$oFilters = json_decode($userData['data']);
if($oFilters->poles != 'all'){
$userPoleFilter = $poles[$oFilters->poles];
}
if($oFilters->metiers != 'all'){
$userMetierFilter = $metiers[$oFilters->metiers];
}
if($oFilters->types != 'all'){
$userTypeFilter = $types[$oFilters->types];
}
if($oFilters->temps != 'all'){
$userTempsFilter = $temps[$oFilters->temps];
}
$keysToDelete = array();
//Pour chaque Annonces, on va checker chaque filtres et récupérer les ids a supprimer du tableaux
foreach ($userJobAds as $key => $oJob) {
$remove = false;
if($userMetierFilter != "" && $oJob->service != $userMetierFilter){
$remove = true;
}
if($userTypeFilter != "" && $oJob->contract_type != $userTypeFilter){
$remove = true;
}
if($userTempsFilter != "" && $oJob->contract_work_period != $userTempsFilter){
$remove = true;
}
foreach ($oJob->entity->hierarchy as $hierarchy) {
if($hierarchy->column_name == "Pôles"){
if($userPoleFilter != "" && $hierarchy->public_name != $userPoleFilter){
$remove = true;
}
}
}
if($remove){
array_push($keysToDelete, $key);
}
}
//Effacement des annonces qui ne correspondent pas au filtres.
foreach ($keysToDelete as $key) {
unset($userJobAds[$key]);
}
//Envoi du mail s'il y a des annonces correspondantes
if(count($userJobAds) > 0){
$body = "<html>";
$body .= "<head></head>";
$body .= "<body>";
$body .= "<p>Bonjour,</p>";
$body .= "<p>Vous vous êtes inscrits pour recevoir des alertes aux annonces LDC correspondantes a votre profil.</p>";
$body .= "<p>De nouveaux résultats sont disponibles :</p>";
$body .= "<ul>";
foreach ($userJobAds as $oJob) {
$body .= "<li><a href='".$oJob->apply_url."'>".$oJob->title."</a></li>";
}
$body .= "</ul>";
$body .= "<p>Merci</p>";
$body .= "</body></html>";
}
var_dump($body);
echo '<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>';
}
die();
}
//////////////////////////////// POC : GMAP Societe //////////////////////////////////////////////
//--- Intégration de la classe CSociete pour faciliter la manipulation des objets ?
require_once( get_template_directory() . '/societe.class.php' );
// ---- CPT Societe
function wp_cpt_societes() {
$labels = array(
'name' => _x( 'Société', 'Post Type General Name'),
'singular_name' => _x( 'Société', 'Post Type Singular Name'),
'menu_name' => __( 'Sociétés'),
'all_items' => __( 'Tous les Sociétés'),
'view_item' => __( 'Voir les Sociétés'),
'add_new_item' => __( 'Ajouter une Société'),
'add_new' => __( 'Ajouter'),
'edit_item' => __( 'Editer la Société'),
'update_item' => __( 'Modifier la Société'),
'search_items' => __( 'Rechercher une Société'),
'not_found' => __( 'Non trouvée'),
'not_found_in_trash' => __( 'Non trouvée dans la corbeille'),
);
$args = array(
'label' => __( 'Société'),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail'),
'hierarchical' => true,
'public' => true,
'has_archive' => true,
'taxonomies' => array('type'),
'rewrite' => array( 'slug' => 'type'),
'map_meta_cap' => true,
'menu_icon' => 'dashicons-admin-site-alt2'
);
register_post_type( 'societe', $args );
}
add_action( 'init', 'wp_cpt_societes', 0 );
// ---- Taxo : Type d'activité des societes
function taxo_type_societe() {
$args = array(
'label' => __( 'Type d\'Activité' ),
'hierarchical' => true,
'rewrite' => array( 'slug' => 'type-activite', 'with_front' => false ),
'show_ui' => true,
'show_in_quick_edit' => false,
'show_in_rest' => false,
'show_admin_column' => true,
);
register_taxonomy( 'type-activite', 'societe', $args );
}
add_action( 'init', 'taxo_type_societe');
// ---- Taxo : Filières des societes
function taxo_filieres_societe() {
$args = array(
'label' => __( 'Filières' ),
'hierarchical' => true,
'rewrite' => array( 'slug' => 'filieres', 'with_front' => false ),
'show_ui' => true,
'show_in_quick_edit' => false,
'show_admin_column' => true,
);
register_taxonomy( 'filieres', 'societe', $args );
}
add_action( 'init', 'taxo_filieres_societe');
// Fonction utilitaires pour réintégrer les sociétés en fonction d'un json et d'un dossier de logos
function importSociete(){
include_once( ABSPATH . 'wp-admin/includes/image.php' );
$dir = wp_upload_dir();
$file = $dir['basedir']."/import/export_societe.json";
$data = file_get_contents($file);
foreach (json_decode($data) as $oSociete) {
//Insertion du post
$postarr = array(
'post_title' => $oSociete->titre,
'post_status' => 'publish',
'post_type' => 'societe',
);
$societeId = wp_insert_post($postarr);
$term = get_term_by('name', $oSociete->filiere, 'filieres');
$termId = $term->term_id;
update_field('field_5e5f6c2f2c95a', $termId, $societeId);
$termType = get_term_by('slug', $oSociete->type_activite, 'type-activite');
$termTypeId = $termType->term_id;
update_field('field_5e5f6c002c959', $termTypeId, $societeId);
//Ajout du logo
$fullpath_img = $dir['basedir']."/import/".$oSociete->logo;
$full_path = $dir['path']."/". $oSociete->logo;
copy($fullpath_img, $full_path);
// Check the type of file. We'll use this as the 'post_mime_type'.
$filetype = wp_check_filetype(basename($full_path), null);
// Prepare an array of post data for the attachment.
$attachment = array(
'guid' => $dir['url'] . '/' . basename($full_path),
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace( '/\.[^.]+$/', '', basename($full_path) ),
'post_content' => '',
'post_status' => 'inherit'
);
// Insert the attachment.
$attach_id = wp_insert_attachment( $attachment, $full_path, $societeId );
$attach_data = wp_generate_attachment_metadata( $attach_id, $full_path );
wp_update_attachment_metadata( $attach_id, $attach_data );
// Saving image
update_field('field_5e5f6e8adcab0', $attach_id, $societeId);
//Ajout des champs de base avec ACF
update_field('field_5e5f6ea3dcab1', $oSociete->adresse , $societeId);
update_field('field_5e5f6eb7dcab2', $oSociete->responsable , $societeId);
update_field('field_5e5f6ec6dcab3', $oSociete->departement , $societeId);
update_field('field_5e5f6ed7dcab4', $oSociete->activite , $societeId);
update_field('field_5e5f6ee2dcab5', $oSociete->effectif , $societeId);
update_field('field_5e5f6ef7dcab6', $oSociete->contact , $societeId);
update_field('field_5e5f6f09dcab7', $oSociete->url , $societeId);
update_field('field_5e5f6f1bdcab8', $oSociete->infos_sup , $societeId);
update_field('field_5e5f6f4fdcaba', $oSociete->responsable_pole , $societeId);
update_field('field_5e5f6fb4dcabb', $oSociete->latitude , $societeId);
update_field('field_5e5f6fbcdcabc', $oSociete->longitude , $societeId);
}
}
add_theme_support( 'title-tag' );
add_filter( 'document_title_parts', function( $title )
{
if ( is_search() )
$title['title'] = sprintf(
esc_html__( '&#8220;%s&#8221; result213123 page', 'ldc' ),
get_search_query()
);
return $title;
} );
add_filter('relevanssi_index_custom_fields', 'rlv_skip_custom_fields');
function rlv_skip_custom_fields($custom_fields) {
$unwanted_fields = array('text_block');
$custom_fields = array_diff($custom_fields, $unwanted_fields);
return $custom_fields;
}
add_action( 'alm_get_theme_repeater', 'alm_get_theme_repeater');
function alm_get_theme_repeater($theme_repeater){
get_template_part('partials/'.$theme_repeater);
}
add_filter('alm_modify_query_args', 'alm_modify_query_args_parida');
function alm_modify_query_args_parida($args) {
if(isset($args["date_query"])){
if(!is_array($args["date_query"]))
$args["date_query"] = array($args["date_query"]);
$s = array();
foreach ($args["date_query"] as $year)
$s[]['year'] = $year;
$args["date_query"] = array('relation' => 'OR', $s);
}
return $args;
}
function language_selector_flags(){
$languages = icl_get_languages('skip_missing=0&orderby=code');
$lc = 1;
if(!empty($languages)){
foreach($languages as $l){
if(!$l['active']) {
echo '<a class="langs__item" href="'.$l['url'].'">';
} else {
echo '<a class="langs__item active">';
}
echo strtoupper($l['code']);
echo '</a>';
if($lc < count($languages)) {
echo '<span href="langs__item"> / </span>';
}
$lc++;
}
}
}
/*
class CustomWalker extends Walker_Nav_Menu {
var $current_menu = null;
var $break_point = null;
function start_el(&$output, $item, $depth, $args) {
global $wp_query;
// Get the locations of nav menus
$theme_locations = get_nav_menu_locations();
// Get the menu object of the current nav menu based on the returned theme location
$menu_obj = get_term( $theme_locations[$args->theme_location], 'nav_menu' );
if( !isset( $this->current_menu ) ) {
$this->current_menu = wp_get_nav_menu_object( $menu_obj->term_id );
}
if( !isset( $this->break_point ) ) {
$this->break_point = ceil( $this->current_menu->count / 2 ) + 1;
}
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = 'menu-item-' . $item->ID;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
$class_names = ' class="' . esc_attr( $class_names ) . '"';
$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
$id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';
if( $this->break_point == $item->menu_order ) {
$output .= $indent . '</li></ul><ul class="nav top-nav cf right"><li' . $id . $value . $class_names .'>';
} else {
$output .= $indent . '<li' . $id . $value . $class_names . '>';
}
$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
$item_output = $args->before;
$item_output .= '<a'. $attributes .'>';
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
}*/
function custom_menu_output( $theme_location ) {
if ( ($theme_location) && ($locations = get_nav_menu_locations()) && isset($locations[$theme_location]) ) {
$menu = get_term( $locations[$theme_location], 'nav_menu' );
$menu_items = wp_get_nav_menu_items($menu->term_id);
$menus = array();
foreach( $menu_items as $menu_item ) {
$pid = $menu_item->menu_item_parent ? $menu_item->menu_item_parent : 0;
$menus[$pid][$menu_item->ID] = array(
'link' => $menu_item->url,
'title' => $menu_item->title,
'id' => $menu_item->ID,
);
}
$pomoika = '';
$i = 0;
foreach($menus as $key => $menu) {
if($key == 0)
echo '<div class="mobile-menu__block mobile-menu__block_main"><ul data-menu="main" class="mobile-menu__level">';
else
//var_dump($menus[0][$key]);
echo '<div class="mobile-menu__block mobile-menu__block_sub" data-menu="submenu-'.$key.'"><div class="mobile-menu__block-title"><div class="mobile-menu__block-close"></div><a href="'.$menus[0][$key]['link'].'">'.$menus[0][$key]['title'].'</a></div><ul class="mobile-menu__level">';
if ($key == "2951")
{
get_template_part('partials/menu-rejoin-mobile', ICL_LANGUAGE_CODE);
echo '</ul></div>';
} else {
foreach($menu as $item) {
if(isset($menus[$item['id']])) {
echo '<li class="mobile-menu__item"><a class="mobile-menu__link" href="'.$item["link"].'">'.$item['title'].'</a><a class="menu-arrow-box mobile-menu__link_hassub" data-submenu="submenu-'.$item['id'].'" href="#"><div class="menu-submenu-arrow"></div></a></li>';
}
else if ($item["title"] == "Présentation des engagements" || $item["title"] == "Les 4 engagements LDC") {
echo '<div class="menu-mobile-message">'.$item["title"].'</div>';
} else
echo '<li class="mobile-menu__item"><a class="mobile-menu__link" href="'.$item['link'].'">'.$item['title'].'</a></li>';
}
echo '</ul>'.$pomoika;
}
if ($i == 0)
{
get_template_part('partials/footer-mobile');
echo '</div>';
$pomoika = '</div>';
$i++;
}
}
} else {
echo '<!-- no menu defined in location "'.$theme_location.'" -->';
}
}
add_filter( 'post_limits', 'rlv_postsperpage' );
function rlv_postsperpage( $limits ) {
if ( is_search() ) {
global $wp_query;
$wp_query->query_vars['posts_per_page'] = 10;
}
return $limits;
}