]> jfr.im git - irc/h9k/magirc.git/commitdiff
Fixed wrong pagination data for some server-side datatables
authorHal9000 <redacted>
Fri, 20 Apr 2012 19:48:53 +0000 (21:48 +0200)
committerHal9000 <redacted>
Fri, 20 Apr 2012 19:48:53 +0000 (21:48 +0200)
lib/magirc/DB.class.php
lib/magirc/denora/Denora.class.php

index 921aa0e94617e9c0e777dd956eb4f873d144a8a5..5aae7f382d2756e3053adf03ab1b152032d4fb70 100644 (file)
@@ -304,10 +304,10 @@ class DB {
         * @return mixed
         */
        function datatablesTotal($sQuery, $aParams = array()) {
-               $sQuery = preg_replace("/SELECT .+ FROM/", "SELECT COUNT(*) FROM", $sQuery);
+               $sQuery = preg_replace('#SELECT\s.*?\sFROM#is', 'SELECT COUNT(*) FROM', $sQuery, 1);
                $ps = $this->prepare($sQuery);
                foreach ($aParams as $key => $val) {
-                       $ps->bindParam($key, $val);
+                       $ps->bindParam($key, $val, is_int($val) ? PDO::PARAM_INT : PDO::PARAM_STR);
                }
                $ps->execute();
                return $ps->fetch(PDO::FETCH_COLUMN);
index c73525b64ae8e45e7381c00331b7cbaab7888107..64bf454e03381135de69277ff9a3013bc15a9438 100644 (file)
@@ -568,7 +568,7 @@ class Denora {
                $aaData = array();
                $sQuery = "SELECT SQL_CALC_FOUND_ROWS uname,letters,words,line AS 'lines',actions,smileys,kicks,modes,topics FROM ustats WHERE chan=:channel AND type=:type AND letters > 0 ";
                if ($datatables) {
-                       $iTotal = $this->db->datatablesTotal($sQuery, array(':type' => $type, ':channel' => $chan));
+                       $iTotal = $this->db->datatablesTotal($sQuery, array(':type' => (int) $type, ':channel' => $chan));
                        $sFiltering = $this->db->datatablesFiltering(array('uname'));
                        $sOrdering = $this->db->datatablesOrdering(array('uname', 'letters', 'words', 'line', 'actions', 'smileys', 'kicks', 'modes', 'topics'));
                        $sPaging = $this->db->datatablesPaging();
@@ -578,7 +578,11 @@ class Denora {
                $ps->bindParam(':type', $type, PDO::PARAM_INT);
                $ps->bindParam(':channel', $chan, PDO::PARAM_STR);
                $ps->execute();
-               foreach ($ps->fetchAll(PDO::FETCH_ASSOC) as $row) {
+               $data = $ps->fetchAll(PDO::FETCH_ASSOC);
+               if ($datatables) {
+                       $iFilteredTotal = $this->db->foundRows();
+               }
+               foreach ($data as $row) {
                        if ($datatables) {
                                $row["DT_RowId"] = $row['uname'];
                        }
@@ -591,7 +595,6 @@ class Denora {
                        $aaData[] = $user;
                }
                if ($datatables) {
-                       $iFilteredTotal = $this->db->foundRows();
                        return $this->db->datatablesOutput($iTotal, $iFilteredTotal, $aaData);
                }
                return $aaData;