function handle(&$params) { session_write_close(); header('Connection: close'); $app = Dataface_Application::getInstance(); try { $query =& $app->getQuery(); if (!@$query['-record-id']) { throw new Exception("No record id was specified"); } $record = df_get_record_by_id($query['-record-id']); $username = $query['-username']; if (!$username) { throw new Exception("No username was specified"); } if ($record->val('compiled') == 0) { throw new Exception("The job has must be compiled before it can be approved"); } if ($record->val('job_status') == SweteJob::JOB_STATUS_CLOSED) { throw new Exception("The job has already been approved"); } $job = new SweteJob($record); $job->approve($username); $out = array('code' => 200, 'message' => 'Successfully approved your job '); } catch (Exception $ex) { $out = array('code' => $ex->getCode(), 'message' => $ex->getMessage()); } header('Content-type: text/json; charset="' . $app->_conf['oe'] . '"'); echo json_encode($out); return; }
function handle(&$params) { try { $app = Dataface_Application::getInstance(); $query =& $app->getQuery(); $jt = Dataface_JavascriptTool::getInstance(); $jt->import('swete/ui/filter_translations.js'); $app->addHeadContent('<link rel="stylesheet" type="text/css" href="css/swete/actions/review_translations.css"/>'); if (!@$query['-recordid']) { throw new Exception("No record id was specified"); } $record = df_get_record_by_id($query['-recordid']); $job = new SweteJob($record); $tm = XFTranslationMemory::loadTranslationMemoryFor($record, $record->val('source_language'), $record->val('destination_language')); $translations = $job->getTranslations(); $template = 'swete/actions/review_translations.html'; if (@$query['-isDialog']) { $template = 'swete/actions/review_translations_dlg.html'; } df_display(array('job' => $job, 'translations' => $translations), $template); } catch (Exception $e) { if ($e->getCode() == E_USER_ERROR) { echo $e->getMessage(); } else { throw $e; } } }
function handle(&$params) { try { $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); if (isset($query['-record-id'])) { //todo fix the php notice here. Undefined index: -record-id $selectedRecord = df_get_record_by_id($query['-record-id']); echo $selectedRecord->val('website_id'); } else { $selectedRecords = df_get_selected_records($query); if (empty($selectedRecords)) { throw new Exception("No records specified"); } $record = $selectedRecords[0]; $websiteId = $record->val('website_id'); //ensure that all selectedRecords are for the same website foreach ($selectedRecords as $record) { if ($record->val('website_id') != $websiteId) { throw new Exception("All records must be from the same site.", E_USER_ERROR); } } //return the website id echo $websiteId; } } catch (Exception $e) { if ($e->getCode() == E_USER_ERROR) { echo $e->getMessage(); } else { throw $e; } } }
function handle(&$params) { $app =& Dataface_Application::getInstance(); $tt = new Dataface_TranslationTool(); if (!Dataface_Table::tableExists('dataface__translation_submissions', false)) { $tt->createTranslationSubmissionsTable(); header('Location: ' . $app->url('')); exit; } if (!@$_POST['--submit']) { df_display(array('query' => $app->getQuery(), 'success' => @$_REQUEST['--success']), 'Dataface_submit_translation.html'); exit; } else { if (@$_POST['subject']) { // This is a dummy field - possible hacking attempt header('Location: ' . $app->url('-action=list')); exit; } if (@$_POST['--recordid']) { $record = df_get_record_by_id($_POST['--recordid']); $values = array('record_id' => @$_POST['--recordid'], 'language' => @$_POST['--language'], 'url' => @$_POST['--url'], 'original_text' => @$_POST['--original_text'], 'translated_text' => @$_POST['--translated_text'], 'translated_by' => @$_POST['--translated_by']); $trec = new Dataface_Record('dataface__translation_submissions', array()); $trec->setValues($values); $trec->save(); $email = <<<END The following translation was submitted to the web site {$app->url('')}: Translation for record {$record->getTitle()} which can be viewed at {$record->getURL('-action=view')}. This translation was submitted by {$_POST['--translated_by']} after viewing the content at {$_POST['--url']}. The original text that was being translated is as follows: {$_POST['--original_text']} The translation proposed by this person is as follows: {$_POST['--translated_text']} For more details about this translation, please visit {$trec->getURL('-action=view')}. END; if (@$app->_conf['admin_email']) { mail($app->_conf['admin_email'], 'New translation submitted', $email); } if (@$_POST['--redirect'] || @$_POST['--url']) { $url = @$_POST['--redirect'] ? $_POST['--redirect'] : $_POST['--url']; header('Location: ' . $url . '&--msg=' . urlencode('Thank you for your submission.')); exit; } else { header('Location: ' . $app->url('') . '&--success=1&--msg=' . urlencode('Thank you for your submission.')); exit; } } else { trigger_error("No record id was provided", E_USER_ERROR); } } }
function handle(&$params) { $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); $record_id = $query['--record_id']; if (!$record_id) { trigger_error("No record id provided", E_USER_ERROR); } $record =& df_get_record_by_id($record_id); $fields =& $record->_table->fields(false, true); header('Content-type: text/json; charset=' . $app->_conf['oe']); //$out = ''; //$out .= '<table class="record-view-table"><tbody>'; $dl = array(); foreach ($fields as $field) { //if ( !$record->val($field['name']) ) continue; if (!$record->checkPermission('view', array('field' => $field['name']))) { continue; } if ($field['visibility']['browse'] == 'hidden') { continue; } $val = $record->htmlValue($field['name']); if (@$app->_conf['_prefs']['calendar.edit.inline'] and $record->checkPermission('edit', array('field' => $field['name'])) and in_array($field['name'], array_keys($record->_table->fields()))) { $class = 'df__editable_wrapper'; } else { $class = ''; } $dl[] = array('fielddef' => &$field, 'tdid' => 'td-' . rand(), 'value' => $val, 'tdclass' => $class); //$out .= '<tr><th>'.htmlspecialchars($field['widget']['label']).'</th><td id="td-'.rand().'" class="'.$class.'">'.$val.'</td></tr>'; unset($field); } //$out .= '</tbody></table>'; //import('Dataface/Ontology.php'); //Dataface_Ontology::registerType('Event', 'Dataface/Ontology/Event.php', 'Dataface_Ontology_Event'); //$ontology =& Dataface_Ontology::newOntology('Event', $query['-table']); //$event =& $ontology->newIndividual($record); ob_start(); df_display(array('fields' => &$dl, 'event' => &$record), 'Dataface_AjaxEventDetails.html'); $out = ob_get_contents(); ob_end_clean(); $response = array('record_id' => $record_id, 'details' => $out); import('Services/JSON.php'); $json = new Services_JSON(); echo $json->encode($response); exit; }
function handle($params) { $app = Dataface_Application::getInstance(); $query = $app->getQuery(); $record_id = @$_POST['--record_id']; try { if (!$record_id) { throw new Exception(df_translate('Bad Request', 'Bad Request. Missing parameter.'), self::BAD_REQUEST); } $record = df_get_record_by_id($record_id); if (PEAR::isError($record)) { error_log($record->getMessage()); throw new Exception(df_translate('Bad Request', 'Bad Request - invalid ID.'), self::BAD_REQUEST); } if (!$record) { throw new Exception(df_translate('No records matched request', 'No records matched the request'), self::NOT_FOUND); } if (!$record->checkPermission('delete')) { throw new Exception(df_translate('scripts.GLOBAL.MESSAGE.PERMISSION_DENIED', 'Permission Denied'), self::PERMISSION_DENIED); } $res = $record->delete(false); // We've already done a security check... if (PEAR::isError($res)) { error_log($res->getMessage()); throw new Exception(df_translate('actions.rest_delete.messages.SERVER_ERROR', 'Failed to delete record due to a server error. See error log for details.'), self::SERVER_ERROR); } $this->out(array('code' => 200, 'message' => df_translate('actions.rest_delete.messages.SUCCESS', 'Successfully deleted record.'), 'record_id' => $record->getId())); exit; } catch (Exception $ex) { switch ($ex->getCode()) { case self::PERMISSION_DENIED: case self::NOT_FOUND: case self::SERVER_ERROR: $msg = $ex->getMessage(); $code = $ex->getCode(); break; default: $msg = df_translate('actions.rest_delete.messages.SUCCESS', 'Successfully deleted record.'); $code = self::SERVER_ERROR; error_log($ex->getMessage()); break; } $this->out(array('code' => $code, 'message' => $msg)); exit; } }
function handle($params) { $app = Dataface_Application::getInstance(); $query = $app->getQuery(); if (!@$query['-record-id']) { throw new Exception("No record id was specified"); } $record = df_get_record_by_id($query['-record-id']); if (!isset($record) || !$record instanceof Dataface_Record) { throw new Exception("Record could not be found for the record id [" . $query['-record-id'] . "] that was specified"); } require_once 'inc/SweteJob.class.php'; $job = new SweteJob($record); $stats = $job->getStats(); $out = array('code' => 200, 'message' => 'Successfully retrieved job translation stats.', 'stats' => $stats); header('Content-type: text/json; charset="' . $app->_conf['oe'] . '"'); echo json_encode($out); return; }
function handle($params) { $app = Dataface_Application::getInstance(); $query =& $app->getQuery(); $related_record = df_get_record_by_id($query['-related-record-id']); if (!$related_record || PEAR::isError($related_record)) { $this->out_404(); } $app->_conf['orig_permissions'] = $related_record->_record->getPermissions(); Dataface_PermissionsTool::addContextMask($related_record); $perms = $related_record->getPermissions(); //print_r($perms);exit; if (!@$perms['view']) { return Dataface_Error::permissionDenied('You don\'t have permission to view this record.'); } $query['-relationship'] = $related_record->_relationship->getName(); Dataface_JavascriptTool::getInstance()->import('xataface/actions/view_related_record.js'); df_display(array('related_record' => $related_record), 'xataface/actions/view_related_record.html'); }
function handle($params) { $app = Dataface_Application::getInstance(); $query = $app->getQuery(); try { if (!@$_POST['--record_id']) { throw new Exception("No record ID specified"); } $record = df_get_record_by_id($_POST['--record_id']); if (!$record) { throw new Exception("Record could not be found.", 404); } $vals = array(); foreach ($query as $k => $v) { if ($k and $k[0] != '-') { $vals[$k] = $v; } } $record->setValues($vals); //print_r($record->getPermissions());exit; if (!$record->checkPermission('ajax_save')) { throw new Exception("Permission Denied", 502); } if ($record->recordChanged()) { $res = $record->save(null, true); if (PEAR::isError($res)) { error_log($res->getMessage(), $res->getCode()); throw new Exception("Failed to save record due to a server error. See log for details."); } $msg = 'Successfully saved record.'; } else { $msg = 'Record is unchanged.'; } $this->out(array('code' => 200, 'message' => $msg, 'recordId' => $record->getId())); } catch (Exception $ex) { $this->out(array('code' => $ex->getCode(), 'message' => $ex->getMessage())); } }
function handle(&$params) { session_write_close(); header('Connection: close'); $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); $table = $query['-table']; $ids = $query['-id']; $rec = null; if (!is_array($ids)) { $ids = array($ids); } $out = array(); foreach ($ids as $id) { if (preg_match('/^' . preg_quote($table, '/') . '\\?/', $id)) { // This is a record id $rec = df_get_record_by_id($id); } else { if (strpos($id, '=') !== false) { parse_str($id, $q); $rec = df_get_record($table, $q); } else { $keys = array_keys(Dataface_Table::loadTable($table)->keys()); $q = array($keys[0] => '=' . $id); $rec = df_get_record($table, $q); } } if ($rec) { header('Content-type: text/html; charset=' . $app->_conf['oe']); if ($rec->checkPermission('view')) { switch (strval(@$query['-text'])) { case '': case '__title__': $out[] = $rec->getTitle(); break; case '__json__': //header('Content-type: text/json; charset='.$app->_conf['oe']); $out[] = array_merge($rec->strvals(), array('__id__' => $rec->getId())); break; default: $out[] = $rec->display($query['-text']); break; } } else { return Dataface_Error::permissionDenied('You require view permission to access this record'); } } } if (count($out) == 0) { $out[] = ""; } if (count($out) < 2 and !is_array($query['-id']) and @$query['-return-type'] != 'array') { if (@$query['-text'] == '__json__') { header("Content-type: application/json; charset=" . $app->_conf['oe']); echo json_encode($out[0]); } else { echo $out[0]; } } else { header("Content-type: application/json; charset=" . $app->_conf['oe']); echo json_encode($out); } exit; }
public function loadRecord(xatacard_layout_Schema $schema, array $query) { if (isset($query['__id__'])) { $id = $query['__id__']; $res = $this->query(sprintf("select schema_id, base_record_id from `%s` where `id`=%d", str_replace('`', '', self::$RECORDS_TABLE), intval($id))); if (xf_db_num_rows($res) == 0) { return null; } else { $row = xf_db_fetch_assoc($res); if ($row['schema_id'] != $schema->getId()) { throw new Exception(sprintf("The record with id %d failed to load because it uses a different schema than expected. Expected schema id %d but found %d", intval($id), intval($schema->getId()), intval($row['schema_id']))); } $rec = df_get_record_by_id($row['base_record_id']); if (!$rec) { return null; } if (PEAR::isError($rec)) { throw new Exception(sprintf("Failed to load record is %d because there was problem loading its base record ('%s'): %s", intval($id), $row['base_record_id'], $rec->getMessage())); } return $this->buildRecord($schema, $rec); } } $tablename = $schema->getProperty('table'); if (!$tablename) { throw new Exception(sprintf("MySQL datasource cannot load a record from schema '%s' because the schema does not specify a table", $schema->getLabel())); } $rec = df_get_record($tablename, $query); if (PEAR::isError($rec)) { throw new Exception(sprintf("MySQL datasource failed to load a record for the given query because an error occurred: %s", $rec->toString())); } if (!$rec) { return null; } return $this->buildRecord($schema, $rec); }
function handle($params) { $app = Dataface_Application::getInstance(); if (!$_POST) { throw new Exception("Commit requires post"); } $data = @$_POST['--data']; if (!$data) { throw new Exception("No data provided"); } $data = json_decode($data, true); $updates = array(); $inserts = array(); $deletes = array(); if (isset($data['inserts'])) { $inserts =& $data['inserts']; } if (isset($data['updates'])) { $updates =& $data['updates']; } if (isset($data['deletes'])) { $deletes =& $data['deletes']; } $numFailures = 0; $numSuccesses = 0; $deleteResponses = array(); // Let's do the deletes first foreach ($deletes as $deleteInfo) { $response = array(); $deleteResponses[] =& $response; $record = df_get_record_by_id($deleteInfo['id']); if (!$record) { $response['message'] = 'Record ' . $deleteInfo['id'] . ' could not be found.'; $response['code'] = 404; $numFailures++; } else { $res = $response->delete(true); if (PEAR::isError($res)) { $response['message'] = $res->getMessage(); $response['code'] = $res->getCode(); $numFailures++; } else { $response['message'] = 'Deleted record ' . $deleteInfo['id'] . '.'; $response['code'] = 200; $response['recordId'] = $deleteInfo['id']; $numSuccesses++; } } } $insertResponses = array(); foreach ($inserts as $insertInfo) { $response = array(); $insertResponses[] =& $response; $record = new Dataface_Record($insertInfo['table'], array()); $record->setValues($insertInfo['data']); $res = $record->save(null, true); if (PEAR::isError($res)) { $response['message'] = $res->getMessage(); $response['code'] = $res->getCode(); $numFailures++; } else { $response['message'] = 'Inserted record'; $response['code'] = $res->getCode(); $response['recordId'] = $record->getId(); $response['version'] = $record->getVersion(); $numSuccesses++; } } $updateResponses = array(); foreach ($updates as $updateInfo) { $response = array(); $insertResponses[] =& $response; $record = df_get_record_by_id($updateInfo['id']); if (!$record) { $response['message'] = 'Record ' . $updateInfo['id'] . ' could not be found.'; $response['code'] = 404; $numFailures++; } else { $record->setValues($updateInfo['data']); $res = $record->save(null, true); if (PEAR::isError($res)) { $response['message'] = $res->getMessage(); $response['code'] = $res->getCode(); $numFailures++; } else { $response['message'] = 'Updated record'; $response['code'] = 200; $response['recordId'] = $record->getId(); $response['version'] = $record->getVersion(); $numSuccesses++; } } } header('Content-type: text/json; charset="' . $app->_conf['oe'] . '"'); $out = array('code' => ($numFailures == 0 and $numSuccesses > 0) ? 200 : $numSuccesses > 0 ? 201 : 202, 'message' => $numSuccesses . ' successes. ' . $numFailures . ' failures.', 'numSuccesses' => $numSuccesses, 'numFailures' => $numFailures, 'responses' => array('updates' => $updateResponses, 'inserts' => $insertResponses, 'deletes' => $deleteResponses)); echo json_encode($out); }
function handle(&$params) { try { // First get the selected records $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); if (!@$query['-record-id']) { throw new Exception("No record id was specified"); } $record = df_get_record_by_id($query['-record-id']); $isNewJob = false; //get the selected job if ($query['-job'] && is_numeric($query['-job'])) { $selectedJob = df_get_record('jobs', array('job_id' => '=' . $query['-job'])); } else { //no job was selected by user $site_id = $record->val('website_id'); $jobs = df_get_records_array('jobs', array('website_id' => $site_id, 'compiled' => 'false')); $createNewJob = false; if ($query['-job'] == "new") { $createNewJob = true; } if (count($jobs) == 0 || $createNewJob) { //create a new job $selectedJob = SweteJob::createJob(SweteSite::loadSiteById($site_id))->getRecord(); $isNewJob = true; } else { if (count($jobs) == 1) { //only one available job $selectedJob = $jobs[0]; } else { throw new Exception("No Job id was specified, but there are " . $count($jobs) . " available jobs to add to"); } } } if (!$selectedJob) { throw new Exception("Job could not be found", E_USER_ERROR); } if (!$selectedJob->checkPermission('edit')) { throw new Exception("You don't have permission to edit this job"); } $job = new SweteJob($selectedJob); if (intval($record->val('website_id')) !== intval($selectedJob->val("website_id"))) { throw new Exception("The string " . $record->val('string') . " is not in the same site as the job."); } //If string was already added to ANOTHER job, it doesn't matter //It will also be added to this one //if string was already added to this job, do nothing if (!$job->containsString($record->val('string'))) { $job->addTranslationMiss($record->val('translation_miss_log_id')); $results = array('stringAdded' => $record->val('translation_miss_log_id'), 'jobId' => $selectedJob->val('job_id'), 'isNewJob' => $isNewJob); } else { $results = array('stringAdded' => "false", 'jobId' => $selectedJob->val('job_id'), 'isNewJob' => $isNewJob); } echo json_encode($results); } catch (Exception $e) { if ($e->getCode() == E_USER_ERROR) { echo $e->getMessage(); } else { throw $e; } } }
function handle(&$params) { if (!isset($_POST['-redirect']) and !isset($_POST['relatedList-body'])) { return PEAR::raiseError('Cannot reorder related records because no redirect url was specified in the POST parameters.' . Dataface_Error::printStackTrace()); } $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); if (!($record = df_get_selected_records($query))) { $record =& $app->getRecord(); } else { $record = $record[0]; } if (PEAR::isError($record)) { return $record; } if (!$record) { return PEAR::raiseError('The specified record could not be found.'); } if (!@$query['-relationship']) { return PEAR::raiseError("No relationship specified."); } $relationship =& $record->_table->getRelationship($query['-relationship']); if (PEAR::isError($relationship)) { return $relationship; } $orderColumn = $relationship->getOrderColumn(); if (!$orderColumn) { return PEAR::raiseError('Could not reorder records of this relationship because it does not have any order column specified.'); } if (!Dataface_PermissionsTool::checkPermission('reorder_related_records', $record, array('relationship' => $query['-relationship']))) { return Dataface_Error::permissionDenied('You do not have permission to reorder the records in this relationship.'); } if (isset($_POST['relatedList-body'])) { $relatedIds = array_map('urldecode', $_POST['relatedList-body']); // In this case we are not just moving a record up or down the list, // we may be reordering the list altogether. // We may also just be ordering a subset of the list. // so we will want to be reordering the given set of records // with respect to each other. // First let's see if the ordering has been initialized yet. $records = array(); //print_r($relatedIds);exit; foreach ($relatedIds as $recid) { //$recid = urldecode($recid); $records[] = df_get_record_by_id($recid); } $start = isset($query['-related:start']) ? $query['-related:start'] : 0; $record->sortRelationship($query['-relationship'], $start, $records); echo 'Sorted Successfully'; exit; } if (!isset($_POST['-reorder:direction'])) { return PEAR::raiseError('Cannot reorder related records because no direction was specified.'); } if (!isset($_POST['-reorder:index'])) { return PEAR::raiseError('Cannot reorder related records because no index was specified.'); } $index = intval($_POST['-reorder:index']); switch ($_POST['-reorder:direction']) { case 'up': //echo "Moving up";exit; $res = $record->moveUp($query['-relationship'], $index); break; case 'down': $res = $record->moveDown($query['-relationship'], $index); break; default: return PEAR::raiseError('Invalid input for direction of reordering. Must be up or down but received "' . $_POST['-reorder:direction'] . '"'); } if (PEAR::isError($res)) { return $res; } header('Location: ' . $_POST['-redirect']); exit; }
function df_get_selected_records($query) { if (isset($query['--selected-ids'])) { $selected = $query['--selected-ids']; } else { if (isset($query['-selected-ids'])) { $selected = $query['-selected-ids']; } else { return array(); } } $ids = explode("\n", $selected); $records = array(); foreach ($ids as $id) { $records[] = df_get_record_by_id($id); } return $records; }
function handle($params) { session_write_close(); $app = Dataface_Application::getInstance(); $query = $app->getQuery(); try { if (@$query['--id']) { // This is a form for a particular record if (@$query['-relationship']) { // This is a related record form } else { // This is an edit form for a particular record $rec = df_get_record_by_id($query['--id']); if (!$rec) { throw new Exception("Record could not be found"); } if (PEAR::isError($rec)) { throw new Exception($rec->getMessage()); } if (!$rec->checkPermission('edit')) { throw new Exception("Failed to get edit form for record. Permission denied"); } $tableObj = $rec->_table; $fields = null; if (@$query['--fields']) { $fields = explode(',', $query['--fields']); } else { $temp = $tableObj->fields(false, false, true); $fields = array_keys($temp); } $form = array(); } } else { if (@$query['-table']) { // This is a new record form for a particular table $table = $query['-table']; $tableObj = Dataface_Table::loadTable($table); $tablePerms = $tableObj->getPermissions(); if (!@$tablePerms['new']) { throw new Exception("Failed to build form data because you do not have permission to create new records on this table."); } $fields = null; if (@$query['--fields']) { $fields = explode(',', $query['--fields']); } else { $temp = $tableObj->fields(false, false, true); $fields = array_keys($temp); } $form = array(); $defaults = array(); $valuelists = array(); if (!$fields) { throw new Exception("No fields were specified for the form."); } foreach ($fields as $f) { $perms = $tableObj->getPermissions(array('field' => $f)); if (!@$perms['new']) { // No permission to create 'new' data on this field. continue; } $data = $tableObj->getField($f); $form[$f] = array('widget' => $data['widget']); $defaults[$f] = $tableObj->getDefaultValue($f); if (@$data['vocabulary']) { $form[$f]['vocabulary'] = $data['vocabulary']; if (!isset($valuelists[$data['vocabulary']])) { $valuelists[$data['vocabulary']] = $tableObj->getValuelist($data['vocabulary']); } } if (@$data['validators']) { $form[$f]['validators'] = $data['validators']; } } $this->out(array('code' => 200, 'message' => 'Form successfully created', 'form' => $form, 'defaults' => $defaults, 'valuelists' => $valuelists)); exit; } else { throw new Exception("Invalid parameters for rest_form"); } } } catch (Exception $ex) { $this->out(array('code' => $ex->getCode(), 'message' => $ex->getMessage())); exit; } }
function saveRow($recordID, $row, $secure = false) { if (preg_match('/^[0-9]+$/', $recordID)) { // This is a new record - its id is only an integer $record = new Dataface_Record($this->tableName, array()); } else { $record =& df_get_record_by_id($recordID); } if (PEAR::isError($record)) { return $record; } if (!$record) { return PEAR::raiseError("The specified record could not be found: " . $recordID); } $localValues = array(); $relatedValues = array(); // Separate the local values from the related values foreach ($row as $key => $value) { $key = str_replace('-', '.', $key); if (strpos($key, '.') === false) { $localValues[$this->getFieldName($key)] = $value; } else { // We have the option of having different related values // so we need to split them up also. // This allows us to have the phone list($relationshipName, $fieldName) = explode('.', $key); $relatedValues[$relationshipName][$this->getFieldIndex($key)][$this->getFieldName($fieldName)] = $value; } } // Save the local values. $record->setValues($localValues); $res = $record->save(null, $secure); if (PEAR::isError($res)) { return $res; } // Now we save the related values. $errors = array(); foreach ($relatedValues as $relationshipName => $relatedRows) { foreach ($relatedRows as $rowNum => $rowValues) { $relatedRecords =& $record->getRelatedRecordObjects($relationshipName, $rowNum, 1); if (!$relatedRecords or PEAR::isError($relatedRecord)) { $relatedRecord = new Dataface_RelatedRecord($record, $relationshipName); } else { $relatedRecord = $relatedRecords[0]; } //echo 'Setting row values on related record:'; //print_r($rowValues); $relatedRecord->setValues($rowValues); //print_r($relatedRecord->getValues());exit; $res = $relatedRecord->save(null, $secure); if (PEAR::isError($res)) { $errors[] = $res; } unset($relatedRecord); } } if ($errors) { return $errors; } return $record; }
/** * @brief Returns the related record that forms a context for the specified * record id. A context is provided so that we can tell if a record * is being viewed through the lense of a related record. This can affect * things like the permissions, bread-crumbs, and other navigation items. * It allows us to tell where we are and where we came from. * * @param string $id The record ID to check for context. * @returns Dataface_RelatedRecord A related record that wraps the record in question. * @since 2.0 */ function getRecordContext($id = null) { if (!isset($this->recordContext)) { $this->recordContext = array(); $query = $this->getQuery(); if (@$query['-portal-context']) { $rrec = df_get_record_by_id($query['-portal-context']); if (PEAR::isError($rrec)) { $rrec = null; } if (is_a($rrec, 'Dataface_RelatedRecord')) { $destRecords = $rrec->toRecords(); foreach ($destRecords as $destRec) { $this->recordContext[$destRec->getId()] = $rrec; } } } } if (!isset($id)) { foreach ($this->recordContext as $rrec) { return $rrec; } } else { return @$this->recordContext[$id]; } }
function &getRecord() { $null = null; if ($this->currentRecord === null) { $query =& $this->getQuery(); if (@$query['--no-query']) { $null = null; return $null; } $q = array(); if (isset($_REQUEST['__keys__']) and is_array($_REQUEST['__keys__'])) { foreach ($_REQUEST['__keys__'] as $key => $val) { $q[$key] = '=' . $val; } $this->currentRecord = df_get_record($query['-table'], $q); } else { if (isset($_REQUEST['-__keys__']) and is_array($_REQUEST['-__keys__'])) { foreach ($_REQUEST['-__keys__'] as $key => $val) { $q[$key] = '=' . $val; } $this->currentRecord = df_get_record($query['-table'], $q); } else { if (isset($_REQUEST['--__keys__']) and is_array($_REQUEST['--__keys__'])) { foreach ($_REQUEST['--__keys__'] as $key => $val) { $q[$key] = '=' . $val; } $this->currentRecord = df_get_record($query['-table'], $q); } else { if (isset($_REQUEST['--recordid'])) { $this->currentRecord = df_get_record_by_id($_REQUEST['--recordid']); } else { if (isset($_REQUEST['-recordid'])) { $this->currentRecord = df_get_record_by_id($_REQUEST['-recordid']); } else { $rs = $this->getResultSet(); $this->currentRecord = $rs->loadCurrent(); } } } } } if ($this->currentRecord === null) { $this->currentRecord = -1; } } if ($this->currentRecord === -1 || !$this->currentRecord) { return $null; } return $this->currentRecord; }
public function refresh() { error_log("Refreshing ...."); error_log($this->_rec->getId()); $this->_rec = df_get_record_by_id($this->_rec->getId()); }
/** * Adds an existing record to a relationship. * @param $record a Dataface_RelatedRecord object to be added. */ function addExistingRelatedRecord(&$record, $secure = false) { if ($secure && !$record->_record->checkPermission('add existing related record', array('relationship' => $record->_relationshipName))) { // Use security to check to see if we are allowed to delete this // record. //print_r( $record->_record->getPermissions(array('relationship'=>$record->_relationshipName)));exit; //echo $record->_record->_table->getDelegate()->getRoles($record->_record); //print_r($record->_record->vals());exit; return Dataface_Error::permissionDenied(df_translate('scripts.Dataface.IO.addExistingRelatedRecord.PERMISSION_DENIED', 'Could not add record "' . $record->getTitle() . '" to relationship "' . $record->_relationshipName . '" of record "' . $record->_record->getTitle() . '" because you have insufficient permissions.', array('title' => $record->getTitle(), 'relationship' => $record->_relationshipName, 'parent' => $record->_record->getTitle()))); } $builder = new Dataface_QueryBuilder($this->_table->tablename); //We are often missing the values from the domain table so we will load them //here $domainRec = $record->toRecord($record->_relationship->getDomainTable()); $domainRec2 = df_get_record_by_id($domainRec->getId()); //$record->setValues(array_merge($domainRec2->vals(), $record->vals())); foreach ($domainRec2->vals() as $dreckey => $drecval) { if (!$record->val($dreckey)) { $record->setValue($dreckey, $drecval); } } // fire the "before" events if ($this->fireTriggers) { $res = $this->fireBeforeAddRelatedRecord($record); if (PEAR::isError($res)) { return $res; } $res = $this->fireBeforeAddExistingRelatedRecord($record); if (PEAR::isError($res)) { return $res; } } // It makes sense for us to fire beforeSave, afterSave, beforeInsert, and afterInsert // events here for the records that are being inserted. To do this we will need to extract // Dataface_Record objects for all of the tables that will have records inserted. In this // case we are not updated any records because relationships are created by adding a record // to the join table. This means that we are also NOT adding a record to the domain table. // i.e., we should only fire these events for the join table. $drecords =& $record->toRecords(); // $drecords is an array of Dataface_Record objects if (count($drecords) > 1) { // If there is only one record then it is for the domain table - which we don't actually // change. foreach (array_keys($drecords) as $recordIndex) { $currentRecord =& $drecords[$recordIndex]; if (isset($this->insertids[$currentRecord->_table->tablename])) { $idfield =& $currentRecord->_table->getAutoIncrementField(); if ($idfield) { $currentRecord->setValue($idfield, $this->insertids[$currentRecord->_table->tablename]); } unset($idfield); } unset($currentRecord); if ($drecords[$recordIndex]->_table->tablename === $record->_relationship->getDomainTable()) { continue; } // We don't do anything for the domain table because it is not being updated. $rio = new Dataface_IO($drecords[$recordIndex]->_table->tablename); $drec_snapshot = $drecords[$recordIndex]->strvals(); $res = $rio->fireBeforeSave($drecords[$recordIndex]); if (PEAR::isError($res)) { return $res; } $res = $rio->fireBeforeInsert($drecords[$recordIndex]); if (PEAR::isError($res)) { return $res; } $drec_post_snapshot = $drecords[$recordIndex]->strvals(); foreach ($drec_post_snapshot as $ss_key => $ss_val) { if ($drec_snapshot[$ss_key] != $ss_val) { $drecords[$recordIndex]->setValue($ss_key, $ss_val); } } unset($drec_post_snapshot); unset($drec_snapshot); unset($rio); } } if (count($drecords) > 1) { $sql = $builder->addExistingRelatedRecord($record); if (PEAR::isError($sql)) { return $sql; } // Actually add the related record $res = $this->performSQL($sql); if (PEAR::isError($res)) { return $res; } // If there is only one record then it is for the domain table - which we don't actually // change. foreach (array_keys($drecords) as $recordIndex) { if ($drecords[$recordIndex]->_table->tablename === $record->_relationship->getDomainTable()) { continue; } // We don't do anything for the domain table because it is not being updated. $rio = new Dataface_IO($drecords[$recordIndex]->_table->tablename); $res = $rio->fireAfterInsert($drecords[$recordIndex]); if (PEAR::isError($res)) { return $res; } $res = $rio->fireAfterSave($drecords[$recordIndex]); if (PEAR::isError($res)) { return $res; } unset($rio); } } else { // This is a one to many relationship. We will handle this case // only when the foreign key is currently null. Otherwise we return // and error. $fkeys = $record->_relationship->getForeignKeyValues(); $fkeyvals = $record->getForeignKeyValues(); //print_r($fkeyvals);exit; if (isset($fkeys[$domainRec2->_table->tablename])) { $drecid = $domainRec2->getId(); unset($domainRec2); $domainRec2 = df_get_record_by_id($drecid); if (!$domainRec2) { return PEAR::raiseError("Tried to get record with id {$drecid} but it doesn't exist"); } else { if (PEAR::isError($domainRec2)) { return $domainRec2; } } foreach (array_keys($fkeys[$domainRec2->_table->tablename]) as $fkey) { //echo $fkey; if ($domainRec2->val($fkey)) { return PEAR::raiseError("Could not add existing related record '" . $domainRec2->getTitle() . "' because it can only belong to a single relationship and it already belongs to one."); } else { $domainRec2->setValue($fkey, $fkeyvals[$domainRec2->_table->tablename][$fkey]); } } //echo "About to save record";exit; $res = $domainRec2->save($secure); if (PEAR::raiseError($res)) { return $res; } } else { return PEAR::raiseError("Failed to add existing record because the domain table doesn't have any foreign keys in it."); } } // Fire the "after" events if ($this->fireTriggers) { $res2 = $this->fireAfterAddExistingRelatedRecord($record); if (PEAR::isError($res2)) { return $res2; } $res2 = $this->fireAfterAddRelatedRecord($record); if (PEAR::isError($res2)) { return $res2; } } return $res; }
function commit(&$grid) { $columnnames = array_keys($grid->columns); if ($this->recordid == '__new__') { // this is a new record - so we must create a new one. $parentObj =& $grid->getParentObject(); if (is_a($parentObj, 'Dataface_Table')) { $record = new Dataface_Record($parentObj->tablename, array()); } else { $record = new Dataface_RelatedRecord($parentObj, $grid->relationship, array()); } } else { $record =& df_get_record_by_id($this->recordid); } $rowdata =& $grid->data[$this->rowid]; $savedata = array(); foreach ($this->params['cells'] as $key) { $savedata[$key] = $rowdata[$key]; } $record->setValues($savedata); if ($this->recordid == '__new__' and is_a($record, 'Dataface_RelatedRecord')) { import('Dataface/IO.php'); $io = new Dataface_IO($parentObj->_table->tablename); $io->addRelatedRecord($record); } else { $record->save(); } }