Files
zurawik.pl/core/model/MfLinkDAL.class.php
2026-05-15 18:33:51 +02:00

772 lines
20 KiB
PHP
Raw Permalink 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
/**
* Klasa obsĹugi tablicy linkow
*
*/
class MfLinkDAL extends DefaultDAL {
protected static $objClassName;
protected static $objClassTable;
protected static $objClassTablePK;
private static $optClass;
public static function Save( $obj) {
if($obj->GetId()==-1) {
return self::Insert($obj);
} else {
return self::Update($obj);
}
}
/**
* @param Feed $obj
*
*/
public static function Insert($obj) {
$dalData = new DalData();
$dalData->setObjClassTable(self::GetObjClassTable());
$dalData->setObj($obj);
$id = self::DefaultInsert($dalData);
return $id;
}
/**
* @param Text $obj
*
*/
public static function Update($obj) {
$dalData = new DalData();
$dalData->setObjClassTable(self::GetObjClassTable());
$dalData->setObjClassTablePK(self::GetObjClassTablePK());
$dalData->setObj($obj);
return self::DefaultUpdate($dalData);
}
/**
*
* @param integer $id
*
*/
public static function Delete($obj) {
$dalData = new DalData();
$dalData->setObjClassTable(self::GetObjClassTable());
$dalData->setObjClassTablePK(self::GetObjClassTablePK());
$dalData->setObj($obj);
return self::DefaultDelete($dalData);
}
public static function UpdateSourceId($idNew,$id,$type) {
$db = Registry::Get('db');
$sql = "UPDATE mf_link SET id_source=$idNew WHERE id_source=$id AND source_type='$type'";
$stmt=$db->prepare($sql);
$stmt->execute();
}
public static function GetById($id) {
return self::DefaultGetById(self::GetOptClass(), self::GetObjClassTable(), self::GetObjClassName(), self::GetObjClassTablePK(), $id);
}
public static function GetArrayObjAll() {
}
public static function GetResult($data,$queryFields = array(),$limit = 0, $sortBy = null,$count = null,$groupBy = null) {
if(!is_array($data)){
$data = array();
}
$db = Registry::Get('db');
$queryCacheName = __CLASS__. "_" .__FUNCTION__. "_" .md5(implode($queryFields));
if($count == true)
$queryCacheName.="_count";
if(isset(QueryCacheTemp::$cacheQuery[$queryCacheName]))
{
$sql = QueryCacheTemp::$cacheQuery[$queryCacheName];
}
else
{
if($count == true)
$select = "count(*) as count";
else
$select =" " . SQL::ToSelect(self::GetOptClass(),$queryFields) . " ";
$sql = " SELECT $select FROM " . self::GetObjClassTable() . " WHERE 1=1 ";
$q = new QueryCache($queryCacheName,$sql);
}
foreach ($data as $key => $value)
{
if($key == "id")
$key = $objId ;
if(is_array($value))
$sql .= ( is_numeric($value['value']) || $value ? " AND ".$key." ".$value['condition']." ". $value['value'] : "");
else
$sql .= ( is_numeric($value) || $value ? " AND ".$key." = ". $value : "");
}
$sql .= ( $sortBy ? " ORDER BY $sortBy " : "").
//( $groupBy ? " GROUP BY $groupBy " : "").
( $limit ? " LIMIT " . $limit : "").
" ";
$stmt = $db->prepare($sql)
->execute();
$array = $stmt->fetchAllAssoc();
if($count == true)
return $array[0]['count'];
$done = array();
for($i=0;$i<count($array);$i++)
{
$className=self::GetObjClassName();
$obj = new $className();
$obj->FromArray($array[$i],1);
$done[] = $obj;
}
return $done;
}
/**
* Pobiera z tabeli liste slowek i cacheuje
*
* @param integer $cacheTime
* @return Array
*/
public static function GetAllVariables($lang, $cacheTime) {
$db = Registry::Get('db');
$sql = "SELECT keyword, replacement FROM ".self::$objClassTable." WHERE lang='".$lang."'";
$stmt=$db->execute($sql);
$stmt->CacheStart($cacheTime);
$array = $stmt->FetchAllAssoc();
$returnArray = array();
foreach ($array as $keyword => $value) {
$returnArray[$keyword] = $value;
}
return $returnArray;
}
public static function DeleteFromLink($idSource = null, $sourceType = null, $idDestination = null, $destinationType = null) {
$db = Registry::Get('db');
$sql = "DELETE FROM `mf_link` WHERE 1=1 ";
if($idSource!= null )
$sql.= " AND id_source = :01 ";
if($sourceType!= null)
$sql.= " AND source_type = :02 ";
if($idDestination!= null)
$sql.= " AND id_destination = :03 ";
if($destinationType!= null)
$sql.= " AND destination_type = :04 ";
$stmt=$db->prepare($sql);
if($idSource!= null )
$stmt->bindParam('01', $idSource);
if($sourceType!= null)
$stmt->bindParam('02', $sourceType);
if($idDestination!= null)
$stmt->bindParam('03', $idDestination);
if($destinationType!= null)
$stmt->bindParam('04', $destinationType);
$stmt->execute();
//Utils::ArrayDisplay($stmt);
}
public static function SortLink($idSource,$sortedLinks,$sourceType,$destinationType)
{
$db = Registry::Get('db');
foreach ($sortedLinks as $weight => $idDestination)
{
$sql = "UPDATE mf_link SET weight = $weight WHERE id_source=:01 AND id_destination =:02 AND source_type=:03 AND destination_type=:04";
$stmt=$db->prepare($sql)
->bindParam("01", $idSource)
->bindParam("02", $idDestination)
->bindParam("03", $sourceType)
->bindParam("04", $destinationType)
->execute();
}
}
public static function SortLink2($sortedLinks)
{
$db = Registry::Get('db');
foreach ($sortedLinks as $weight => $idDestination)
{
$sql = "UPDATE mf_link SET weight = $weight WHERE id_mf_link=:01";
$stmt=$db->prepare($sql)
->bindParam("01", $idDestination)
->execute();
}
}
public function GetMaxWeight($idSource,$sourceType)
{
$db = Registry::Get('db');
$sql = "SELECT MAX(weight) as max FROM mf_link WHERE id_source=:01 AND source_type=:02";
$stmt = $db->prepare($sql)
->bindParam("01",$idSource)
->bindParam("02",$sourceType)
->execute();
$array = $stmt->fetchAllAssoc();
return $array[0]['max'];
}
public static function UpdateType(MfLink $obj)
{
$db = Registry::Get('db');
$sql = "UPDATE mf_link SET link_type='" . $obj->GetLinkType() . "' WHERE source_type='" . $obj->GetSourceType(). "' AND id_source='" . $obj->GetIdSource() . "' AND id_destination='" . $obj->GetIdDestination() . "' AND destination_type='" . $obj->GetdestinationType() . "'";
$stmt = $db->prepare($sql)
->execute();
}
public function GetCount($idSource,$sourceType,$destinationType)
{
$db = Registry::Get('db');
$sql = "SELECT count(weight) as max FROM mf_link WHERE id_source=:01 AND source_type=:02 AND destination_type=:03";
$stmt = $db->prepare($sql)
->bindParam("01",$idSource)
->bindParam("02",$sourceType)
->bindParam("03",$destinationType)
->execute();
$array = $stmt->fetchAllAssoc();
return $array[0]['max'];
}
public static function GetCountDestination($sourceType,$destinationType)
{
$db = Registry::Get('db');
$sql="SELECT count( id_destination ) as countDestination, id_source as id_source
FROM `mf_link`
WHERE `source_type` = :01
AND `destination_type` = :02
GROUP BY id_source
";
$stmt = $db->prepare($sql)
->bindParam("01",$sourceType)
->bindParam("02",$destinationType)
->execute();
$array = $stmt->fetchAllAssoc();
$returnArray = array();
foreach($array as $key => $value)
{
$returnArray[$value['id_source']] = $value['countDestination'];
}
return $returnArray;
}
public function ReCountWeight($idSource,$sourceType,$destinationType)
{
$db = Registry::Get('db');
$mfLinkArray = self::GetResult(array("id_source" => $idSource, "source_type" => "'" . $sourceType . "'", "destination_type" => "'" . $destinationType. "'"),array(),null,"weight");
$weight = 0;
foreach ($mfLinkArray as $key => $value)
{
$value->SetWeight($weight);
MfLinkDAL::Update($value);
$weight++;
}
}
public static function GetQuerySourceIds($sourceType,$destinationType,$idDestination = array(),$limit = null,$cacheTime = 360)
{
$db = Registry::Get('db');
$arrayReturn = array();
$idDestnationSql = "";
if(count($idDestination) > 1)
{
foreach($idDestination as $key => $value)
{
$idDestnationSql.=$value . ",";
}
$idDestnationSql = substr($idDestnationSql, 0,strlen($idDestnationSql)-1);
$idDestnationSql = " IN (" . $idDestnationSql . ")";
}
else if(isset($idDestination[0]) && is_numeric($idDestination[0]))
{
$idDestnationSql="=" . $idDestination[0];
}
$sql = "";
if($idDestnationSql != "")
{
$sql = "SELECT id_source from mf_link WHERE source_type='$sourceType'
AND destination_type='$destinationType' AND id_destination$idDestnationSql ORDER BY id_source DESC";
if($limit != null)
$sql .=" LIMIT $limit";
$stmt = $db->prepare($sql);
$stmt->CacheStart($cacheTime);
$stmt->execute();
$array = $stmt->FetchAllAssoc();
if(count($array) == 1)
return array($array[0]['id_source']);
else if( count($array) > 1)
{
foreach ($array as $key => $value)
{
$arrayReturn[]=$value['id_source'];
}
}
}
return $arrayReturn;
}
public function GetArrayId($source , $destination, $idDestination) {
$db = Registry::Get('db');
$sql = "SELECT id_source FROM `mf_link` WHERE `source_type` = '$source' AND `destination_type` = '$destination' AND `id_destination` = $idDestination";
//Utils::ArrayDisplay($sql);
$stmt=$db->prepare($sql)
->execute();
//$stmt->CacheStart($cacheTime);
$returnArray = array();
while(($row = $stmt->FetchArray())) {
$returnArray[] = $row['id_source'];
}
return $returnArray;
}
public static function GetIdString($source , $destination, $idDestination, $idDestinationNotIN = null) {
$db = Registry::Get('db');
$sql = "SELECT id_source FROM `mf_link` WHERE `source_type` = '$source' AND `destination_type` = '$destination' ".
($idDestination ? " AND `id_destination` = $idDestination " : "").
($idDestinationNotIN ? " AND `id_destination` NOT IN ($idDestinationNotIN) " : "").
" GROUP BY id_source ";
$stmt=$db->prepare($sql)->execute();
//Utils::ArrayDisplay($sql);
if ($stmt->NumRows() > 0) {
}
//$stmt->CacheStart($cacheTime);
$ids = '( ';
$returnArray = array();
while(($row = $stmt->FetchArray())) {
$returnArray[] = $row['id_source'];
}
if (count($returnArray) > 0) {
$ids .= implode(',', $returnArray);
} else {
$ids .= '-1';
}
$ids .= ' )';
return $ids;
}
public function GetIdStringClear($source , $destination, $idDestination) {
$db = Registry::Get('db');
$sql = "SELECT id_source FROM `mf_link` WHERE `source_type` = '$source' AND `destination_type` = '$destination' AND `id_destination` IN ( $idDestination ) GROUP BY id_source";
$stmt=$db->prepare($sql)->execute();
//Utils::ArrayDisplay($sql);
if ($stmt->NumRows() > 0) {
}
//$stmt->CacheStart($cacheTime);
$ids = '';
$returnArray = array();
while(($row = $stmt->FetchArray())) {
$returnArray[] = $row['id_source'];
}
if (count($returnArray) > 0) {
$ids .= implode(',', $returnArray);
} else {
$ids .= '-1';
}
//$ids .= ' )';
return $ids;
}
public function GetIdStringForDestinationArray($source , $destination, $destinationIds, $excludedSourceIds = "(-1)") {
$db = Registry::Get('db');
$sql = "SELECT id_source FROM `mf_link` WHERE `source_type` = '$source' AND `destination_type` = '$destination' AND `id_destination` IN $destinationIds AND id_source NOT IN $excludedSourceIds GROUP BY id_source";
$stmt=$db->prepare($sql)->execute();
//Utils::ArrayDisplay($sql);
if ($stmt->NumRows() > 0) {
}
//$stmt->CacheStart($cacheTime);
$ids = '( ';
$returnArray = array();
while(($row = $stmt->FetchArray())) {
$returnArray[] = $row['id_source'];
}
if (count($returnArray) > 0) {
$ids .= implode(',', $returnArray);
} else {
$ids .= '-1';
}
$ids .= ' )';
return $ids;
}
public function GetArrayIdDestinaion($source , $destination, $idSource) {
$db = Registry::Get('db');
$sql = "SELECT `id_destination` FROM `mf_link` WHERE `source_type` = '$source' AND `destination_type` = '$destination' AND `id_source` = $idSource";
//Utils::ArrayDisplay($sql);
$stmt=$db->prepare($sql)
->execute();
//$stmt->CacheStart($cacheTime);
$returnArray = array();
while(($row = $stmt->FetchArray())) {
$returnArray[$row['id_destination']] = $row['id_destination'];
}
return $returnArray;
}
public function GetIdStringDestinaion($source , $destination, $idSource) {
$ids = '(-1)';
$db = Registry::Get('db');
$sql = "SELECT id_destination FROM `mf_link` WHERE `source_type` = :01 AND `destination_type` = :02 AND `id_source` = :03";
$stmt=$db->prepare($sql)
->bindParam ('01', $source)
->bindParam ('02', $destination)
->bindParam ('03', $idSource)
->execute();
if ($stmt->NumRows() > 0) {
//$stmt->CacheStart($cacheTime);
$ids = '(';
$returnArray = array();
while(($row = $stmt->FetchArray())) {
$returnArray[] = $row['id_destination'];
}
if (count($returnArray) > 0) {
$ids .= implode(' ,', $returnArray);
} else {
$ids .= '-1';
}
$ids .= ' )';
return $ids;
}
return $ids;
}
public static function DeleteAllLink($idSource, $sourceType, $destinationType) {
$db = Registry::Get('db');
$sql = "DELETE FROM `mf_link` WHERE id_source = :01 AND source_type = :02 AND destination_type = :04 ";
$stmt=$db->prepare($sql)
->bindParam ('01', $idSource)
->bindParam ('02', $sourceType)
->bindParam ('04', $destinationType)
->execute();
}
public static function GetArrayList($table, $column, $destination, $lang, $source, $idSource, $where = '', $tableJoin = '', $limit = 0) {
$array = array();
$db = Registry::Get('db');
$sql = " CHECK TABLE $table FAST QUICK";
$stmt = $db->prepare($sql)->execute();
$row = $stmt->FetchArray();
if (isset($row['Msg_type']) && strtolower($row['Msg_type']) != 'error') {
if (isset($row[0]['Msg_type']) && $row[0]['Msg_type'] != 'error') {
$sql = 'SELECT '.$table.'.id_'.$destination.', '.$column.
' FROM '.$table. ( $tableJoin ? " ,$tableJoin " : " ").
' WHERE 1=1 '.
$where . " " .
( $limit ? " LIMIT " . $limit : "");
//echo $sql;
$stmt = $db->prepare($sql)->execute();
//Utils::ArrayDisplay($sql);
$ids = '';
while(($row = $stmt->FetchArray())) {
$array[$row['id_'.$destination.'']] = array( 'name' => $row[$column], 'checked' => '', 'description' => '', 'icon' => null);
$icon = null;
foreach(SimpleArticle_MfArticleCategory::$exts as $ext) {
$path = PATH_STATIC_CONTENT."image".DS."Admin".DS."Categories".DS."Icons".DS.$row['id_'.$destination.''].".".$ext;
$url = URL_STATIC_CONTENT."/image/Admin/Categories/Icons/".$row['id_'.$destination.''].".".$ext;
if(file_exists($path)) {
$icon = $url;
}
$array[$row['id_'.$destination.'']]['icon'] = $icon;
}
$ids .= $row['id_'.$destination.''].",";
}
$ids = substr($ids, 0, -1);
$ids = !$ids ? "-1" : $ids;
// stary sql
$sql = "SELECT a.id_destination FROM mf_link a WHERE source_type = '$source' AND destination_type = '$destination' ".
" AND id_destination IN ($ids) AND id_source = '$idSource' ";
//$sql = "SELECT id_desti//$sql =nation FROM mf_link a WHERE source_type = '$source' AND destination_type = '$destination' AND id_source = '$idSource'";
$stmt2 = $db->execute($sql);
while(($row = $stmt2->FetchArray())) {
$array[$row['id_destination']]['checked'] = 'checked';
}
}
}
//echo $where;
return $array;
}
public static function GetLinkedArticles($id, $data = array(), $queryFields = array(),$limit = 0, $sortBy = null,$count = null) {
$data['mf_article.publication'] = array('value' => -1, 'condition' => '>');
$data['mf_link.id_source'] = $id;
$data['mf_link.destination_type'] = '\'mf_article\'';
$data['mf_link.source_type'] = '\'mf_article\'';
if(!is_array($data)) {
$data = array();
}
$db = Registry::Get('db');
$queryCacheName = __CLASS__. "_" .__FUNCTION__. "_" .md5(implode($queryFields));
if($count == true)
$queryCacheName .="_count";
if(isset(QueryCacheTemp::$cacheQuery[$queryCacheName])) {
$sql = QueryCacheTemp::$cacheQuery[$queryCacheName];
}
else {
if($count == true)
$select = "count(*) as count";
else
$select =" " . SQL::ToSelect(self::GetOptClass(),$queryFields) . ", " . SQL::ToSelect('MfArticle') . ", " . SQL::ToSelect('MfArticleDescription') . " ";
$sql = " SELECT $select FROM " . self::GetObjClassTable() . " LEFT JOIN mf_article ON mf_article.id_mf_article=mf_link.id_destination LEFT JOIN mf_article_description ON mf_article.id_mf_article=mf_article_description.id_mf_article WHERE 1=1 ";
$q = new QueryCache($queryCacheName,$sql);
}
foreach ($data as $key => $value) {
if($key == "id")
$key = $objId ;
if(is_array($value))
$sql .= ( is_numeric($value['value']) || $value ? " AND ".$key." ".$value['condition']." ". $value['value'] : "");
else
$sql .= ( is_numeric($value) || $value ? " AND ".$key." = ". $value : "");
}
$sql .= ( $sortBy ? " ORDER BY $sortBy " : "").
( $limit ? " LIMIT " . $limit : "").
" ";
$stmt = $db->prepare($sql)
->execute();
//Utils::ArrayDisplay($sql);
$array = $stmt->fetchAllAssoc();
//Utils::ArrayDisplay($sql);
if($count == true)
return $array[0]['count'];
$done = array();
for($i=0;$i<count($array);$i++) {
$className = 'MfArticle';
$obj = new $className();
$obj->FromArray($array[$i], 1);
$objDesc = new MfArticleDescription();
$objDesc->FromArray($array[$i], 1);
$obj->SetArticleDescriptionObj($objDesc);
$done[] = $obj;
}
return $done;
}
public function IsLinked($idSource = null, $sourceType = null, $idDestination = null, $destinationType = null, $published = '-1', $idSourceSql = '=') {
$db = Registry::Get('db');
$sql = "SELECT count(id_mf_link) as count FROM `mf_link` WHERE 1=1 AND published NOT IN (".$published.") ";
if($idSource!= null )
$sql.= " AND id_source ".$idSourceSql." $idSource ";
if($sourceType!= null)
$sql.= " AND source_type = :02 ";
if($idDestination!= null)
$sql.= " AND id_destination ".$idSourceSql." $idDestination ";
if($destinationType!= null)
$sql.= " AND destination_type = :04 ";
$stmt=$db->prepare($sql);
if($idSource!= null )
$stmt->bindParam('01', $idSource);
if($sourceType!= null)
$stmt->bindParam('02', $sourceType);
if($idDestination!= null)
$stmt->bindParam('03', $idDestination);
if($destinationType!= null)
$stmt->bindParam('04', $destinationType);
$stmt->execute();
$array = $stmt->fetchAllAssoc();
return $array[0]['count'];
}
public static function GetObjClassName() {
if(self::$objClassName != '') {
$class = self::$objClassName;
} else {
$class = str_replace('DAL', '', __CLASS__);
}
return $class;
}
public static function GetOptClass() {
if(self::$optClass!=null) {
return self::$optClass;
} else {
return self::GetObjClassName();
}
}
public static function GetObjClassTablePK() {
if(self::$objClassTablePK != '') {
$return = self::$objClassTablePK;
} else {
$class = self::GetObjClassName();
$classObj = new $class();
$return = $classObj->GetClassTablePK();
}
return $return;
}
public static function GetObjClassTable() {
if(self::$objClassTable!='') {
$return = self::$objClassTable;
} else {
$class = self::GetObjClassName();
$classObj = new $class();
$return = $classObj->GetTableName();
}
return $return;
}
public static function GetDalDataObj() {
$dalData = new DalData();
$dalData->setObjClassName(self::GetObjClassName());
$dalData->setObjClassTable(self::GetObjClassTable());
$dalData->setObjClassTablePK(self::GetObjClassTablePK());
$dalData->setOptClass(self::GetOptClass());
//$dalData->setDatabaseType('dbTemp');
return $dalData;
}
public static function UpdateDestinationId($idNew,$id,$source, $destination) {
$db = Registry::Get('db');
$sql = "UPDATE mf_link SET id_destination=$idNew WHERE id_destination=$id AND source_type='$source' AND destination_type = '$destination'";
$stmt=$db->prepare($sql);
$stmt->execute();
//Utils::ArrayDisplay($sql);
}
public static function UpdatePublished($published = 1, $idSource = null, $sourceType = null, $destinationType = null, $idDestination = null, $idSourceSql = '=') {
$db = Registry::Get('db');
$sql = "UPDATE `mf_link` ";
$sql.= " SET published = :05 ";
$sql.= "WHERE 1=1 ";
if($idSource!= null )
$sql.= " AND id_source ".$idSourceSql." ".$idSource." ";
if($sourceType!= null)
$sql.= " AND source_type = :02 ";
if($idDestination!= null)
$sql.= " AND id_destination = :03 ";
if($destinationType!= null)
$sql.= " AND destination_type = :04 ";
$stmt=$db->prepare($sql);
//if($idSource!= null )
//$stmt->bindParam('01', $idSource);
if($sourceType!= null)
$stmt->bindParam('02', $sourceType);
if($idDestination!= null)
$stmt->bindParam('03', $idDestination);
if($destinationType!= null)
$stmt->bindParam('04', $destinationType);
$stmt->bindParam('05', $published);
$stmt->execute();
//Utils::ArrayDisplay($stmt);
}
}
?>