Exemplo n.º 1
0
 public static function process($objectID = NULL, $fieldname = NULL, $state = 1, $returnArray = FALSE)
 {
     if ((string) $state != "1" && (string) $state != "3") {
         errorHandle::newError(__METHOD__ . "() - Invalid state provided: " . $state, errorHandle::DEBUG);
         return FALSE;
     }
     // was a valid objectID provided
     if (!isnull($objectID) && validate::integer($objectID)) {
         $objectWhere = sprintf(" AND `objectID`='%s'", mfcs::$engine->openDB->escape($objectID));
     } else {
         if (!isnull($objectID) && !validate::integer($objectID)) {
             errorHandle::newError(__METHOD__ . "() - Invalid Object ID: " . $objectID, errorHandle::DEBUG);
             return FALSE;
         } else {
             $objectWhere = "";
         }
     }
     // was a valid fieldname provided
     if (!isnull($fieldname) && is_string($fieldname)) {
         $fieldnameWhere = sprintf(" AND `fieldName`='%s'", mfcs::$engine->openDB->escape($fieldname));
     } else {
         $fieldnameWhere = "";
     }
     $sql = sprintf("SELECT * FROM `objectProcessing` WHERE `objectProcessing`.`state`='%s'%s%s", mfcs::$engine->openDB->escape($state), $objectWhere, $fieldnameWhere);
     $sqlResult = mfcs::$engine->openDB->query($sql);
     // I'm not sure about database transactions here
     // We are modifying the file system (exports). transaction rollbacks would
     // have to be done on the file system as well.
     while ($row = mysql_fetch_array($sqlResult['result'], MYSQL_ASSOC)) {
         // set the state of the row to 2
         self::setProcessingState($row['ID'], 2);
         // get the object, and ignore the cache since we are updating in a loop
         $object = objects::get($row['objectID'], TRUE);
         $files = $object['data'][$row['fieldName']];
         $assetsID = $files['uuid'];
         $fieldOptions = forms::getField($object['formID'], $row['fieldName']);
         // do we need to do any processing?
         // @TODO, i don't like how these are hard coded
         $combine = str2bool($fieldOptions['combine']);
         $convert = str2bool($fieldOptions['convert']);
         $ocr = str2bool($fieldOptions['ocr']);
         $thumbnail = str2bool($fieldOptions['thumbnail']);
         $mp3 = str2bool($fieldOptions['mp3']);
         if (!$combine && !$convert && !$ocr && !$thumbnail && !$mp3) {
             self::setProcessingState($row['ID'], 0);
             continue;
         }
         $processedFiles = self::processObjectFiles($assetsID, $fieldOptions);
         $files['files'] = array_merge($files['files'], $processedFiles);
         $object['data'][$row['fieldName']] = $files;
         $return = objects::update($objectID, $object['formID'], $object['data'], $object['metadata'], $object['parentID']);
         // @TODO this return value isn't descriptive enough. It can fail and still
         // return a valid array. we likely need to return an array with an error
         // code as well as the array to save to the data
         if (!$return) {
             $setRowValue = 3;
         } else {
             $setRowValue = 0;
         }
         // Processing is done, set state to 0
         self::setProcessingState($row['ID'], $setRowValue);
         if ($returnArray === TRUE) {
             return $object['data'][$row['fieldName']];
         }
     }
     return TRUE;
 }
Exemplo n.º 2
0
 public static function submit($formID, $objectID = NULL, $importing = FALSE)
 {
     $engine = mfcs::$engine;
     $backgroundProcessing = array();
     if (isnull($objectID)) {
         $newObject = TRUE;
     } else {
         $newObject = FALSE;
     }
     // Get the current Form
     if (($form = self::get($formID)) === FALSE) {
         errorHandle::newError(__METHOD__ . "() - retrieving form by formID", errorHandle::DEBUG);
         return FALSE;
     }
     // the form is an object form, make sure that it has an ID field defined.
     // @TODO this check can probably be removed, its being checked in object class
     if ($form['metadata'] == "0") {
         $idnoInfo = self::getFormIDInfo($formID);
         if ($idnoInfo === FALSE) {
             errorHandle::newError(__METHOD__ . "() - no IDNO field for object form.", errorHandle::DEBUG);
             return FALSE;
         }
     }
     $fields = $form['fields'];
     if (usort($fields, 'sortFieldsByPosition') !== TRUE) {
         errorHandle::newError(__METHOD__ . "() - usort", errorHandle::DEBUG);
         if (!$importing) {
             errorHandle::errorMsg("Error retrieving form.");
         }
         return FALSE;
     }
     $values = array();
     // go through all the fields, get their values
     foreach ($fields as $field) {
         $value = isset($engine->cleanPost['RAW'][$field['name']]) ? $engine->cleanPost['RAW'][$field['name']] : "";
         $validationTests = self::validateSubmission($formID, $field, $value, $objectID);
         if (isnull($validationTests) || $validationTests === FALSE) {
             continue;
         }
         if (strtolower($field['readonly']) == "true") {
             // need to pull the data that loaded with the form
             if ($newObject === FALSE) {
                 // grab it from the database
                 $oldObject = objects::get($objectID);
                 $values[$field['name']] = $oldObject['data'][$field['name']];
             } else {
                 // If the form has a variable in the value we apply the variable, otherwise, field value.
                 // we need to check for disabled on insert form
                 if (!isset($field['disabledInsert']) || isset($field['disabledInsert']) && $field['disabledInsert'] == "false") {
                     $values[$field['name']] = self::hasFieldVariables($field['value']) ? self::applyFieldVariables($value) : $field['value'];
                 }
                 // grab the default value from the form.
                 // $values[$field['name']] = $field['value'];
             }
         } else {
             if (strtolower($field['type']) == "file" && isset($engine->cleanPost['MYSQL'][$field['name']])) {
                 // Process uploaded files
                 $uploadID = $engine->cleanPost['MYSQL'][$field['name']];
                 // Process the uploads and put them into their archival locations
                 if (($tmpArray = files::processObjectUploads($objectID, $uploadID)) === FALSE) {
                     errorHandle::newError(__METHOD__ . "() - Archival Location", errorHandle::DEBUG);
                     return FALSE;
                 }
                 if ($tmpArray !== TRUE) {
                     // didn't generate a proper uuid for the items, rollback
                     if (!isset($tmpArray['uuid'])) {
                         $engine->openDB->transRollback();
                         $engine->openDB->transEnd();
                         errorHandle::newError(__METHOD__ . "() - No UUID", errorHandle::DEBUG);
                         return FALSE;
                     }
                     // ads this field to the files object
                     // we can't do inserts yet because we don't have the objectID on
                     // new objects
                     files::addProcessingField($field['name']);
                     // Should the files be processed now or later?
                     if (isset($field['bgProcessing']) && str2bool($field['bgProcessing']) === TRUE) {
                         $backgroundProcessing[$field['name']] = TRUE;
                     } else {
                         $backgroundProcessing[$field['name']] = FALSE;
                     }
                     $values[$field['name']] = $tmpArray;
                 } else {
                     // if we don't have files, and this is an update, we need to pull the files information from the
                     // version that is already in the system.
                     $oldObject = objects::get($objectID);
                     if ($newObject === FALSE && objects::hasFiles($objectID, $field['name']) === TRUE) {
                         $values[$field['name']] = $oldObject['data'][$field['name']];
                     }
                 }
             } else {
                 $values[$field['name']] = $value;
             }
         }
     }
     if (isset($engine->errorStack['error']) && count($engine->errorStack['error']) > 0) {
         // errorHandle::newError(__METHOD__."() - Error stack not empty.", errorHandle::DEBUG);
         return FALSE;
     }
     // start transactions
     $result = $engine->openDB->transBegin("objects");
     if ($result !== TRUE) {
         if (!$importing) {
             errorHandle::errorMsg("Database transactions could not begin.");
         }
         errorHandle::newError(__METHOD__ . "() - unable to start database transactions", errorHandle::DEBUG);
         return FALSE;
     }
     if ($newObject === TRUE) {
         if (objects::create($formID, $values, $form['metadata'], isset($engine->cleanPost['MYSQL']['parentID']) ? $engine->cleanPost['MYSQL']['parentID'] : "0") === FALSE) {
             $engine->openDB->transRollback();
             $engine->openDB->transEnd();
             if (!$importing) {
                 errorHandle::errorMsg("Error inserting new object.");
             }
             errorHandle::newError(__METHOD__ . "() - Error inserting new object.", errorHandle::DEBUG);
             return FALSE;
         }
         // Grab the objectID of the new object
         $objectID = localvars::get("newObjectID");
     } else {
         if (objects::update($objectID, $formID, $values, $form['metadata'], isset($engine->cleanPost['MYSQL']['parentID']) ? $engine->cleanPost['MYSQL']['parentID'] : "0") === FALSE) {
             $engine->openDB->transRollback();
             $engine->openDB->transEnd();
             if (!$importing) {
                 errorHandle::errorMsg("Error updating.");
             }
             errorHandle::newError(__METHOD__ . "() - Error updating.", errorHandle::DEBUG);
             return FALSE;
         }
     }
     // Now that we have a valid objectID, we insert into the processing table
     if (files::insertIntoProcessingTable($objectID) === FALSE) {
         $engine->openDB->transRollback();
         $engine->openDB->transEnd();
         errorHandle::newError(__METHOD__ . "() - Processing Table", errorHandle::DEBUG);
         return FALSE;
     }
     // end transactions
     $engine->openDB->transCommit();
     $engine->openDB->transEnd();
     if (!is_empty($backgroundProcessing)) {
         foreach ($backgroundProcessing as $fieldName => $V) {
             if ($V === FALSE) {
                 // No background processing. do it now.
                 files::process($objectID, $fieldName);
             }
         }
     }
     if ($newObject === TRUE) {
         if (!$importing) {
             errorHandle::successMsg("Object created successfully.");
         }
     } else {
         if (!$importing) {
             errorHandle::successMsg("Object updated successfully.");
         }
     }
     return TRUE;
 }
Exemplo n.º 3
0
 $form = forms::get($object['formID']);
 $fields = $form['fields'];
 if (mfcsPerms::isEditor($form['ID']) === FALSE) {
     throw new Exception("Permission Denied to view objects created with this form.");
 }
 log::insert("Data Entry: Revision: View Page", $objectID);
 ###############################################################################################################
 // Catch a form submition (which would be a revision being reverted to)
 if (isset($engine->cleanPost['MYSQL']['revisionID'])) {
     log::insert("Data Entry: Revision: Revert", $objectID);
     // @TODO this should use revert2Revision() method instead of this ...
     $revisionID = $revisions->getRevisionID($engine->cleanGet['MYSQL']['objectID'], $engine->cleanPost['MYSQL']['revisionID']);
     if (($revision = $revisions->getMetadataForID($revisionID)) === FALSE) {
         throw new Exception('Could not load revision.');
     }
     if (objects::update($engine->cleanGet['MYSQL']['objectID'], $revision['formID'], decodeFields($revision['data']), $revision['metadata'], $revision['parentID']) !== FALSE) {
         // Reload the object - To refresh the data
         $object = objects::get($objectID, TRUE);
     } else {
         throw new Exception('Could not update object with revision.');
     }
 }
 ###############################################################################################################
 // Is this just a revision AJAX request?
 if (isset($engine->cleanGet['MYSQL']['revisionID'])) {
     $revisionID = $revisions->getRevisionID($engine->cleanGet['MYSQL']['objectID'], $engine->cleanGet['MYSQL']['revisionID']);
     $revision = $revisions->getMetadataForID($revisionID);
     if (!$revision) {
         die('Error reading revision');
     } else {
         die(revisions::generateFieldDisplay($revision, $fields));