api/actividadeswp/v3/inc/conferencia.php

449 lines
16 KiB
PHP

<?php
/**
* Main conferencia class to handle all functions for conferencias interaction for the API.
*
* This class uses the db.php files connection in PDO style and only returns SQL statements.
*
* @author XFATBoY (xfatboy@carpa.com)
* @since v1
*/
class Conferencia{
private $conn;
private $table_name = "wp_posts";
public $id;
public $name;
public $description;
public $price;
public $category_id;
public $category_name;
public $created;
/**
* Main constructor
*
* Initializes with the db
*/
public function __construct($db){
$this->conn = $db;
}
/**
* Helper function to get all blogs and their languages
*/
function get_blog_by_locale($locale){
$r = '';
switch($locale){
case "fr_FR":
case "fr":
$r = "wp_4_";
break;
case "en":
case "en_US":
$r = "wp_2_";
break;
case "pt":
case "pt-br":
case "pt_br":
case "pt_BR":
$r = "wp_3_";
break;
case "es":
case "es_ES":
default:
$r = "wp_";
break;
}
return $r;
}
function translation_list( $year, $month, $last_update, $text, $locale, $termid="ultimas" ){ //Default last updated
//Check locale and change accordingly to the right DB prefix for that locale
$prefix = $this->get_blog_by_locale( $locale );
$sql = "SELECT
P.ID,
P.post_title AS title,
P.post_date AS creation_date,
P.post_modified as last_updated,
P.post_name as slug,";
if($text){
$sql .= "P.post_content as content,";
}
$sql .= "LENGTH(P.post_content) as bodylength,
O.option_value AS translationmeta
FROM ".$prefix."posts P
LEFT JOIN ".$prefix."options O ON O.option_name = CONCAT('msls_',P.ID)";
if($year == '' && $month == ''){
$sql .= "
INNER JOIN ".$prefix."term_relationships AS tr ON (P.ID = tr.object_id)
INNER JOIN ".$prefix."terms AS t ON (t.term_id = tr.term_taxonomy_id)";
}
$sql .= "
WHERE P.post_type = 'conferencias'
AND P.post_status = 'publish'";
if($year!=''){
$sql .= " AND YEAR(P.post_date) = '$year'";
if($month!=''){
$sql .= " AND MONTH(P.post_date) = '$month'";
}
if($last_update!=''){
$sql .= " AND UNIX_TIMESTAMP(P.post_modified) > ". $last_update;
}
$sql .= " ORDER BY P.post_date DESC";
} else {
$sql .= " AND t.slug = '$termid'";
$sql .= " ORDER BY P.post_modified DESC";
$sql .= " LIMIT 16";
}
return $this->execute_sql( $sql );
}
function conference_meta($id){
$sql = "SELECT
IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
MD.date,
MD.activity AS no_activity,
MD.city,
MD.country,
MD.state,
MD.private,
PMA.meta_value AS thumbnail,
PMAS.meta_value AS meta
FROM wp_posts P
LEFT JOIN wp_messagedata MD ON P.id = MD.post_id
LEFT JOIN wp_postmeta PM ON PM.post_id = P.ID AND PM.meta_key = '_thumbnail_id'
LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
LEFT JOIN wp_postmeta PMAS ON PM.meta_value = PMAS.post_id AND PMAS.meta_key = '_wp_attachment_metadata'
LEFT JOIN wp_options O ON O.option_name = CONCAT('msls_',P.ID)
WHERE P.post_type = 'conferencias'
AND P.post_status = 'publish'
AND P.ID = ".$id;
$data = $this->execute_sql( $sql );
$response = $data->fetch(PDO::FETCH_ASSOC);
return $response;
}
/**
* List function
*
* Displays the list of messages with it's pertinent variables
*
*/
function list( $year, $month, $last_update, $text, $locale ){
$sql = "SELECT
P.ID,
P.post_title AS title,
P.post_date AS creation_date,
P.post_modified as last_updated,";
if($text){
$sql .= "P.post_content as content,";
}
$sql .= "LENGTH(P.post_content) as bodylength,
IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
MD.date,
MD.activity AS no_activity,
MD.city,
MD.country,
MD.state,
PMA.meta_value AS thumbnail,
PMAS.meta_value AS meta,
O.option_value AS translationmeta,
P.post_name as slug
FROM wp_posts P
LEFT JOIN wp_messagedata MD ON P.id = MD.post_id
LEFT JOIN wp_postmeta PM ON PM.post_id = P.ID AND PM.meta_key = '_thumbnail_id'
LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
LEFT JOIN wp_postmeta PMAS ON PM.meta_value = PMAS.post_id AND PMAS.meta_key = '_wp_attachment_metadata'
LEFT JOIN wp_options O ON O.option_name = CONCAT('msls_',P.ID)
WHERE P.post_type = 'conferencias'
AND P.post_status = 'publish'";
if($year!=''){
$sql .= " AND YEAR(MD.date) = '$year'";
}
if($month!=''){
$sql .= " AND MONTH(MD.date) = '$month'";
}
if($last_update!=''){
$sql .= " AND UNIX_TIMESTAMP(P.post_modified) > ". $last_update;
}
$sql .= " ORDER BY P.post_date DESC";
return $this->execute_sql( $sql );
}
/**
* Detail function
*
* Given an ID returns the message with all details
*
* @param id Int id of the message whose details want to be found.
*/
function detail($id,$locale){
//Check locale and change accordingly to the right DB prefix for that locale
$prefix = $this->get_blog_by_locale( $locale );
$sql = "SELECT
P.ID,
P.post_title AS title,
P.post_content AS content,
P.post_date AS creation_date,
P.post_modified AS last_updated,
O.option_value AS translationmeta,
P.post_name as slug
FROM ".$prefix."posts AS P
LEFT JOIN ".$prefix."options O ON O.option_name = CONCAT('msls_',P.ID)
WHERE P.ID = '$id'";
return $this->execute_sql( $sql );
}
/**
* Slug function
*
* Given a slug, returns the message with all details
*
* @param slug String Slug of the message whose details want to be found
*/
function detailBySlug($slug,$locale){
//Check locale and change accordingly to the right DB prefix for that locale
$prefix = $this->get_blog_by_locale( $locale );
$sql = "SELECT
P.ID,
P.post_title AS title,
P.post_content AS content,
P.post_date AS creation_date,
P.post_modified AS last_updated,
O.option_value AS translationmeta,
P.post_name as slug
FROM ".$prefix."posts AS P
LEFT JOIN ".$prefix."options O ON O.option_name = CONCAT('msls_',P.ID)
WHERE P.post_name = '$slug'";
return $this->execute_sql( $sql );
}
/**
* Last update function
*
* Returns the last updated imtestamp for the message passed in via the @id
*
* @param id Int id for whom the last update should be found
*/
function last_update($id){
$sql = "SELECT
P.post_modified AS last_updated
FROM wp_posts P
WHERE P.ID = '$id'";
return $this->execute_sql( $sql );
}
/**
* Execute SQL function
*
* Executes a generic SQL statement and passes back the result.
*
* @param string sql SQl statement to be executed
* @return
*/
function execute_sql( $sql ){
$stmt = $this->conn->prepare($sql);
$stmt->execute();
return $stmt;
}
/**
* Relevant conferences function
*
* Get all relevant conferences and return
*/
function relevant_conferences(){
$sql = "SELECT
option_value
FROM wp_options
where option_name = 'options_conference'";
return $this->execute_sql( $sql );
}
function get_post_source($trid){
$sql = "SELECT
T.element_id AS post_id
FROM wp_icl_translations AS T
WHERE T.trid = '$trid'
AND T.language_code = 'es'";
return $this->execute_sql( $sql );
}
function get_post_language($id){
$sql = "SELECT
T.language_code,
T.trid
FROM wp_icl_translations AS T
WHERE T.element_id = '$id'
AND T.element_type = 'post_message'";
return $this->execute_sql( $sql );
}
function get_post_metadata($id){
$sql = "SELECT
IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
MD.country,
MD.state,
MD.city AS city,
MD.activity AS no_activity
FROM wp_messagedata AS MD
WHERE post_id = '$id'";
return $this->execute_sql( $sql );
}
function get_post_files($id,$locale){
//Check locale and change accordingly to the right DB prefix for that locale
$prefix = $this->get_blog_by_locale( $locale );
$sql = "SELECT
MF.youtube,
MF.video,
MF.audio,
MF.pdf,
MF.pdf_simple,
MF.videofile,
MF.audiofile,
MF.pdffile,
MF.pdfsimplefile
FROM ".$prefix."messagefiles as MF
WHERE MF.post_id = '$id'";
return $this->execute_sql( $sql );
}
function get_post_file($id,$locale){
//Check locale and change accordingly to the right DB prefix for that locale
$prefix = $this->get_blog_by_locale( $locale );
$sql = "SELECT
P.guid as url
FROM ".$prefix."posts P
WHERE P.ID = '$id'";
return $this->execute_sql( $sql );
}
function title_search($q,$locale){
//Check locale and change accordingly to the right DB prefix for that locale
$prefix = $this->get_blog_by_locale( $locale );
$sql = "SELECT
P.ID,
P.post_title AS title,
P.post_date AS creation_date,
P.post_modified as last_updated,
O.option_value AS translationmeta,
P.post_name as slug
FROM ".$prefix."posts AS P
LEFT JOIN ".$prefix."options O ON O.option_name = CONCAT('msls_',P.ID)
WHERE P.post_type = 'conferencias'
AND P.post_status = 'publish'
AND P.post_title LIKE('%$q%')";
return $this->execute_sql($sql);
}
function content_search($q){
$sql = "SELECT
P.ID,
P.post_title AS title,
P.post_date AS creation_date,
P.post_modified as last_updated,
IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
MD.date,
MD.activity AS no_activity,
MD.city,
MD.country,
MD.state,
PMA.meta_value AS thumbnail,
P.post_name as slug,
MATCH(P.post_content) AGAINST ('$q' IN NATURAL LANGUAGE MODE) as score,
SUBSTRING(P.post_content, LOCATE('$q', P.post_content) - 20, 300 + LENGTH('$q') + 300) as excerpt
FROM wp_posts P
LEFT JOIN wp_messagedata MD ON P.id = MD.post_id
LEFT JOIN wp_postmeta PM ON PM.post_id = P.ID AND PM.meta_key = '_thumbnail_id'
LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
WHERE P.post_type = 'conferencias'
AND P.post_status = 'publish'
AND MATCH(P.post_content) AGAINST ('$q' IN NATURAL LANGUAGE MODE)
ORDER BY score DESC";
return $this->execute_sql($sql);
}
function country_summary(){
$sql = "SELECT
count( P.ID ) as total,
MC.country_name as country,
MC.country_code as country_code
FROM `wp_posts` P
INNER JOIN wp_messagedata MD ON MD.post_id = P.ID
INNER JOIN wp_messagecountries MC ON MC.country_code = MD.country
WHERE `post_status` = 'publish'
AND `post_type` = 'conferencias'
AND MC.language_code = 'es'
GROUP BY country_code
ORDER BY country;";
return $this->execute_sql($sql);
}
function country_list($c){
$sql = "SELECT
P.ID,
P.post_title AS title,
P.post_date AS creation_date,
P.post_modified as last_updated,
LENGTH(P.post_content) as bodylength,
IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
MD.date,
MD.activity AS no_activity,
MD.city,
MD.country,
MD.state,
PMA.meta_value AS thumbnail,
P.post_name as slug
FROM wp_posts P
LEFT JOIN wp_messagedata MD ON P.id = MD.post_id
LEFT JOIN wp_postmeta PM ON PM.post_id = P.ID AND PM.meta_key = '_thumbnail_id'
LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
WHERE P.post_type = 'conferencias'
AND P.post_status = 'publish'
AND MD.country = '$c'
ORDER BY MD.date DESC";
return $this->execute_sql($sql);
}
function year_list(){
$sql = "SELECT
count(ID) as total,
YEAR(post_date) as year,
MONTH(post_date) as month
FROM wp_posts
WHERE `post_status` = 'publish'
AND `post_type` = 'conferencias'
GROUP BY YEAR(post_date), MONTH(post_date)
ORDER BY YEAR(post_date) DESC, MONTH(post_date) DESC;";
return $this->execute_sql($sql);
}
function lgccctv_list( $locale ){
//Check locale and change accordingly to the right DB prefix for that locale
$prefix = $this->get_blog_by_locale( $locale );
$sql = "SELECT
P.ID,
P.post_title AS title,
P.post_date AS creation_date,
P.post_modified as last_updated,
P.post_name as slug,
O.option_value AS translationmeta
FROM ".$prefix."posts P
LEFT JOIN ".$prefix."options O ON O.option_name = CONCAT('msls_',P.ID)
WHERE P.post_type = 'conferencias'
AND P.post_status = 'publish'";
return $this->execute_sql( $sql );
}
}