/** Add the sql to perform a search. * * @param Gdn_SQLDriver $Sql * @param string $Columns a comma seperated list of columns to search on. */ public function AddMatchSql($Sql, $Columns, $LikeRelavenceColumn = '') { if ($this->_SearchMode == 'like') { if ($LikeRelavenceColumn) { $Sql->Select($LikeRelavenceColumn, '', 'Relavence'); } else { $Sql->Select(1, '', 'Relavence'); } $Sql->BeginWhereGroup(); $ColumnsArray = explode(',', $Columns); $First = TRUE; foreach ($ColumnsArray as $Column) { $Column = trim($Column); $Param = $this->Parameter(); if ($First) { $Sql->Where("{$Column} like {$Param}", NULL, FALSE, FALSE); $First = FALSE; } else { $Sql->OrWhere("{$Column} like {$Param}", NULL, FALSE, FALSE); } } $Sql->EndWhereGroup(); } else { $Boolean = $this->_SearchMode == 'boolean' ? ' in boolean mode' : ''; $Param = $this->Parameter(); $Sql->Select($Columns, "match(%s) against({$Param}{$Boolean})", 'Relavence'); $Param = $this->Parameter(); $Sql->Where("match({$Columns}) against ({$Param}{$Boolean})", NULL, FALSE, FALSE); } }
/** * Returns a count of the # of records in the table * @param array $Wheres */ public function GetCount($Wheres = '') { $this->_BeforeGet(); $this->SQL->Select('*', 'count', 'Count')->From($this->Name); if (is_array($Wheres)) { $this->SQL->Where($Wheres); } $Data = $this->SQL->Get()->FirstRow(); return $Data === FALSE ? 0 : $Data->Count; }
/** * Joins the query to a permission junction table and limits the results accordingly. * * @param Gdn_SQLDriver $SQL The SQL driver to add the permission to. * @param mixed $Permissions The permission name (or array of names) to use when limiting the query. * @param string $ForeignAlias The alias of the table to join to (ie. Category). * @param string $ForeignColumn The primary key column name of $JunctionTable (ie. CategoryID). * @param string $JunctionTable * @param string $JunctionColumn */ public function SQLPermission($SQL, $Permissions, $ForeignAlias, $ForeignColumn, $JunctionTable = '', $JunctionColumn = '') { $Session = Gdn::Session(); // Figure out the junction table if necessary. if (!$JunctionTable && StringEndsWith($ForeignColumn, 'ID')) { $JunctionTable = substr($ForeignColumn, 0, -2); } // Check to see if the permission is disabled. if (C('Garden.Permission.Disabled.' . $JunctionTable)) { if (!$Session->CheckPermission($Permissions)) { $SQL->Where('1', '0', FALSE, FALSE); } } elseif ($Session->UserID <= 0 || is_object($Session->User) && $Session->User->Admin != '1') { $SQL->Distinct()->Join('Permission _p', '_p.JunctionID = ' . $ForeignAlias . '.' . $ForeignColumn, 'inner')->Join('UserRole _ur', '_p.RoleID = _ur.RoleID', 'inner')->BeginWhereGroup()->Where('_ur.UserID', $Session->UserID); if (!is_array($Permissions)) { $Permissions = array($Permissions); } $SQL->BeginWhereGroup(); foreach ($Permissions as $Permission) { $SQL->Where('_p.`' . $Permission . '`', 1); } $SQL->EndWhereGroup(); } else { // Force this method to play nice in case it is used in an or clause // (ie. it returns true in a sql sense by doing 1 = 1) $SQL->Where('1', '1', FALSE, FALSE); } return $SQL; }
/** * Joins the query to a permission junction table and limits the results * accordingly. * * @param Gdn_SQLDriver $SQL The SQL driver to add the permission to * @param string $JunctionTable The table to join to (ie. Category) * @param string $JunctionColumn The primary key column name of $JunctionTable (ie. CategoryID). * @param mixed $Permission The permission name (or array of names) to use when limiting the query. */ public function SQLPermission($SQL, $JunctionTableAlias, $JunctionColumn, $Permissions) { $Session = Gdn::Session(); if ($Session->UserID <= 0 || is_object($Session->User) && $Session->User->Admin != '1') { $SQL->Distinct()->Join('Permission _p', '_p.JunctionID = ' . $JunctionTableAlias . '.' . $JunctionColumn, 'inner')->Join('UserRole _ur', '_p.RoleID = _ur.RoleID', 'inner')->BeginWhereGroup()->Where('_ur.UserID', $Session->UserID); if (!is_array($Permissions)) { $Permissions = array($Permissions); } $SQL->BeginWhereGroup(); foreach ($Permissions as $Permission) { $SQL->Where('_p.`' . $Permission . '`', 1); } $SQL->EndWhereGroup(); } else { // Force this method to play nice in case it is used in an or clause // (ie. it returns true in a sql sense by doing 1 = 1) $SQL->Where('1', '1', FALSE, FALSE); } return $SQL; }