public function pagemetas_autocompletekeyword(){ $request = $this->getPageRequest(); $view = $this->getView(); $view->mode = View::MODE_AJAX; $view->contenttype = View::CTYPE_JSON; $term = $request->getParameter('term'); $view->record = false; // This is an ajax-only request. if(!$request->isAjax()){ return View::ERROR_BADREQUEST; } $ds = new Core\Datamodel\Dataset(); $ds->table('page_meta'); $ds->uniquerecords = true; $ds->select('meta_value', 'meta_value_title'); $ds->where('meta_key = keyword'); $ds->where('meta_value_title LIKE ' . $term . '%'); // Just in case there are a huge number of records... $stream = new DatasetStream($ds); $view->jsondata = array(); while(($record = $stream->getRecord())){ $view->jsondata[] = array( 'id' => $record['meta_value'], 'label' => $record['meta_value_title'], 'value' => $record['meta_value'], ); } // Does the user have access to search for users? // if so include that search here to! This is for the subject matter tag, or "This x is about person y!" if(\Core\user()->checkAccess('p:/user/search/autocomplete')){ $results = UserModel::Search($term); foreach($results as $r){ /** @var $r \Core\Search\ModelResult */ /** @var UserModel $user */ $user = $r->_model; $view->jsondata[] = array( 'id' => 'u:' . $user->get('id'), 'label' => $user->getDisplayName(), 'value' => 'u:' . $user->get('id'), ); } } }
/** * DELETE FROM tablename WHERE searchclause * * @access public * @return mixed array parsed delete on success, otherwise Error */ public function parseDelete() { $tree = new Core\Datamodel\Dataset(); $tree->_mode = Core\Datamodel\Dataset::MODE_DELETE; $this->getTok(); if ($this->token == 'from') { // FROM is not required // This is used from the DELETE FROM tablename $this->getTok(); } if($this->token == 'table'){ // Table is allowed in the // TRUNCATE TABLE tablename // syntax. $this->getTok(); } if ($this->token != 'ident') { $this->raiseError('Expected a table name'); } $tree->table($this->lexer->tokText); $this->getTok(); if ($this->token == 'where') { // WHERE is not required $this->getTok(); $clause = $this->parseWhereCondition(); if (false === $clause) { return $clause; } $tree->_where = $clause; } return $tree; }
/** * @param string $model */ public function __construct($model) { $this->_model = $model; $m = $this->_model; $this->_dataset = new Core\Datamodel\Dataset(); $this->_dataset->table($m::GetTablename()); $this->_dataset->select('*'); }
/** * Internal function to parse and handle the dataset in the <upgrade> and <install> tasks. * This is used for installations and upgrades. * * Unlike the other parse functions, this handles a single node at a time. * * @param $node DOMElement * @param $verbose bool * * @throws InstallerException */ private function _parseDatasetNode(DOMElement $node, $verbose = false){ $action = $node->getAttribute('action'); $table = $node->getAttribute('table'); $haswhere = false; $sets = array(); $renames = array(); $ds = new Core\Datamodel\Dataset(); $ds->table($table); foreach($node->getElementsByTagName('datasetset') as $el){ $sets[$el->getAttribute('key')] = $el->nodeValue; } foreach($node->getElementsByTagName('datasetrenamecolumn') as $el){ // <datasetrenamecolumn oldname="ID" newname="id"/> $renames[$el->getAttribute('oldname')] = $el->getAttribute('newname'); } foreach($node->getElementsByTagName('datasetwhere') as $el){ $haswhere = true; $ds->where(trim($el->nodeValue)); } switch($action){ case 'alter': if(sizeof($sets)) throw new InstallerException('Invalid mix of arguments on ' . $action . ' dataset request, datasetset is not supported!'); if($haswhere) throw new InstallerException('Invalid mix of arguments on ' . $action . ' dataset request, datasetwhere is not supported!'); foreach($renames as $k => $v){ // ALTER TABLE `controllers` CHANGE `ID` `id` INT( 11 ) NOT NULL AUTO_INCREMENT $ds->renameColumn($k, $v); } break; case 'update': foreach($sets as $k => $v){ $ds->update($k, $v); } break; case 'insert': foreach($sets as $k => $v){ $ds->insert($k, $v); } break; case 'delete': if(sizeof($sets)) throw new InstallerException('Invalid mix of arguments on ' . $action . ' dataset request'); if(!$haswhere) throw new InstallerException('Cowardly refusing to delete with no where statement'); $ds->delete(); break; default: throw new InstallerException('Invalid action type, '. $action); } // and GO! if($verbose){ CLI::PrintActionStart('Executing dataset ' . $action . ' command on ' . $table); } $ds->execute(); if($ds->num_rows){ CLI::PrintActionStatus(true); return array($action . ' on table ' . $table . ' affected ' . $ds->num_rows . ' records.'); } else{ CLI::PrintActionStatus(false); return false; } }