BeginTransaction(); // znajdujemy wszytkie duplikaty od otrzymanego id //pobieramy nazwe $sql = "SELECT name FROM $objClassTable WHERE $objClassTablePK = $changeDictionaryTo"; $stmt = $db->prepare($sql) ->execute(); $array = $stmt->fetchAllAssoc(); $name = $array[0]['name']; //znajdujemy wszytkie duplikaty tego sameogo pola $sql = "SELECT $objClassTablePK FROM $objClassTable WHERE name = '$name' AND $objClassTablePK != $changeDictionaryTo"; $stmt = $db->prepare($sql) ->execute(); $array = $stmt->fetchAllAssoc(); // dodajemy wszytkie id tych samych rekordkow do tablicy $idDuplicateArray = array(); for($i=0;$iCommitTransaction(); } public static function DefaultMoveDictionary($objClassTable, $objClassTablePK,$optClassTableChangeArray, $changeDictionary = array(), $changeDictionaryTo = null) { $db = Registry::Get('db'); $db->BeginTransaction(); if(count($changeDictionary) > 0) foreach($optClassTableChangeArray as $key => $value) { // pierwsze zmienic wszytkie istnijace z changedictionary na docelowe if($value == "nm_physician") { $sql = "UPDATE $value SET $objClassTablePK=$changeDictionaryTo,reload=1 WHERE $objClassTablePK "; } else { $sql = "UPDATE $value SET $objClassTablePK=$changeDictionaryTo WHERE $objClassTablePK "; } $in = ""; if(count($changeDictionary) == 1) { $sql .= " = " . $changeDictionary[0]; } else if(count($changeDictionary) > 1) { $sql .= " IN ("; foreach($changeDictionary as $key => $value) { $in.=$value . ", "; } $in = substr($in, 0, strlen($in)-2); $sql.=$in; $sql.=")"; } $stmt = $db->prepare($sql) ->execute(); } //usuniecie wszytkich z changedictionary if(count($changeDictionary) > 0) foreach($changeDictionary as $key => $value) { $dalData = new DalData(); $dalData->setObjClassTable($objClassTable); $dalData->setObjClassTablePK($objClassTablePK); $dalData->setObj($value); self::DefaultDelete($dalData); } $db->CommitTransaction(); } /** * * Znajduje duplikaty (takie same pola w tabeli slowników) * * @param $optClass * @param $objClassTable * @param $objClassName */ public static function DefaultFindDuplicate($optClass, $objClassTable, $objClassName,$duplicateField) { $db = Registry::Get('db'); $queryCacheName = $objClassName. "_" .__FUNCTION__. "_" .md5($objClassTable); if(QUERYCACHE_ENABLE==true && isset(QueryCacheTemp::$cacheQuery[$queryCacheName])) { $sql = QueryCacheTemp::$cacheQuery[$queryCacheName]; } else { $select =" " . SQL::ToSelect($optClass) . " , count($duplicateField) as countField "; $sql = " SELECT $select FROM " . $objClassTable . " WHERE 1=1"; $q = new QueryCache($queryCacheName,$sql); } $sql.=" GROUP BY $duplicateField HAVING countField>1"; /* $sql .= ( $sortBy ? " ORDER BY $sortBy " : ""). ( $limit ? " LIMIT " . $limit : ""). " "; */ $stmt = $db->prepare($sql) ->execute(); $array = $stmt->fetchAllAssoc(); $done = array(); for($i=0;$iFromArray($array[$i],1); $obj->setCountField($array[$i]['countField']); $done[] = $obj; } return $done; } /** * Wykonanie zapytania * * @param klasa opcjonalna $optClass * @param tablica $objClassTable * @param nazwa klasy $objClassName * @param tablica pol do where $data * @param tablica pol do zapytania $queryFields * @param limit do zapytania $limit * @param sortowanie do zapytania $sortBy * @param opcjonalna liczba rekordow w odpowiedzi(true/false) $count * @return array */ public static function DefaultGetResult(DalData $dalObj, $showSql = null) { //Utils::ArrayDisplay($dalObj); if(!self::CacheControll($dalObj)) { $joinString = null; $selectString = null; if(is_array($dalObj->getJoin())) { foreach($dalObj->getJoin() as $key => $value) { if(trim(SQL::ToSelect($key,$dalObj->getQueryFields())) != "") $selectString .="," . SQL::ToSelect($key,$dalObj->getQueryFields()); $joinString .= $value; } } $db = Registry::Get($dalObj->getDatabaseType()); $queryCacheName = $dalObj->getObjClassName(). "_" . $dalObj->getObjClassTable() . "_" .__FUNCTION__. "_" .md5(implode($dalObj->getQueryFields())); if($dalObj->getCount() == true) $queryCacheName .="_count"; if(Config::Get('QUERYCACHE_ENABLE')==true && isset(QueryCacheTemp::$cacheQuery[$queryCacheName])) { $sql = QueryCacheTemp::$cacheQuery[$queryCacheName]; } else { if($dalObj->getCount() == true) $select = "count(*) as count"; else $select =" " . SQL::ToSelect($dalObj->getOptClass(),$dalObj->getQueryFields()) . " " . $selectString . " " . $dalObj->getSelectFieldsQuery(); $sql = " SELECT $select FROM " . $dalObj->getObjClassTable() . " " . $joinString . " WHERE 1=1 "; $q = new QueryCache($queryCacheName,$sql); } foreach ($dalObj->getCondition() as $key => $value) { if($key == "id") $key = "id_" . $dalObj->getObjClassTable(); 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 .= ( trim($dalObj->getGroupBy() ?? '') ? " GROUP BY " . $dalObj->getGroupBy() : ""). ( trim($dalObj->getSortBy() ?? '') ? " ORDER BY " . $dalObj->getSortBy() : ""). ( $dalObj->getLimit() ? " LIMIT " . $dalObj->getLimit() : ""). " "; try { $stmt = $db->prepare($sql); if($dalObj->getCacheTime()>0) { $stmt->CacheStart($dalObj->getCacheTime()); } } catch(MysqlException $e) { if ($showSql) { Utils::ArrayDisplay($sql); } } if ($showSql) { Utils::ArrayDisplay($sql); } //Utils::ArrayDisplay($stmt); $stmt->execute(); //Utils::ArrayDisplay($stmt); $array = $stmt->fetchAllAssoc(); if($dalObj->getCount() == true) return $array[0]['count']; $done = array(); for($i=0;$igetObjClassName(); $obj = new $className(); $obj->FromArray($array[$i],1); foreach($dalObj->getSelectFields() as $key => $value) { $func = "set" . $key; $obj->$func($array[$i][$key]); } if(is_array($dalObj->getJoin())) foreach ($dalObj->getJoin() as $key => $value) { $objArray = new $key(); $objArray->FromArray($array[$i],1); $strFunciton="set" . $key; $obj->$strFunciton($objArray); } $done[] = $obj; } if($dalObj->getCacheObject()) { self::CacheWriter($done); } return $done; } else { return self::CacheReader(); } } public static function DefaultGetResultByLink(DalData $dalObj) { if(!self::CacheControll($dalObj)) { $joinString = null; $selectString = null; if(is_array($dalObj->getJoin())) { foreach($dalObj->getJoin() as $key => $value) { if(trim(SQL::ToSelect($key,$dalObj->getQueryFields())) != "") $selectString .="," . SQL::ToSelect($key,$dalObj->getQueryFields()); $joinString .= $value; } } $db = Registry::Get($dalObj->getDatabaseType()); $queryCacheName = $dalObj->getObjClassName(). "_" . $dalObj->getObjClassTable() . "_" .__FUNCTION__. "_" .md5(implode($dalObj->getQueryFields())); if($dalObj->getCount() == true) $queryCacheName .="_count"; if(Config::Get('QUERYCACHE_ENABLE')==true && isset(QueryCacheTemp::$cacheQuery[$queryCacheName])) { $sql = QueryCacheTemp::$cacheQuery[$queryCacheName]; } else { if($dalObj->getCount() == true) $select = "count(*) as count"; else $select =" " . SQL::ToSelect($dalObj->getOptClass(),$dalObj->getQueryFields()) . " " . $selectString . " " . $dalObj->getSelectFieldsQuery(); if(is_array($dalObj->getDataArray('mf_link_id'))) $select .= ", " . 'mf_link.id_source as id_source'; } //in do pobierania kliku if(!is_array($dalObj->getDataArray('mf_link_id'))) { if ($dalObj->getDataArray('mf_link_destination') != false) $sql = " SELECT $select FROM " . $dalObj->getObjClassTable() ." INNER JOIN mf_link ON " . $dalObj->getObjClassTable() . "." . $dalObj->getObjClassTablePK() . "=mf_link.id_destination AND mf_link.destination_type='" . $dalObj->getObjClassTable() . "' AND mf_link.source_type='" . $dalObj->getDataArray('mf_link_table') . "' AND mf_link.id_source=" . $dalObj->getDataArray('mf_link_id'); else $sql = " SELECT $select FROM " . $dalObj->getObjClassTable() ." INNER JOIN mf_link ON " . $dalObj->getObjClassTable() . "." . $dalObj->getObjClassTablePK() . "=mf_link.id_source AND mf_link.source_type='" . $dalObj->getObjClassTable() . "' AND mf_link.destination_type='" . $dalObj->getDataArray('mf_link_table') . "' AND mf_link.id_destination=" . $dalObj->getDataArray('mf_link_id'); } else { if ($dalObj->getDataArray('mf_link_destination') != false) $sql = " SELECT $select FROM " . $dalObj->getObjClassTable() ." INNER JOIN mf_link ON " . $dalObj->getObjClassTable() . "." . $dalObj->getObjClassTablePK() . "=mf_link.id_destination AND mf_link.destination_type='" . $dalObj->getObjClassTable() . "' AND mf_link.source_type='" . $dalObj->getDataArray('mf_link_table') . "' AND mf_link.id_source IN(" . implode(",", $dalObj->getDataArray('mf_link_id')) . ")"; else $sql = " SELECT $select FROM " . $dalObj->getObjClassTable() ." INNER JOIN mf_link ON " . $dalObj->getObjClassTable() . "." . $dalObj->getObjClassTablePK() . "=mf_link.id_source AND mf_link.source_type='" . $dalObj->getObjClassTable() . "' AND mf_link.destination_type='" . $dalObj->getDataArray('mf_link_table') . "' AND mf_link.id_destination IN(" . implode(",", $dalObj->getDataArray('mf_link_id')) . ")"; } $sql .= " " . $joinString . " WHERE 1=1 "; foreach ($dalObj->getCondition() as $key => $value) { if($key == "id") $key = "id_" . $dalObj->getObjClassTable(); 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 .= ( trim($dalObj->getGroupBy()) ? " GROUP BY " . $dalObj->getGroupBy() : ""). ( trim($dalObj->getSortBy()) ? " ORDER BY " . $dalObj->getSortBy() : ""). ( $dalObj->getLimit() ? " LIMIT " . $dalObj->getLimit() : ""). " "; try { $stmt = $db->prepare($sql); if($dalObj->getCacheTime()>0) { $stmt->CacheStart($dalObj->getCacheTime()); } } catch(MysqlException $e) { } $stmt->execute(); $array = $stmt->fetchAllAssoc(); if($dalObj->getCount() == true) return $array[0]['count']; $done = array(); for($i=0;$igetObjClassName(); $obj = new $className(); $obj->FromArray($array[$i],1); foreach($dalObj->getSelectFields() as $key => $value) { $func = "set" . $key; $obj->$func($array[$i][$key]); } if(is_array($dalObj->getJoin())) foreach ($dalObj->getJoin() as $key => $value) { $objArray = new $key(); $objArray->FromArray($array[$i],1); $strFunciton="set" . $key; $obj->$strFunciton($objArray); } if(is_array($dalObj->getDataArray('mf_link_id'))) $done[$array[$i]['id_source']] = $obj; else $done[$obj->GetId()] = $obj; } if($dalObj->getCacheObject()) { self::CacheWriter($done); } return $done; } else { return self::CacheReader(); } } public static final function CacheControll(DalData $dalObj) { if($dalObj->getCacheObject()) { self::$cachePath = Config::Get('DBCACHE_PATH').'DAL/'; self::$cacheTime = $dalObj->getCacheTime(); self::$cacheId = md5(serialize($dalObj)); if(is_file(self::$cachePath.self::$cacheId) && filemtime(self::$cachePath.self::$cacheId) > (time() - self::$cacheTime)) { return true; } else { return false; } } else { return false; } } public static final function CacheWriter($data) { $records = serialize($data); $fp = fopen(self::$cachePath.self::$cacheId, "w"); fputs($fp, $records); fclose($fp); } public static final function CacheReader() { return unserialize(file_get_contents(self::$cachePath.self::$cacheId)); } /** * Dodanie rekordu * * @param nazwa tablicy $objClassTable * @param obiekt $obj * @return integer */ public static function DefaultInsert(DalData $dalObj) { $db = Registry::Get($dalObj->getDatabaseType()); if(!is_numeric($dalObj->getObj()->getId()) || $dalObj->getObj()->getId() == -1) $dalObj->getObj()->SetId('NULL'); $sql = "INSERT INTO " . $dalObj->getObjClassTable() . " (".SQL::ToInsertFields($dalObj->getObj()).") VALUES (" . SQL::ToInsertValues($dalObj->getObj()).")"; //Utils::ArrayDisplay($sql); $stmt = $db->prepare($sql)->execute(); return $stmt->GetInsertionId(); } /** * Aktualizacja rekordu * * @param nazwa tablicy $objClassTable * @param primary key tablicy $objClassTablePK * @param aktualizowany obiekt $obj */ public static function DefaultUpdate(DalData $dalObj) { $db = Registry::Get($dalObj->getDatabaseType()); $sql = "UPDATE " . $dalObj->getObjClassTable() . " SET ". SQL::ToUpdateSet($dalObj->getObj()) ." WHERE " . $dalObj->getObjClassTablePK() ."=:*#1#* "; $stmt=$db->prepare($sql) ->bindParam('*#1#*', $dalObj->getObj()->GetId()); $stmt->execute(); //Utils::ArrayDisplay($dalObj->getObj()->GetId()); //Utils::ArrayDisplay($sql); return $dalObj->getObj()->GetId(); } /** * Aktualizacja rekordu * * @param nazwa tablicy $objClassTable * @param primary key tablicy $objClassTablePK * @param tablica pol i wartosci $array * @param id elementu $id */ public static function UpdateField(DalData $dalObj) { $db = Registry::Get($dalObj->getDatabaseType()); $sql=array(); foreach($dalObj->getUpdateFileldArray() as $key => $value) { $sql[] = $key."='".$db->Escape($value)."'"; } $sql = "UPDATE " . $dalObj->getObjClassTable() . " SET ". implode(',', $sql) ." WHERE " . $dalObj->getObjClassTablePK() ."=:*#1#* "; $stmt=$db->prepare($sql) ->bindParam('*#1#*', $dalObj->getUpdateFieldId()); $stmt->execute(); //Utils::ArrayDisplay($sql); return $dalObj->getUpdateFieldId(); } /** * Usuniecie rekordu * * @param nazwa tablicy $objClassTable * @param primary key tablicy $objClassTablePK * @param identyfikator rekordu $id */ public static function DefaultDelete(DalData $dalObj) { $db = Registry::Get($dalObj->getDatabaseType()); $obj = $dalObj->getObj(); $sql = "DELETE FROM " . $dalObj->getObjClassTable() . " WHERE " . $dalObj->getObjClassTablePK() . "=:1"; $stmt=$db->prepare($sql) ->bindParam(1, $obj->getId()) ->execute(); // Utils::ArrayDisplay($dalObj); // Utils::ArrayDisplay($sql); } /** * Usuniecie rekordu(obiektu) przy porownaniu wszystkich pol * * @param nazwa tablicy $objClassTable * @param primary key tablicy $objClassTablePK * @param identyfikator rekordu $id */ public static function DefaultExactDelete(DalData $dalObj) { $db = Registry::Get($dalObj->getDatabaseType()); $sql = "DELETE FROM " . $dalObj->getObjClassTable() . " WHERE " . SQL::ToDeleteSet($dalObj->getObj()); $stmt=$db->prepare($sql) ->execute(); } /** * Usuniecie rekordu po nazwie pola * * @param nazwa tablicy $objClassTable * @param nazwa pola $field_name * @param identyfikator rekordu $id_mf_user */ public static function DefaultDeleteByField(DalData $dalObj) { $db = Registry::Get($dalObj->getDatabaseType()); $sql = "DELETE FROM " . $dalObj->getObjClassTable() . " WHERE " . $dalObj->getFieldName() . " =:1"; $stmt=$db->prepare($sql) ->bindParam(1, $dalObj->getId()) ->execute(); //Utils::ArrayDisplay($sql); } /** * Zwraca obiekt po numerze id * * @param nazwa opcjonalnej klasy $optClass * @param nazwa tablicy $objClassTable * @param nazwa klasy $objClassName * @param nazwa pola primary key $objClassTablePK * @param id rekordu $id * @return obj */ public static function DefaultGetById(DalData $dalObj) { $dalObj->setUpdateFileldArray(array($dalObj->getObjClassTablePK()=>$dalObj->getId())); $dalObj->setLimit(1); $result = self::DefaultGetResult($dalObj); if(isset($result[0]) && is_object($result[0])) { return $result[0]; } else { throw new UserException('Brak rekordu w tablicy '.$dalObj->getObjClassTable().' o id '.$dalObj->getId().'!'); } } /** * Zapisanie lub aktualizacja obiektu * * @param nazwa tablicy $objClassTable * @param nazwa pola primary key $objClassTablePK * @param aktualizoawny obiekt $obj */ public static function DefaultSave(DalData $dalObj) { if($dalObj->getObj()->GetId()=='-1') { return self::DefaultInsert($dalObj); } else { return self::DefaultUpdate($dalObj); } } public static function DefaultGetByTag(DalData $dalObj) { $dalObj->setCondition(array($dalObj->getObjClassTablePK()=>'mf_link.id_destination', 'mf_link.destination_type'=>$dalObj->getObjClassTable(), 'wp_tag.id_wp_tag'=>'mf_link.id_source', 'mf_link.source_type'=>'wp_tag')); $dalObj->setJoin(array('wp_tag', 'mf_link')); return self::DefaultGetResult($dalObj); } public static function DefaultGetByTagSuggest(DalData $dalObj) { $dalObj->setCondition(array($dalObj->getObjClassTablePK()=>'mf_link.id_destination', 'mf_link.destination_type'=>$dalObj->getObjClassTable(), 'wp_tag_suggest.id_wp_tag_suggest'=>'mf_link.id_source', 'mf_link.source_type'=>'wp_tag_suggest')); $dalObj->setJoin(array('wp_tag_suggest', 'mf_link')); return self::DefaultGetResult($dalObj); } public static abstract function Save($obj); //public static abstract function Insert($obj); //public static abstract function Update($obj); //public static abstract function Delete($id); public static abstract function GetById($id); public static abstract function GetDalDataObj(); /** * Generator kodu JavaScript * * @param array $array * @param nazwa javascriptowa $jsName * @return string */ public static function ToJavaScriptArray($array, $jsName) { $js = "new Array(); \n"; foreach($array as $key => $value) { $js .= $jsName . "[" . $key . "] = '" . $value . "'; \n"; } return $js; } /** * funkcja do js'a * * @param unknown_type $array * @return unknown */ public static function DirectArray($array) { $js = "new Array("; foreach($array as $value) { $js .= "'$value',"; } $js = substr($js, 0, -1); $js .= ")"; return $js; } /* * Tworzy w katalogu temp klasy plik do zliczenia metoda DefaultFileCounterCountAndClean() */ public static function DefaultFileCounterAppend($objClassName, $id) { $data['id'] = $id; $validator = new Validator($data); //$validator->setValues($data); $validator->IsNumber('id', 'Nie jest numerkiem!'); if(!$validator->IsError()) { // Utils::Mkdirs(Config::Get('PATH_TEMP').'/DAL/'.$objClassName); // $fp = fopen(Config::Get('PATH_TEMP').'/DAL/'.$objClassName.'/'.$id.'_'.microtime(), "w"); // fputs($fp, ' '); // fclose($fp); if(Enviroment::CheckMemcache()) { if(!MfMemcache::exists($objClassName)) { MfMemcache::set($objClassName, array()); } $memcacheContent = MfMemcache::get($objClassName); if(isset($memcacheContent[$id])) { $newValue = ++$memcacheContent[$id]; $memcacheContent[$id] = $newValue; } else { $memcacheContent[$id] = 1; } MfMemcache::replace($objClassName, $memcacheContent); } } } /* * Zwraca tablice z liczba id w katalogu temp klasy oraz usuwa pliki */ public static function DefaultFileCounterCountAndClean($objClassName) { echo"mem"; if(Enviroment::CheckMemcache()) {echo "memcache1"; if(MfMemcache::exists($objClassName)) {echo"memcache2"; $validator = new Validator(array()); $memcacheContent = MfMemcache::get($objClassName); print_R($memcacheContent); foreach($memcacheContent as $id => $count) { if($count>0) { $data['id'] = $id; $validator->setValues($data); $validator->IsNumber('id', 'Nie jest numerkiem!'); if(!$validator->IsError()) { $obj = WpCounterMemcacheDAL::GetResult(array('content_type'=>$objClassName, 'content_id'=>$id, 'time'=>date("Y-m-d"))); if(isset($obj[0]) && is_object($obj[0])) { $counter = $obj[0]; } else { $counter = new WpCounterMemcache(); $counter->SetContentId($id); $counter->SetContentType($objClassName); $counter->SetTime(date("Y-m-d")); } $counter->SetCount(($counter->GetCount()+$count)); WpCounterMemcacheDAL::Save($counter); } else { echo $id . "nie jest numerkiem!
";} } } MfMemcache::remove($objClassName); } } //return $counterData; } } ?>