Aktuality

autoload("autentifikace"); TClassManager::singleton()->autoload("database"); TClassManager::singleton()->autoload("html"); define("SQL_ROWNUM", 10); define("AKTUALITA_ALL", 0); define("AKTUALITA_VIEW", 1); define("AKTUALITA_UVOD", 2); define("STAV_NEVEREJNY", 1); define("STAV_VEREJNY", 2); define("TYP_OBECNA", 0); define("TYP_KMD", 1); define("TYP_BALET", 2); define("TYP_CINOHRA", 4); define("TYP_MUZIKAL", 8); define("TYP_OPERA", 16); define("TYP_AKTUALITY_NJ",32); define("TYP_AKTUALITY_AJ",64); define("TYP_AKTUALITY_OBECNA", 128); define("TYP_AKTUALITY_KMD", 129); define("TYP_AKTUALITY_BALET", 130); define("TYP_AKTUALITY_CINOHRA", 132); define("TYP_AKTUALITY_MUZIKAL", 136); define("TYP_AKTUALITY_OPERA", 144); class Aktualita { const debug = 2; private $pole_typu = array( TYP_OBECNA => "(Poradi=0 OR Poradi>=128)", TYP_KMD => "(Poradi=1)", TYP_BALET => "(Poradi=2)", TYP_CINOHRA => "(Poradi=4)", TYP_MUZIKAL => "(Poradi=8)", TYP_OPERA => "(Poradi=16)", TYP_AKTUALITY_NJ => "(Poradi=32)", TYP_AKTUALITY_AJ => "(Poradi=64)", TYP_AKTUALITY_OBECNA => "(Poradi=0 OR Poradi>=128)", TYP_AKTUALITY_KMD => "(Poradi=1 OR Poradi=129)", TYP_AKTUALITY_BALET => "(Poradi=2 OR Poradi=130)", TYP_AKTUALITY_CINOHRA => "(Poradi=4 OR Poradi=132)", TYP_AKTUALITY_MUZIKAL => "(Poradi=8 OR Poradi=136)", TYP_AKTUALITY_OPERA => "(Poradi=16 OR Poradi=144)" ); public function debug($text) { $fd = fopen("../../php/import/_debug.txt","w"); fwrite($fd, $text); fclose($fd); return true; } public function htmlencode($obsah, $uvod = AKTUALITA_VIEW) { switch ($uvod) { case AKTUALITA_ALL: $obsah = str_replace("[uvod]", "

", $obsah); $obsah = str_replace("[/uvod]", "

", $obsah); break; case AKTUALITA_VIEW: $pos = strpos($obsah, "[/uvod]"); if ($pos) $obsah = substr($obsah, $pos + 7); break; case AKTUALITA_UVOD: $pos = strpos($obsah, "[/uvod]"); if ($pos) { $obsah = substr($obsah, 0, $pos + 7); $obsah = str_replace("[uvod]", "

", $obsah); $obsah = str_replace("[/uvod]", "

", $obsah); } break; } /*$obsah = str_replace("[p]", "

", $obsah); $obsah = str_replace("[/p]", "

", $obsah); $obsah = str_replace("[autor]", "", $obsah); $obsah = str_replace("[/autor]", "", $obsah); $obsah = str_replace("[br]", "
", $obsah); $obsah = str_replace("[nbsp]", " ", $obsah); $obsah = str_replace("[b]", "", $obsah); $obsah = str_replace("[/b]", "", $obsah); $obsah = str_replace("[i]", "", $obsah); $obsah = str_replace("[/i]", "", $obsah); $obsah = str_replace("[odkaz]", "", $obsah); $obsah = str_replace("[url]", "", $obsah); $obsah = str_replace("[/url]", "\">", $obsah); $obsah = str_replace("[img]", "\"\"", $obsah); $co = array(" i ", " k ", " o ", " s ", " u ", " v ", " z ", " a ", " I ", " K ", " O ", " S ", " U ", " V ", " Z ", " A "); $cim = array(" i ", " k ", " o ", " s ", " u ", " v ", " z ", " a ", " I ", " K ", " O ", " S ", " U ", " V ", " Z ", " A "); $obsah = str_replace($co, $cim, $obsah);*/ $obsah = Html::htmlencode($obsah); return stripslashes($obsah); } public function setStav($id, $stav) { $db = Database::singleton(); $db->connect(); $result = $db->query("UPDATE aktuality SET Stav='$stav' WHERE Id='$id';",true); switch ($stav) { case 1: echo "($stav) Aktualita je nezveřejněna!
"; break; case 2: echo "($stav) Aktualita byla zveřejněna!
"; break; case 3: echo "($stav) Zestárlá aktualita!
"; break; } $db->close(); $this->createRSSFile(); return true; } public function smazatAktualitu($id) { $db = Database::singleton(); $db->connect(); $result = $db->query("UPDATE aktuality SET Smazat='Y' WHERE Id='$id';",true); $db->close(); return $result; } // pridat modul public function addAktualita($datum, $nazev, $obsah, $jazyk, $typ, $stav, $barva, $uvod = "") { $db = Database::singleton(); $db->connect(); // db_query("SET DATEFORMAT DMY"); //$dotaz="insert into aktuality (Datum, Nazev, Obsah, Jazyk, Poradi, Smazat, Stav, Soubor)". // " values ('$datum','$nazev','$obsah','$jazyk', $typ, 'N', '$stav', '$barva')"; //if ($debug) { dump_export("Dotaz", $dotaz); } // //$result=db_query($dotaz, TRUE); // nova aktualita $db->query("SET DATEFORMAT DMY"); $id = $db->query("INSERT INTO aktuality (Datum, Nazev, Obsah, Jazyk, Poradi, Smazat, Stav, Soubor) VALUES ('$datum','$nazev','$obsah','$jazyk', '$typ', 'N', '$stav', '$barva')",true); $db->close(); //echo $ //$uvod = str_replace("[uvod]", "

", $obsah); //$uvod = str_replace("[/uvod]", "

", $obsah); //$uvod = Aktualita::htmlencode($obsah, AKTUALITA_UVOD); return $id; } // update aktuality podle id public function saveAktualita($id, $datum, $nazev, $obsah, $typ, $soubor) { $db = Database::singleton(); $db->connect(); //$htmlnazev = htmlentities($nazev); //$htmlobsah = htmlentities($obsah); $id = $db->query("UPDATE aktuality SET Datum='$datum', Nazev='$nazev', Obsah='$obsah', Poradi='$typ', Soubor='$soubor' WHERE Id='$id';",true); $db->close(); return $id; } // smazat modul public function delAktualita($id) { $db = Database::singleton(); $db->connect(); $id = $db->query("DELETE FROM aktuality WHERE id='$id'",true); $db->close(); return $id; } // get aktualitu public function getAktualita($id) { $db = Database::singleton(); $db->connect(); $result = $db->query("SELECT Datum, Nazev, Obsah, Jazyk, Poradi, Smazat, Stav, Soubor FROM aktuality WHERE Id='$id';"); $row = $db->fetch_array($result); //$this->debug($row['Obsah']); // debug $db->close(); return $row; } // get pocet aktualit public function getCount($typ = TYP_AKTUALITY_OBECNA) { $db = Database::singleton(); $db->connect(); $result = $db->query("SELECT COUNT(*) AS 'Pocet' FROM aktuality WHERE (Poradi=$typ OR Poradi=($typ-128)) AND Smazat='N';"); $row = $db->fetch_array($result); $db->close(); return $row['Pocet']; } /** * Zobrazení aktuality podle parametru * @id * */ public function viewAktualita($id, $uvod = AKTUALITA_VIEW) { $db = Database::singleton(); $db->connect(); $result = $db->query("SELECT Datum, Nazev, Obsah FROM aktuality WHERE ID='$id' AND Smazat='N';"); while(list ($datum, $nazev, $obsah)=$db->fetch_array($result)) { echo "

".$nazev."

"; echo "

".sqldate2datum($datum)."

"; //$obsah = html_entity_decode($obsah); $obsah = Aktualita::htmlencode($obsah, $uvod); echo $obsah; echo "
"; } $db->close(); return true; } /** * Zobrazení aktualit na uvodni stranu podle parametru * @rownum - pocet aktualit na uvodni strane * @jazyk - jazykova mutace * @typ - 1 - KMD, 2 - Balet, 4 - Cinohra, 8 - Muzikal, 16 - Opera, 32 - Aktuality NJ, 64 - Aktuality AJ, 128 - Obecná aktualita * - ostatni kombinace dany logickym soucinem * @uvod - AKTUALITA_UVOD - zkraceny popis * */ public function viewAktualityUvod($rownum, $jazyk, $typ, $uvod = AKTUALITA_UVOD) { $db = Database::singleton(); $db->connect(); //$vysledek=db_query("select top ".SQL_ROWNUM*$page." Datum, Nazev, Obsah, Soubor from aktuality where smazat='N' and stav='2' and poradi='$typ' order by Datum desc"); if (strcmp($jazyk,"cz")==0) $result = $db->query("SELECT TOP $rownum ID, Datum, Nazev, Obsah, Soubor FROM aktuality WHERE Smazat='N' AND Stav='2' AND Poradi >= 128 ORDER BY Datum DESC;"); else $result = $db->query("SELECT TOP $rownum ID, Datum, Nazev, Obsah, Soubor FROM aktuality WHERE Smazat='N' AND Stav='2' AND Poradi='$typ' ORDER BY Datum DESC;"); while(list ($ID, $datum, $nazev, $obsah, $soubor)=$db->fetch_array($result)) { echo "
\n"; //echo "
"; } $db->close(); return true; } public function viewAktuality($page, $rownum = SQL_ROWNUM, $typ = TYP_AKTUALITY_OBECNA, $uvod = AKTUALITA_ALL) { $pocet_aktualit = Aktualita::getCount($typ); //echo $pocet_aktualit."
".$this->pole_typu[$typ]; $start = 0; if ($page > 0) { $start = $page * $rownum + 1; $rownum--; } else { $page = 0; } if ($pocet_aktualit<=($start + $rownum)) { $old_page = $page - 1; $page = -1; } if (($pocet_aktualit==$rownum) && ($start==0)) { $page = -2; } // $rownum == $pocet_aktualit $db = Database::singleton(); $db->connect(); $result = $db->query("DECLARE @rowsperpage INT \n DECLARE @start INT \n SET @start = $start \n SET @rowsperpage = $rownum \n SELECT * FROM (SELECT row_number() OVER (ORDER BY Datum DESC) AS rownum, ID, Datum, Nazev, Obsah, Soubor FROM aktuality WHERE ".$this->pole_typu[$typ]." AND Stav='2' AND Smazat='N') AS A WHERE A.rownum BETWEEN (@start) AND (@start + @rowsperpage); "); while(list ($rownum, $ID, $datum, $nazev, $obsah, $soubor)=$db->fetch_array($result)) { echo "
\n"; echo "
".$nazev."
\n"; echo "

".sqldate2datum($datum)."

\n"; $obsah = html_entity_decode($obsah); $obsah = Aktualita::htmlencode($obsah, $uvod); echo $obsah; //echo "

"; echo "\n
\n"; } $db->close(); echo "

"; switch ($page) { case 0: echo ""; echo ""; break; case -1: if ($pocet_aktualit>$rownum) { echo ""; echo ""; } break; case -2: break; default: $next = $page+1; $before = $page-1; echo ""; echo ""; } echo "
>>    << << >>
"; return true; } public function viewAdminAktuality($page, $rownum, $typ = 0) { $pocet_aktualit = Aktualita::getCount($typ); $start = 0; if ($page > 0) { $start = $page * $rownum + 1; $rownum--; } else { $page = 0; } if ($pocet_aktualit<=($start + $rownum)) { $old_page = $page - 1; $page = -1; } $db = Database::singleton(); $db->connect(); $result = $db->query("DECLARE @rowsperpage INT \n DECLARE @start INT \n SET @start = $start \n SET @rowsperpage = $rownum \n SELECT * FROM (SELECT row_number() OVER (ORDER BY Datum DESC) AS rownum, ID, Datum, Nazev, Obsah, Jazyk, Poradi, Smazat, Stav FROM aktuality WHERE Poradi='$typ' AND Smazat='N') AS A WHERE A.rownum BETWEEN (@start) AND (@start + @rowsperpage); "); echo ""; echo ""; while(list ($r, $id, $datum, $nazev, $obsah, $jazyk, $poradi, $smazat, $stav)=$db->fetch_array($result)) { echo ""; if (($timestamp = strtotime($datum)) === -1) { $mesic = array ("I" => "1", "II" => "2", "III" => "3", "IV" => "4", "V" => "5", "VI" => "6", "VII" => "7", "VIII" => "8", "IX" => "9", "X" => "10", "XI" => "11", "XII" => "12"); $datum = explode(" ", $row["Datum"]); $arrayLength = count($datum); //if ($debug) { print_r($datum); print_r($arrayLength); } //echo ""; echo ""; } else { echo ""; } echo ""; echo ""; echo ""; } echo "
VloženoNázev aktualityAkce
Neplatné datum (".$row["Datum"].") ".$datum[0].".".$mesic[$datum[1]].".".$datum[2]." ".$datum[4]."".$datum[0].".".$mesic[$datum[1]].".".$datum[2]." ".$datum[$arrayLength-1]."".date('j.n.Y H:i', $timestamp)."$nazev \"Zobrazit \"Upravit\" "; switch ($stav) { case 1: echo " \"Zveřejnit\" "; break; case 2: echo " \"Nezveřejnit\" "; break; case 3: echo " \"Zveřejnit\" "; break; } echo " \"Smazat\" "; echo "
"; $db->close(); echo "

"; switch ($page) { case 0: echo ""; echo ""; break; case -1: if ($pocet_aktualit>$rownum) { echo ""; echo ""; } break; default: $next = $page+1; $before = $page-1; echo ""; echo ""; } echo "
>>    << << >>
"; return true; } // get aktualitu public function createRSSFile() { include("RSS.php"); $rss = new RSS; $rss->createRSSFile(); //$rss->addNews($datum, $nazev, $uvod); $typ = TYP_OBECNA; $start = 0; $rownum = 14; $db = Database::singleton(); $db->connect(); $result = $db->query("DECLARE @rowsperpage INT \n DECLARE @start INT \n SET @start = $start \n SET @rowsperpage = $rownum \n SELECT * FROM (SELECT row_number() OVER (ORDER BY Datum DESC) AS rownum, ID, Datum, Nazev, Obsah, Soubor FROM aktuality WHERE ".$this->pole_typu[$typ]." AND Stav='2' AND Smazat='N') AS A WHERE A.rownum BETWEEN (@start) AND (@start + @rowsperpage); "); while(list ($rownum, $ID, $datum, $nazev, $obsah, $soubor)=$db->fetch_array($result)) { $datumRSS = substr( $this->sqldate2datum($datum, "d.m.Y H:i"), 3 ); $pos = strpos($obsah, "[/uvod]"); if ($pos) { $obsah = substr($obsah, 0, $pos + 7); $obsah = str_replace("[uvod]", "

", $obsah); $obsah = str_replace("[/uvod]", "

", $obsah); $obsah = str_replace("[b]", "", $obsah); $obsah = str_replace("[/b]", "", $obsah); $obsah = str_replace("[i]", "", $obsah); $obsah = str_replace("[/i]", "", $obsah); $obsah = str_replace("[br]", "
", $obsah); $obsah = str_replace("[odkaz]", "", $obsah); $obsah = str_replace("[/odkaz]", "", $obsah); } $rss->addNews( $datumRSS, $nazev, $obsah ); } $db->close(); } function sqldate2datum($sqldatum, $format = 'd-m-y H:i') { $tyden = array("Ne", "Po", "Út", "St", "Čt", "Pá", "So"); if (($timestamp = strtotime($sqldatum)) === -1) { $mesic = array ("I" => "1", "II" => "2", "III" => "3", "IV" => "4", "V" => "5", "VI" => "6", "VII" => "7", "VIII" => "8", "IX" => "9", "X" => "10", "XI" => "11", "XII" => "12"); $datum = explode(" ", $sqldatum); $arrayLength = count($datum); //if ($debug) { print_r($datum); print_r($arrayLength); } //echo "Neplatné datum (".$row["Datum"].") ".$datum[0].".".$mesic[$datum[1]].".".$datum[2]." ".$datum[4].""; //echo "".$datum[0].".".$mesic[$datum[1]].".".$datum[2]." ".$datum[$arrayLength-1].""; $result = $datum[0].".".$mesic[$datum[1]].".".$datum[2]." ".$datum[$arrayLength-1]; } else { //echo "".date('j.n.Y H:i', $timestamp).""; $result = $tyden[date("w",$timestamp)]." ".date($format, $timestamp); } return $result; } } /* Jak udělat LIMIT (od,do) v MSSQL 2005 Napsal Stanislav Duben Čtvrtek, 12 červenec 2007 Hodně webových vývojářů si stěžuje, že Microsoft SQL neumí nějakou obdobu příkazu LIMIT (od,do), kterou má v sobě MySQL. Řešení samozřejmě šlo udělat pomocí SELECT TOP n a vnořeného SELECT TOP n už dříve. S novými přikazy T-SQL v SQL 2005 je ale situace ještě jednodušší. Stačí použít tento kód, definovat @start jako hodnotu limit OD a @rowsperpage jako počet záznamů, které chceme. DECLARE @rowsperpage INT DECLARE @start INT SET @start = 120000 SET @rowsperpage = 10 SELECT * FROM ( SELECT row_number() OVER (ORDER BY sloupecek) AS rownum, sloupecek2, sloupecek3, .... sloupecekX FROM tabulka ) AS A WHERE A.rownum BETWEEN (@start) AND (@start + @rowsperpage) */ ?>