Commit 4b2ec61abe7b07570d18992a0d52aaab79b45f37
1 parent
36a34b2f
Extend from PatternTableGeneric, passing in an adaptered version of the
PEAR DB result set. git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3047 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
1 changed file
with
55 additions
and
185 deletions
lib/visualpatterns/PatternTableSqlQuery.inc
| @@ -36,192 +36,62 @@ | @@ -36,192 +36,62 @@ | ||
| 36 | * @todo $iLinkImageURL is hard coded - change | 36 | * @todo $iLinkImageURL is hard coded - change |
| 37 | * @todo $sLinkPageURL is hard coded - change | 37 | * @todo $sLinkPageURL is hard coded - change |
| 38 | */ | 38 | */ |
| 39 | -class PatternTableSqlQuery { | ||
| 40 | - | ||
| 41 | - /** query to execute*/ | ||
| 42 | - var $sQuery; | ||
| 43 | - /* Columns in table to query (ID is included by default) */ | ||
| 44 | - var $aColumns; | ||
| 45 | - /* Column types. Possibles are 1 = text, 2 = boolean, 3 = hyperlink url */ | ||
| 46 | - var $aColumnTypes; | ||
| 47 | - /** header names to display */ | ||
| 48 | - var $aColumnHeaderNames; | ||
| 49 | - /** table width, either in pixels or as a percentage e.g. 600 or 100%*/ | ||
| 50 | - var $sWidth; | ||
| 51 | - /** link url used if a column type of 3 is specified */ | ||
| 52 | - var $aLinkURLs; | ||
| 53 | - /** database column values to append to link url if a column type of 3 is specified */ | ||
| 54 | - var $aDBQueryStringColumns; | ||
| 55 | - /** variables names to give $aDBQueryStringColumns on the query string */ | ||
| 56 | - var $aQueryStringVariableNames; | ||
| 57 | - /** display the column headings or not */ | ||
| 58 | - var $bDisplayColumnHeadings; | ||
| 59 | - /** table heading */ | ||
| 60 | - var $sTableHeading; | ||
| 61 | - /** specify an image at the start of each row in the table */ | ||
| 62 | - var $sImageURL; | ||
| 63 | - /** specify whether to use $sImageURL or to get the image url from the sql result set */ | ||
| 64 | - var $bUseImageURLFromQuery = false; | ||
| 65 | - /** message that will be displayed if the table is empty*/ | ||
| 66 | - var $sEmptyTableMessage; | ||
| 67 | - /** Picture paths */ | ||
| 68 | - var $sChkPicPath = "widgets/checked.gif"; | ||
| 69 | - var $sUnChkPicPath = "widgets/unchecked.gif"; | ||
| 70 | - /** whether to force entries to wrap */ | ||
| 71 | - var $bWordWrap = false; | ||
| 72 | - | ||
| 73 | - function PatternTableSqlQuery($sTmpQuery, $aTmpColumns, $aTmpColumnTypes, $aTmpColumnHeaderNames, $sTmpWidth, $aTmpLinkURLs = null, $aTmpDBQueryStringColumns = null, $aNewQueryStringVariableNames = null) { | ||
| 74 | - $this->sQuery = $sTmpQuery; | ||
| 75 | - $this->aColumns = & $aTmpColumns; | ||
| 76 | - $this->aColumnTypes = $aTmpColumnTypes; | ||
| 77 | - $this->aColumnHeaderNames = $aTmpColumnHeaderNames; | ||
| 78 | - $this->sWidth = $sTmpWidth; | ||
| 79 | - $this->bDisplayColumnHeadings = $bTmpDisplayColumnHeadings; | ||
| 80 | - $this->aLinkURLs = $aTmpLinkURLs; | ||
| 81 | - $this->aDBQueryStringColumns = $aTmpDBQueryStringColumns; | ||
| 82 | - $this->aQueryStringVariableNames = $aNewQueryStringVariableNames; | ||
| 83 | - } | ||
| 84 | - | ||
| 85 | - function setEmptyTableMessage($sNewValue) { | ||
| 86 | - $this->sEmptyTableMessage = $sNewValue; | ||
| 87 | - } | ||
| 88 | - | ||
| 89 | - function setTableHeading($sNewValue) { | ||
| 90 | - $this->sTableHeading = $sNewValue; | ||
| 91 | - } | ||
| 92 | - | ||
| 93 | - function setImageURL($sNewValue) { | ||
| 94 | - $this->sImageURL = $sNewValue; | ||
| 95 | - } | ||
| 96 | - | ||
| 97 | - function setUseImageURLFromQuery($bNewValue) { | ||
| 98 | - $this->bUseImageURLFromQuery = $bNewValue; | ||
| 99 | - } | ||
| 100 | - | ||
| 101 | - function setDisplayColumnHeadings($bNewValue) { | ||
| 102 | - $this->bDisplayColumnHeadings = $bNewValue; | ||
| 103 | - } | ||
| 104 | - | ||
| 105 | - function setIncludeBorder($bNewValue) { | ||
| 106 | - $this->bIncludeBorder = $bNewValue; | ||
| 107 | - } | ||
| 108 | - | ||
| 109 | - function setChkPicPath($sNewChkPicPath) { | ||
| 110 | - $this->sChkPicPath = $sNewChkPicPath; | ||
| 111 | - } | ||
| 112 | - | ||
| 113 | - function getChkPicPath() { | ||
| 114 | - return $this->sChkPicPath ; | ||
| 115 | - } | ||
| 116 | - | ||
| 117 | - function setWordWrap($bNewValue) { | ||
| 118 | - $this->bWordWrap = $bNewValue; | ||
| 119 | - } | ||
| 120 | - | ||
| 121 | - /** | ||
| 122 | - * Build the HTML string used to render the object | ||
| 123 | - * | ||
| 124 | - * @return String of HTML used to render object | ||
| 125 | - * | ||
| 126 | - * @todo possibly add in image size restraints for link types 2 and 3 | ||
| 127 | - */ | ||
| 128 | - function & render() { | 39 | + |
| 40 | +require_once('PatternTableGeneric.inc'); | ||
| 41 | + | ||
| 42 | +class SqlResultSetAdapter { | ||
| 43 | + // Has there been an error setting up the result set? | ||
| 44 | + var $broken = false; | ||
| 45 | + | ||
| 46 | + function SqlResultSetAdapter ($oResultSet) { | ||
| 129 | global $default; | 47 | global $default; |
| 130 | - | ||
| 131 | - $sToRender = "<table cellpadding=\"5\" border=\"" . ($this->bIncludeBorder ? "1" : "0") . "\" width=\"" . $this->sWidth . "\">\n"; | ||
| 132 | - if (isset($this->sTableHeading)) { | ||
| 133 | - $sToRender .= "<caption align=\"top\" colspan=\"" . count($this->aColumns) . "\" align=\"left\"><b>$this->sTableHeading</b></caption>\n"; | ||
| 134 | - } | ||
| 135 | - if ($this->bDisplayColumnHeadings) { | ||
| 136 | - for ($i = 0; $i < count($this->aColumnHeaderNames); $i++) { | ||
| 137 | - $sToRender .= "<th align=left>" . $this->aColumnHeaderNames[$i] . "</th>\n"; | ||
| 138 | - } | ||
| 139 | - } | ||
| 140 | - $sql = $default->db; | ||
| 141 | - $sql->query($this->sQuery); | ||
| 142 | - if ($sql->num_rows() == 0) { | ||
| 143 | - $sToRender .= "<tr>\n"; | ||
| 144 | - if (isset($this->sEmptyTableMessage)) { | ||
| 145 | - $sToRender .= "<td colspan=" . count($this->aColumns) . ">$this->sEmptyTableMessage</td>\n"; | ||
| 146 | - } else { | ||
| 147 | - $sToRender .= "<td colspan=" . count($this->aColumns) . ">No " . (isset($this->sTableHeading) ? $this->sTableHeading : "") . " data</td>\n"; | ||
| 148 | - } | ||
| 149 | - $sToRender .= "</tr>\n"; | ||
| 150 | - } else { | ||
| 151 | - $iColour = 0; | ||
| 152 | - while ($sql->next_record()) { | ||
| 153 | - $sToRender .= "<tr bgcolor=\"" . getColour($iColour) . "\">\n"; | ||
| 154 | - $iColour++; | ||
| 155 | - for ($i = 0; $i < count($this->aColumns); $i++) { | ||
| 156 | - switch ($this->aColumnTypes[$i]) { | ||
| 157 | - case 1: | ||
| 158 | - //text | ||
| 159 | - $sToRender .= "<td>"; | ||
| 160 | - if (isset($this->sImageURL)) { | ||
| 161 | - $sToRender .= $this->generateImageURL($this->sImageURL); | ||
| 162 | - } else if ($this->bUseImageURLFromQuery) { | ||
| 163 | - $sToRender .= $this->generateImageURL($sql->f("image_url")); | ||
| 164 | - } | ||
| 165 | - if ($sql->f($this->aColumns[$i]) != null) { | ||
| 166 | - if ($this->bWordWrap) { | ||
| 167 | - $sToRender .= wordwrap($sql->f($this->aColumns[$i]), 25, " ", 1) . "</td>"; | ||
| 168 | - } else { | ||
| 169 | - $sToRender .= $sql->f($this->aColumns[$i]) . "</td>"; | ||
| 170 | - } | ||
| 171 | - } else { | ||
| 172 | - $sToRender .= " </td>"; | ||
| 173 | - } | ||
| 174 | - break; | ||
| 175 | - case 2: | ||
| 176 | - //boolean | ||
| 177 | - $sToRender .= "<td>"; | ||
| 178 | - if ($sql->f($this->aColumns[$i]) != null) { | ||
| 179 | - $value = $sql->f($this->aColumns[$i]); | ||
| 180 | - if ($value) { | ||
| 181 | - $sToRender .= "<img src=\"$default->graphicsUrl/" . $this->sChkPicPath . "\">"; | ||
| 182 | - } else { | ||
| 183 | - $sToRender .= "<img src=\"$default->graphicsUrl/" . $this->sUnChkPicPath . "\">"; | ||
| 184 | - } | ||
| 185 | - $sToRender .= " </td>"; | ||
| 186 | - } else { | ||
| 187 | - $sToRender .= " </td>"; | ||
| 188 | - } | 48 | + $default->log->info('SqlResultSetAdapter called'); |
| 49 | + $this->oResultSet = $oResultSet; | ||
| 50 | + if (PEAR::isError($oResultSet)) { | ||
| 51 | + $this->broken = true; | ||
| 52 | + } | ||
| 53 | + } | ||
| 189 | 54 | ||
| 190 | - break; | ||
| 191 | - case 3: | ||
| 192 | - //hyperlink | ||
| 193 | - $sToRender .= "<td><a href=\""; | ||
| 194 | - $sLink = $this->aLinkURLs[$i]; | ||
| 195 | - for ($j = 0; $j < count($this->aDBQueryStringColumns); $j++) { | ||
| 196 | - if (strpos($sLink, "?") === false) { | ||
| 197 | - $sLink .= "?" . $this->aQueryStringVariableNames[$j] . "=" . $sql->f($this->aDBQueryStringColumns[$j]); | ||
| 198 | - } else { | ||
| 199 | - $sLink .= "&" . $this->aQueryStringVariableNames[$j] . "=" . $sql->f($this->aDBQueryStringColumns[$j]); | ||
| 200 | - } | ||
| 201 | - } | ||
| 202 | - $sToRender .= $sLink . "\">"; | ||
| 203 | - | ||
| 204 | - if (isset($this->sImageURL)) { | ||
| 205 | - $sToRender .= $this->generateImageURL($this->sImageURL); | ||
| 206 | - } else if ($this->bUseImageURLFromQuery) { | ||
| 207 | - $sToRender .= $this->generateImageURL($sql->f("image_url")); | ||
| 208 | - } | ||
| 209 | - $sToRender .= $sql->f($this->aColumns[$i]) . "</a></td>\n"; | ||
| 210 | - break; | ||
| 211 | - default: | ||
| 212 | - break; | ||
| 213 | - } | ||
| 214 | - } | ||
| 215 | - $sToRender .= "</tr>\n"; | ||
| 216 | - } | ||
| 217 | - } | ||
| 218 | - $sToRender .= "</table>"; | ||
| 219 | - return $sToRender; | ||
| 220 | - } | ||
| 221 | - | ||
| 222 | - | ||
| 223 | - function generateImageURL($sURL) { | ||
| 224 | - return "<img src=\"" . $sURL . "\" border=\"0\"/>"; | 55 | + function isEmpty () { |
| 56 | + global $default; | ||
| 57 | + $default->log->info('Checked if SqlResultSetAdapter was empty'); | ||
| 58 | + if ($this->broken) { | ||
| 59 | + return $this->oResultSet; | ||
| 60 | + } | ||
| 61 | + return ($this->oResultSet->numRows() == 0); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + function next () { | ||
| 65 | + global $default; | ||
| 66 | + $default->log->info('Got next result from SqlResultSetAdapter'); | ||
| 67 | + if ($this->broken) { | ||
| 68 | + return $this->oResultSet; | ||
| 69 | + } | ||
| 70 | + $aNextResult = $this->oResultSet->fetchRow(DB_FETCHMODE_ASSOC); | ||
| 71 | + if ($aNextResult === null) { | ||
| 72 | + return null; | ||
| 73 | + } | ||
| 74 | + return new SqlResultAdapter ($aNextResult); | ||
| 75 | + } | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +class SqlResultAdapter { | ||
| 79 | + function SqlResultAdapter ($oResult) { | ||
| 80 | + $this->oResult = $oResult; | ||
| 81 | + } | ||
| 82 | + function get ($sField) { | ||
| 83 | + global $default; | ||
| 84 | + $default->log->info('Getting ' . $sField . ' field from SqlResultAdapter'); | ||
| 85 | + return $this->oResult[$sField]; | ||
| 86 | + } | ||
| 87 | +} | ||
| 88 | + | ||
| 89 | +class PatternTableSqlQuery extends PatternTableGeneric { | ||
| 90 | + function PatternTableSqlQuery($sTmpQuery, $aTmpColumns, $aTmpColumnTypes, $aTmpColumnHeaderNames, $sTmpWidth, $aTmpLinkURLs = null, $aTmpDBQueryStringColumns = null, $aNewQueryStringVariableNames = null) { | ||
| 91 | + $oResult = DBUtil::runQuery($sTmpQuery); | ||
| 92 | + $oResultSet =& new SqlResultSetAdapter ($oResult); | ||
| 93 | + $this->PatternTableGeneric($oResultSet, $aTmpColumns, $aTmpColumnTypes, $aTmpColumnHeaderNames, $sTmpWidth, $aTmpLinkURLs, $aTmpDBQueryStringColumns, $aNewQueryStringVariableNames); | ||
| 225 | } | 94 | } |
| 226 | } | 95 | } |
| 227 | -?> | ||
| 228 | \ No newline at end of file | 96 | \ No newline at end of file |
| 97 | + | ||
| 98 | +?> |