function testDao() { $da = new MockDataAccess($this); $dar = new MockDataAccessResult($this); $da->setReturnReference('query', $dar); $dao = new DataAccessObject($da); $result = $dao->retrieve("SELECT *"); $this->assertIsA($result, 'MockDataAccessResult'); }
protected function getChangesetValues($changeset_id) { if (!isset($this->artifact_links_by_changeset[$changeset_id])) { $this->artifact_links_by_changeset[$changeset_id] = array(); $da = CodendiDataAccess::instance(); $field_id = $da->escapeInt($this->id); $changeset_id = $da->escapeInt($changeset_id); $sql = "SELECT cv.changeset_id, cv.has_changed, val.*, a.tracker_id, a.last_changeset_id \n FROM tracker_changeset_value_artifactlink AS val\n INNER JOIN tracker_artifact AS a ON(a.id = val.artifact_id)\n INNER JOIN tracker_changeset_value AS cv\n ON ( val.changeset_value_id = cv.id\n AND cv.field_id = {$field_id}\n AND cv.changeset_id = {$changeset_id}\n )\n ORDER BY val.artifact_id"; $dao = new DataAccessObject(); foreach ($dao->retrieve($sql) as $row) { $this->artifact_links_by_changeset[$row['changeset_id']][] = new Tracker_ArtifactLinkInfo($row['artifact_id'], $row['keyword'], $row['group_id'], $row['tracker_id'], $row['last_changeset_id']); } } return $this->artifact_links_by_changeset[$changeset_id]; }
/** * Export results to csv * * @param bool $only_columns True if we need to export only the displayed columns. False for all the fields. * * @return void */ protected function exportToCSV($only_columns) { $matching_ids = $this->report->getMatchingIds(); $total_rows = $matching_ids['id'] ? substr_count($matching_ids['id'], ',') + 1 : 0; if ($only_columns) { $fields = $this->extractFieldsFromColumns($this->reorderColumnsByRank($this->getColumns())); } else { $fields = Tracker_FormElementFactory::instance()->getUsedFields($this->report->getTracker()); } $lines = array(); $head = array('aid'); foreach ($fields as $field) { if ($this->canFieldBeExportedToCSV($field)) { $head[] = $field->getName(); } } $lines[] = $head; $queries = $this->buildOrderedQuery($matching_ids, $fields); $dao = new DataAccessObject(); $results = array(); foreach ($queries as $sql) { $results[] = $dao->retrieve($sql); } if (!empty($results[0])) { $i = 0; //extract the first results $first_result = array_shift($results); //loop through it foreach ($first_result as $row) { //id, f1, f2 //merge the row with the other results foreach ($results as $result) { //[id, f1, f2] + [id, f3, f4] $row = array_merge($row, $result->getRow()); //row == id, f1, f2, f3, f4... } //build the csv line $line = array(); $line[] = $row['id']; foreach ($fields as $field) { if ($this->canFieldBeExportedToCSV($field)) { $value = isset($row[$field->getName()]) ? $row[$field->getName()] : null; $line[] = $field->fetchCSVChangesetValue($row['id'], $row['changeset_id'], $value, $this->report); } } $lines[] = $line; } $separator = ","; // by default, comma. $user = UserManager::instance()->getCurrentUser(); $separator_csv_export_pref = $user->getPreference('user_csv_separator'); switch ($separator_csv_export_pref) { case "comma": $separator = ','; break; case "semicolon": $separator = ';'; break; case "tab": $separator = chr(9); break; } $http = Codendi_HTTPPurifier::instance(); $file_name = str_replace(' ', '_', 'artifact_' . $this->report->getTracker()->getItemName()); header('Content-Disposition: filename=' . $http->purify($file_name) . '_' . $this->report->getTracker()->getProject()->getUnixName() . '.csv'); header('Content-type: text/csv'); foreach ($lines as $line) { fputcsv(fopen("php://output", "a"), $line, $separator, '"'); } die; } else { $GLOBALS['Response']->addFeedback('error', 'Unable to export (too many fields?)'); } }
/** * @return array */ protected function getChangesetValues($changeset_id) { $da = CodendiDataAccess::instance(); if (!$this->file_values_by_changeset) { $this->file_values_by_changeset = array(); $field_id = $da->escapeInt($this->id); $sql = "SELECT c.changeset_id, c.has_changed, f.*\n FROM tracker_fileinfo as f\n INNER JOIN tracker_changeset_value_file AS vf on (f.id = vf.fileinfo_id)\n INNER JOIN tracker_changeset_value AS c\n ON ( vf.changeset_value_id = c.id\n AND c.field_id = {$field_id}\n )\n ORDER BY f.id"; $dao = new DataAccessObject(); $values = array(); foreach ($dao->retrieve($sql) as $row) { $this->file_values_by_changeset[$row['changeset_id']][] = $this->getFileInfo($row['id'], $row); } } return isset($this->file_values_by_changeset[$changeset_id]) ? $this->file_values_by_changeset[$changeset_id] : array(); }
/** * @param string $keyword * * @return array */ public function getAllValues($keyword = null) { $sql = array(); $da = CodendiDataAccess::instance(); if (!$this->values) { $this->values = array(); if (count($this->value_function) > 0) { $sql = array(); $uh = UserHelper::instance(); $tracker = $this->field->getTracker(); foreach ($this->value_function as $function) { if ($function) { switch ($function) { case 'group_members': $sql[] = ugroup_db_get_dynamic_members($GLOBALS['UGROUP_PROJECT_MEMBERS'], $tracker->id, $tracker->group_id, true, $keyword); break; case 'group_admins': $sql[] = ugroup_db_get_dynamic_members($GLOBALS['UGROUP_PROJECT_ADMIN'], $tracker->id, $tracker->group_id, true, $keyword); break; case 'artifact_submitters': $da = CodendiDataAccess::instance(); $field_id = $da->escapeInt($this->field->id); $tracker_id = $da->escapeInt($tracker->id); if ($keyword) { $keyword = $da->quoteSmart('%' . $keyword . '%'); } $sql[] = "(SELECT DISTINCT user.user_id, user.user_name, " . $uh->getDisplayNameSQLQuery() . "\n FROM tracker_artifact AS a\n INNER JOIN user\n ON ( user.user_id = a.submitted_by AND a.tracker_id = {$tracker->id} )\n " . ($keyword ? "HAVING full_name LIKE {$keyword}" : "") . "\n ORDER BY " . $uh->getDisplayNameSQLOrder() . "\n )"; break; default: if (preg_match('/ugroup_([0-9]+)/', $function, $matches)) { if (strlen($matches[1]) > 2) { $sql[] = ugroup_db_get_members($matches[1], true, $keyword); } else { $sql[] = ugroup_db_get_dynamic_members($matches[1], $tracker->id, $tracker->group_id, true, $keyword); } } break; } } } if ($sql) { $dao = new DataAccessObject(); $this->values = array(); foreach ($dao->retrieve(implode(' UNION ', $sql)) as $row) { $this->values[$row['user_id']] = new Tracker_FormElement_Field_List_Bind_UsersValue($row['user_id'], $row['user_name'], $row['full_name']); } } } } return $this->values; }