ElixirVault/www/system-brs-core/cms/cmsTextManager/inc/cmsTextManagerModule.php

543 lines
16 KiB
PHP

<?php
namespace BRSystems\Core\Cms\cmsTextManager\inc;
use BRSystems\Core\Library\cApc\cApc;
use BRSystems\Core\Library\cDb\cDb;
/**
* cmsTextManager Module
*
* @category cmsTextManager Module
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @since Version 2.0
*/
class cmsTextManagerModule
{
public $db;
/** @var cmsTextManagerCache */
private $cache;
const DEFAULT_LANGUAGE = 7;
/**
* Class constructor
*/
public function __construct()
{
$this->db = cDb::getInstance();
$this->cache = new cmsTextManagerCache(new cApc());
}
/**
* Function to get module records
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param string $where - sql query
* @param string $sort - sql query
* @param int $offset - db table offset
* @param int $limitPerPage - limit per page
* @param int $language - Data from witch language
* @return array of data
* @version 1.1
*/
public function getModuleRecords($where, $sort, $offset = 0, $limitPerPage = 20, $language){
$sSql = "
SELECT SQL_CALC_FOUND_ROWS
ma.*,
mar.a_title,
SUBSTRING(mar.a_lhtml, 1, 60) as a_lhtml,
SUBSTRING(mar.a_shtml, 1, 60) as a_shtml,
mc.cl_name
FROM
mod_articles ma
LEFT JOIN mod_articles_records mar ON
ma.id = mar.a_id
LEFT JOIN mod_classificators mc ON
ma.a_type = mc.id
WHERE
1 {$where}
AND a_lang_id = {$language}
ORDER BY
{$sort}
LIMIT
{$offset}, {$limitPerPage}
"."";
$this->db->query($sSql);
return $this->db->getArray();
}
/**
* Function to add or save record data
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param int $id - record id for update
* @param array $data - record data
* @return bool record new/old id
* @version 1.1
*/
public function saveRecordDataById($id, $data){
if($id){
if(!$this->db->_queryUpdate('mod_articles', $data, array('id' => $id)))
return false;
}else{
if(!($id = $this->db->_queryInsert('mod_articles', $data)))
return false;
}
return $id;
}
public function saveRecordTextDataById($id, $data){
$this->db->_queryDelete('mod_articles_records', array('a_id' => $id));
$this->db->_queryInsertArray('mod_articles_records', $data, false, true);
}
/**
* Function to add record image data by id
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param int $id - record id for update
* @param array $data - record data
* @param array $data2 - record data
* @param bool $bDeleteImages - to delete old images
* @version 1.1
*/
public function saveRecordedImg($id, $data, $data2, $bDeleteImages = false){
if($bDeleteImages){
$this->db->_queryDelete('mod_articles_files', array('ref_id' => -1));
$this->db->_queryDelete('mod_articles_files', array('ref_id' => $id));
}
if(!!$data)
$this->db->_queryInsertArray('mod_articles_files', $data);
if(!!$data2)
$this->db->_queryInsertArray('mod_articles_files', $data2);
}
/**
* Function to ...
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param string $fileLink - file link
* @return int new inserted id
* @version 1.1
*/
public function insertTemporallyFile($fileLink)
{
return $this->db->_queryInsert('mod_articles_files', [
'ref_id' => -1,
'file_link' => $fileLink,
'file_disabled' => '0',
'file_order' => 0,
'file_type' => cmsTextManagerConst::IMG_CNT_TYPE,
]);
}
/**
* Function to get record image data by id
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category cmsGalleryManager Module
* @param int $id - record id
* @return array - record data
* @version 1.1
*/
public function getImagesData($id){
$sSql = "
SELECT
*
FROM
mod_articles_files
WHERE
ref_id = {$id}
ORDER BY file_order ASC
";
$this->db->query($sSql);
return $this->db->getFieldBasedArrayFieldsAdv('file_type', array('id', 'file_link', 'file_disabled', 'file_order', 'file_name'), false);
}
/**
* Function to get record image data by id
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category cmsGalleryManager Module
* @return array - record data
* @version 1.1
*/
public function getAllImageData(){
$sSql = "
SELECT
*
FROM
mod_articles_files
WHERE
file_disabled = '0'
ORDER BY img_order ASC
";
$this->db->query($sSql);
return $this->db->getFieldBasedArrayFields('ref_id', 'file_order', 'file_link');
}
/**
* Function to get Types for articles
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category CMS cmsTextManager
* @param int/array $type - classificator type id
* @param bool/string $groupByType - whether to group by type or not
* @return array - if any data found
* @version 1.1
*/
public function getTypes($type, $groupByType = false){
if(is_array($type))
$type = implode(",", $type);
$groupByType ? $groupBy = array('n', 'id') : $groupBy = array('id');
$sSql = "
SELECT
mc2.id as n,
mc.id,
mc.cl_name as title
FROM
mod_classificators mc
LEFT JOIN mod_classificators mc2 ON
mc.cl_type = mc2.id
WHERE
mc.cl_type IN ({$type})
AND mc.cl_blocked = '0'
ORDER BY
mc.cl_order ASC
";
$this->db->query($sSql);
$data = $this->db->getFieldBasedArrayFieldsAdv($groupBy, array('title'));
if($data){
return $data;
}else{
return array();
}
}
/**
* Function to get categories
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category CMS cmsTextManager
* @param array $type - type ids
* @param bool $forProd - if we need all categories for products
* @return array - if any data found
* @version 1.1
*/
public function getCategories($type, $forProd = false){
$langId = cmsTextManagerConst::DEFAULT_LANGUAGE;
$cacheKeyType = is_array($type) ? $type : [$type];
$cached = $this->cache->get($cacheKeyType, $langId);
if ($cached !== false) {
return $cached;
}
$sSql = "
SELECT
ac.id,
ac.a_cat,
tt.a_title as title
FROM
mod_articles ac
LEFT JOIN mod_articles_records tt ON
tt.a_id = ac.id
WHERE
ac.a_type IN (". implode(",", $type) .")
AND tt.a_lang_id = " . cmsTextManagerConst::DEFAULT_LANGUAGE . "
";
$this->db->query($sSql);
$data = $this->db->getFieldBasedArrayFieldsAdv('id', array('title', 'a_cat'));
$data = ($data ? $data : array());
$this->cache->set($cacheKeyType, $langId, $data);
return $data;
}
/**
* Function to get record data by id
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param int $id - record id
* @return array - record data
* @version 1.1
*/
public function getRecordBaseDataById($id){
$sSql = "
SELECT
id,
a_disabled,
a_npk,
a_created,
a_modified,
a_type,
a_cl_id,
a_cat,
a_title,
a_link,
a_date
FROM
mod_articles
WHERE
id = {$id}
";
$this->db->query($sSql);
return $this->db->getRow();
}
/**
* Function to get record data by id
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param int|array $id - record id
* @param mixed $fields - fields to select
* @return array - record data
* @version 1.1
*/
public function getRecordTranslateDataById($id, $fields = false){
if(!$fields)
$fields = array('t','l','v','srec','rec');
$sSql = "
SELECT
rr.a_id as id,
rr.a_title as t,
rr.a_link as l,
rr.a_v as v,
rr.a_shtml as srec,
rr.a_lhtml as rec,
rr.a_lang_id as lang
FROM
mod_articles_records rr
WHERE
a_id IN (" . (is_array($id) ? implode(",", $id) : $id) . ")
";
$this->db->query($sSql);
if(is_array($id))
return $this->db->getFieldBasedArrayFieldsAdv(array('id', 'lang'), $fields);
else
return $this->db->getFieldBasedArrayFieldsAdv('lang', $fields);
}
/**
* Function to get record data by id
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param int $id - record id
* @return array - record data
* @version 1.1
*/
public function getArticleTypeById($id){
$sSql = "
SELECT
ma.a_type,
mar.a_title
FROM
mod_articles ma
LEFT JOIN mod_articles_records mar ON
ma.id = mar.a_id
WHERE
ma.id = {$id}
";
$this->db->query($sSql);
return $this->db->getRow();
}
/**
* Function to get record type by ids
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param int/array $ids - record ids
* @return array - record data
* @version 1.1
*/
public function getTypeByIds($ids){
$sSql = "
SELECT
a_type
FROM
mod_articles
WHERE
id IN (". implode(",", $ids) .")
";
$this->db->query($sSql);
return $this->db->getKeyValBasedArray('a_type', 'a_type');
}
/**
* Function to check if url is unique
*
* @param string $link - where string
* @param int $recordId - record id
* @param int $langId - language id
* @return array - record data
* @version 1.1
*/
public function chkUrlSegment($link, $recordId, $langId)
{
$where = "";
if (!!$recordId) {
$where = " AND a_id <> {$recordId}";
}
$sSql = "
SELECT
a_id
FROM
mod_articles_records
WHERE
a_link = '{$link}'
AND a_lang_id = {$langId}
{$where}
";
$this->db->query($sSql);
return $this->db->getOne();
}
/**
* Function to delete table record form db
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param array $sIds - record id to delete
* @return bool true / false
* @version 1.1
*/
public function deleteRecords($sIds){
$sIds = implode(',', $sIds);
// Delete url category links if exists
$this->db->execute("DELETE FROM `site_map_urls` WHERE url_item_id IN ({$sIds})");
// Get all linked files for removal & delete from DB
$this->db->query("
SELECT f.file_link, COUNT(f.file_link) as c
FROM mod_articles_files f
WHERE f.file_link IN (
SELECT ff.file_link
FROM mod_articles_files ff
WHERE ff.ref_id IN ({$sIds})
)
GROUP BY f.file_link
HAVING c = 1
"."");
$imagesToDelete = $this->db->getFieldBasedArrayFieldsAdv(false, 'file_link', false);
$this->db->execute("DELETE FROM `mod_articles_files` WHERE `ref_id` IN ({$sIds})");
// Delete prod links & prod to cat links
$this->db->execute("DELETE FROM `mod_articles_records` WHERE `a_id` IN ({$sIds})");
$this->db->execute("DELETE FROM `mod_articles` WHERE `id` IN ({$sIds})");
return (!!$imagesToDelete ? $imagesToDelete : true);
}
/**
* Function to change record status in db table
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param array $ids - record ids to affect
* @param string $field - field to update for status ENUM
* @return bool true / false
* @version 1.1
*/
public function changeRecordsStatus($ids, $field){
$time = time();
$ids = implode(',', $ids);
$status = $this->db->query("UPDATE mod_articles ma SET {$field} = '1', a_modified = '{$time}' WHERE {$field} = '0' AND id IN ({$ids})");
if(!$status)
return $status;
$status = $this->db->query("UPDATE mod_articles ma SET {$field} = '0', a_modified = '{$time}' WHERE {$field} = '1' AND id IN ({$ids}) AND a_modified <> '{$time}'");
return $status;
}
/**
* Function to get url alias ref id by id
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param int $id - cat/sub cat id
* @return int - url alias ref id
* @version 1.1
*/
public function getAliasRefIdById($id)
{
return $this->db->_querySelectOne('site_map_urls', ['url_lang_ref_id'], ['url_item_id' => $id]);
}
public function getDataById(int $id, array $fields = [], int $langId = self::DEFAULT_LANGUAGE)
{
if (empty($fields)) {
$fields = ['a_title'];
}
return $this->db->_querySelectOne('mod_articles_records', $fields, ['a_id' => $id, 'a_lang_id' => $langId]);
}
/**
* Function to ...
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category cmsTextManager Module
* @param array $linkIds - category link ids
* @return int new inserted id
* @version 1.1
*/
public function getModOverWriteUrlData($linkIds = array()){
$linkIds = $this->db->prepData($linkIds);
$sSql = "
SELECT
sm.url_lang_ref_id as id,
sm.url_fname as url,
sm.url_lang_id as lang_id,
sm.url_alias_id as map_id
FROM
site_map_urls sm
WHERE
sm.url_item_id IN (". implode(",", $linkIds) .")
"."";
$this->db->query($sSql);
return $this->db->getFieldBasedArrayFieldsAdv(array('id', 'lang_id'), array('url', 'map_id'));
}
}