<?php
 
 
/*
 
********************************************************
 
TinyButStrong plug-in: ByPage (requires TBS >= 3.1.0)
 
Version 1.0.5, on 2006-10-26, by Skrol29
 
********************************************************
 
*/
 
 
define('TBS_BYPAGE','tbsByPage');
 
 
class tbsByPage {
 
 
    function OnInstall() {
 
        $this->Version = '1.0.5';
 
        $this->PageSize = 0;
 
        return array('OnCommand','BeforeMergeBlock','AfterMergeBlock');
 
    }
 
 
    function OnCommand($PageSize,$PageNum=0,$RecKnown=0) {
 
        // Activate ByPage Mode
 
        $this->PageSize = $PageSize;
 
        $this->PageNum = $PageNum;
 
        $this->RecKnown = $RecKnown;
 
        $this->RecNbr = 0;
 
    }
 
 
    function BeforeMergeBlock(&$TplSource,&$BlockBeg,&$BlockEnd,$PrmLst,&$Src) {
 
 
        if ($this->PageSize<=0) return;   // ByPage Mode not actived
 
        if (isset($Src->ByPage)) return;  // ByPage Mode already processed for the current Data source
 
        if ($Src->RecSet===false) return; // No data available
 
 
        if ($Src->RecSaved) {
 
            // Data is an array
 
 
            $this->RecNbr = count($Src->RecSet);
 
            if ($this->PageNum==-1) { // Last record
 
                $Reminder = $this->RecNbr % $this->PageSize;
 
                if ($Reminder==0) $Reminder = $this->PageSize;
 
                $Src->RecNumInit = $this->RecNbr - $Reminder;
 
            } else {
 
                $Src->RecNumInit = ($this->PageNum-1) * $this->PageSize;
 
            }
 
 
            $Src->RecSet = array_slice($Src->RecSet, $Src->RecNumInit, $this->PageSize);
 
            $Src->RecNbr = $Src->RecNumInit + count($Src->RecSet);
 
 
        } else {
 
 
            // Data is not an array => read records, saving the last page in $this->RecBuffer
 
 
            if ($this->PageNum==-1) {
 
                $RecStop = -1;
 
            } else {
 
                $RecStop = $this->PageNum * $this->PageSize;
 
            }
 
 
            // Init internal buffer
 
            unset($Src->RecBuffer);
 
            $Src->RecSaving = true;
 
 
            // Read records
 
             $Src->RecBuffer = array();
 
            $RecNum = 0;
 
            $Modulo = 0;
 
            $ModuloStop = $this->PageSize + 1;
 
            while (($Src->CurrRec!==false) and ($RecNum!==$RecStop)) {
 
                $Src->DataFetch(); // Updates $Src->RecBuffer
 
                if ($Src->CurrRec!==false) {
 
                    $Modulo++;
 
                    $RecNum++;
 
                    if ($Modulo===$ModuloStop) {
 
                        $Src->RecBuffer = array($Src->RecKey => $Src->CurrRec);
 
                        $Src->RecNumInit += $this->PageSize;
 
                        $Modulo = 1;
 
                    }
 
                }
 
            }
 
 
            // Retreiveing the number of records
 
            $this->RecNbr = $RecNum;
 
            if ($this->RecKnown==-1) {
 
                $Src->RecSaving = false;
 
                while ($Src->CurrRec!==false) {
 
                    $Src->DataFetch();
 
                    if ($Src->CurrRec!==false) $this->RecNbr++;
 
                }
 
                $Src->RecSaving = true;
 
            }
 
            
 
            $Src->DataClose(); // Close the real recordset source
 
 
        }
 
 
        $x = '';
 
        $Src->DataOpen($x); // Read first record, like it is done by TBS before calling this method
 
 
        // Deactivate ByPage Mode
 
        $this->PageSize = 0;
 
        $Src->ByPage = true;
 
 
    }
 
 
    function AfterMergeBlock(&$Buffer,&$Src) {
 
        if (!isset($Src->ByPage)) return;
 
        if ($this->RecKnown==-1) $Src->RecNum = $this->RecNbr;
 
    }    
 
 
}
 
 
?>
 
 |