Example #1
0
 function FullResults($table, $where = '')
 {
     $queryParams = array('from' => $table, 'where' => $where);
     $query = new Query($queryParams);
     return $query->GetArray();
 }
Example #2
0
 function FetchItems($queryParams = '')
 {
     global $_JAM;
     $query = new Query();
     $query->AddFrom($this->name);
     if ($this->config['keepVersions']) {
         // This is a multiversions table; fetch 'master' field
         $query->AddFields(array('master' => 'IF(' . $this->name . '.master IS NULL, ' . $this->name . '.id, ' . $this->name . '.master)'));
         $query->AddWhere($this->name . '.current = TRUE');
     } else {
         // This is a standard table; fetch 'id' field
         $query->AddFields(array('id' => $this->name . '.id'));
     }
     /*
     		// Order by master if we're keeping versions
     		if ($this->config['keepVersions']) {
     			$query->AddOrderBy('master DESC');
     		}*/
     // Add localized data
     if ($this->isLocalizable) {
         $localizedTable = $this->name . '_localized';
         $query->AddFields(array('language' => $localizedTable . '.language'));
         $query->AddFrom($localizedTable);
         $where = array($localizedTable . '.item = ' . $this->name . '.id', $localizedTable . ".language = '" . $_JAM->language . "'");
         $query->AddWhere($where);
     }
     // Load all fields if none were specified
     if (!$queryParams['fields']) {
         foreach ($this->schema as $name => $info) {
             $queryParams['fields'][] = $name;
         }
     }
     foreach ($this->schema as $name => $info) {
         // Manually remove multi fields from query; they will be processed anyway (possibly kludgy)
         if ($info['type'] == 'multi') {
             if ($multiFieldKey = array_search($name, $queryParams['fields'])) {
                 unset($queryParams['fields'][$multiFieldKey]);
             }
         }
         // Process custom parameters
         if ($info['localizable']) {
             $replaceString = $this->name . '_localized.' . $name;
         } else {
             $replaceString = $this->name . '.' . $name;
         }
         // Fetch data for related modules
         if (@in_array($name, $queryParams['fields'])) {
             if ($info['type'] == 'int' && ($relatedModule = $info['relatedModule']) && $relatedModule != 'users' && $relatedModule != $this->name) {
                 // Add fields from foreign module
                 $relatedModuleSchema = Module::ParseConfigFile($relatedModule, 'config/schema.ini', true);
                 foreach ($relatedModuleSchema as $foreignName => $foreignInfo) {
                     $fields[$name . '_' . $foreignName] = $relatedModule . '.' . $foreignName;
                 }
                 $query->AddFields($fields);
                 // Determine whether we should look for 'master' or 'id' field
                 $relatedModuleConfig = Module::ParseConfigFile($relatedModule, 'config/config.ini', true);
                 $joinCondition = $this->name . '.' . $name . ' = ';
                 if ($relatedModuleConfig['keepVersions']) {
                     $joinCondition .= $relatedModule . '.master AND ' . $relatedModule . '.current = TRUE';
                 } else {
                     $joinCondition .= $relatedModule . '.id';
                 }
                 // Build query
                 $joinTable = $relatedModule;
                 $query->AddJoin($this->name, $joinTable, $joinCondition);
             }
         }
         $queryParams = Module::InsertTableNames($queryParams, $name, $replaceString);
     }
     // Load custom parameters
     $query->LoadParameters($queryParams);
     // Load paths if appropriate
     if ($this->config['autoPaths'] || get_parent_class($this) && method_exists($this, 'GetPath')) {
         $query->AddFields(array('path' => '_paths.path'));
         $joinTable = '_paths';
         $joinConditions[] = '_paths.module = ' . $this->moduleID;
         $joinConditions[] = '_paths.current = 1';
         if ($this->config['keepVersions']) {
             $joinConditions[] = '((_paths.item = ' . $this->name . '.id AND ' . $this->name . '.master IS NULL) OR ' . '_paths.item = ' . $this->name . '.master)';
         } else {
             $joinConditions[] = '_paths.item = ' . $this->name . '.id';
         }
         $query->AddJoin($this->name, $joinTable, $joinConditions);
         if ($this->isLocalizable) {
             $query->AddWhere($this->name . '_localized.language = _paths.language');
         }
     }
     // Debug query:
     //dp($query->GetQueryString());
     // Fetch actual module data
     if ($this->rawData = $query->GetArray()) {
         // Load data for 'multi' fields
         if ($this->hasMulti) {
             $where = 'frommodule = ' . $this->moduleID;
             if ($multiArray = Query::FullResults('_relationships', $where)) {
                 foreach ($this->rawData as $id => $item) {
                     foreach ($multiArray as $multiData) {
                         if ($multiData['fromid'] == $id) {
                             $this->rawData[$id][$this->multiRelatedModules[$multiData['tomodule']]][] = $multiData['toid'];
                         }
                     }
                 }
             }
         }
         // Make a copy of the data for processing so we can keep the raw data available
         $this->processedData = $this->rawData;
         // Post-process data
         foreach ($this->schema as $name => $info) {
             foreach ($this->processedData as $id => $data) {
                 if ($this->processedData[$id][$name]) {
                     switch ($info['type']) {
                         case 'string':
                             $this->processedData[$id][$name] = TextRenderer::SmartizeText($data[$name]);
                             break;
                         case 'text':
                         case 'shorttext':
                             if (!$info['wysiwyg']) {
                                 // Render text using TextRenderer if it's not a WYSIWYG field
                                 if (strstr($data[$name], "\n") !== false) {
                                     // String contains newline characters; format as multiline text
                                     $this->processedData[$id][$name] = TextRenderer::TextToHTML($data[$name]);
                                 } else {
                                     // String is a single line; format as single line
                                     $this->processedData[$id][$name] = TextRenderer::SmartizeText($data[$name]);
                                 }
                             }
                             break;
                         case 'datetime':
                         case 'timestamp':
                         case 'date':
                         case 'time':
                             $this->processedData[$id][$name] = new Date($data[$name]);
                             break;
                         case 'file':
                             $this->processedData[$id][$name] = $this->NestModule('files', $data[$name]);
                             break;
                     }
                 }
             }
         }
         // Subclasses can provide a method to further format data
         if (method_exists($this, 'FormatData')) {
             $this->FormatData();
         }
         if ($this->items) {
             // If $this->items is already set, don't overwrite it
             return $this->processedData;
         } else {
             return $this->items = $this->processedData;
         }
     } else {
         return false;
     }
 }