api/conferenciaswp/v2/inc/conferencia.php

292 lines
9.9 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;
}
/**
* List function
*
* Displays the list of messages with it's pertinent variables
*
*/
function list( $year, $month, $last_update, $text ){
$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,
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'
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){
$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,
P.guid,
IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
MD.date,
MD.activity AS no_activity,
MD.country,
MD.state,
MD.city,
PMA.meta_value AS thumbnail,
P.post_name as slug
FROM wp_posts AS 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.ID = '$id'";
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){
global $wpdb;
$sql = "SELECT
MF.youtube,
MF.livestream,
MF.video,
MF.audio,
MF.audio_flac,
MF.pdf,
MF.pdf_simple
FROM wp_messagefiles as MF
WHERE MF.post_id = '$id'";
return $this->execute_sql( $sql );
}
function title_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
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 P.post_title LIKE('%$q%')
OR MD.city LIKE('%$q%')
OR MD.state 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,
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);
}
}