Example #1
0
 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;
         }
     }
 }
Example #4
0
    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);
            }
        }
    }
Example #5
0
 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;
 }
Example #6
0
 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;
     }
 }
Example #7
0
 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');
 }
Example #9
0
 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;
 }
Example #11
0
 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);
 }
Example #12
0
 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;
         }
     }
 }
Example #14
0
 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;
 }
Example #15
0
 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;
 }
Example #16
0
 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;
     }
 }
Example #17
0
 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;
 }
Example #18
0
 /**
  * @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];
     }
 }
Example #19
0
 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;
 }
Example #20
0
 public function refresh()
 {
     error_log("Refreshing ....");
     error_log($this->_rec->getId());
     $this->_rec = df_get_record_by_id($this->_rec->getId());
 }
Example #21
0
File: IO.php Project: promoso/HVAC
 /**
  * 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;
 }
Example #22
0
 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();
     }
 }