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) { try { $app = Dataface_Application::getInstance(); $query = $app->getQuery(); $selectedRecords = df_get_selected_records($query); $isNewJob = false; 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 = $selectedRecords[0]->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); $stringsAdded = array(); foreach ($selectedRecords as $record) { 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')); array_push($stringsAdded, $record->val('string')); } } $results = array('stringsAdded' => $stringsAdded, '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) { $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); $records = df_get_selected_records($query); if (!$records) { if ($query['-mode'] == 'list') { $records = df_get_records_array($query['-table'], $query); } else { $records = array($app->getRecord()); } } $out = array(); if (isset($query['--fields'])) { $fields = explode(' ', $query['--fields']); } else { $fields = null; } foreach ($records as $record) { if (!$record->checkPermission('export_json')) { continue; } if (is_array($fields)) { $allowed_fields = array(); foreach ($fields as $field) { if (!$record->checkPermission('export_json', array('field' => $field))) { continue; } $allowed_fields[] = $field; } } else { $allowed_fields = null; } $out[] = $record->vals($allowed_fields); } import('Services/JSON.php'); $json = new Services_JSON(); $enc_out = $json->encode($out); header('Content-type: application/json; charset=' . $app->_conf['oe']); echo $enc_out; exit; }
function handle($params) { @session_write_close(); header('Connection:close'); import('inc/SweteWebpage.class.php'); $app = Dataface_Application::getInstance(); $query = $app->getQuery(); $records = df_get_selected_records($query); $errors = array(); $failed = 0; $success = 0; if ($records) { foreach ($records as $rec) { if ($rec->table()->tablename != 'webpages') { continue; } if (!$rec->checkPermission('swete:approve page')) { $errors[] = $rec->getTitle() . ' could not be approved because you don\'t have permission.'; $failed++; continue; } $site = $this->getSite($rec->val('website_id')); $username = ''; $user = SweteTools::getUser(); if ($user) { $username = $user->val('username'); } $wp = new SweteWebpage($rec); $twp = $wp->getTranslation($site->getDestinationLanguage()); try { $res = $twp->setStatus(SweteWebpage::STATUS_APPROVED, $username, @$_POST['--comments']); $success++; } catch (Exception $ex) { error_log($ex->getMessage()); $errors[] = 'Failed to approve page ' . $rec->getTitle() . '. See error log for details.'; $failed++; } } } header('Content-type: text/json; charset="' . $app->_conf['oe'] . '"'); echo json_encode(array('code' => 200, 'failed' => $failed, 'success' => $success, 'errors' => $errors)); }
function handle(&$params) { if (!$_POST) { return PEAR::raiseError("This method is only available via POST"); } $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); $records = df_get_selected_records($query); $updated = 0; $errs = array(); foreach ($records as $rec) { if (!$rec->checkPermission('delete')) { $errStr = df_translate("actions.delete_selected.permission_denied", "You do not have permission to delete '%s' because you do not have the 'delete' permission."); $errs[] = sprintf($errStr, $rec->getTitle()); continue; } $res = $rec->delete(true); if (PEAR::isError($res)) { $errs[] = $res->getMessage(); } else { $updated++; } } if ($errs) { $_SESSION['--msg'] = df_translate('Errors Occurred', 'Errors Occurred') . ':<br/> ' . implode('<br/> ', $errs); } else { $_SESSION['--msg'] = df_translate('No errors occurred', "No errors occurred"); } $url = $app->url('-action=list'); if (@$_POST['--redirect']) { $url = base64_decode($_POST['--redirect']); } $msgStr = df_translate('x records were deleted', '%d records were deleted.'); $msgStr = sprintf($msgStr, $updated); $url .= '&--msg=' . urlencode($msgStr); $app->redirect($url); }
function handle(&$params) { if (!$_POST) { return PEAR::raiseError("This method is only available via POST"); } $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); $records = df_get_selected_records($query); //print_r(array_keys($records));exit; $updated = 0; $errs = array(); foreach ($records as $rec) { if (!$rec->checkPermission('delete')) { $errs[] = Dataface_Error::permissionDenied("You do not have permission to delete '" . $rec->getTitle() . "' because you do not have the 'delete' permission."); continue; } $res = $rec->delete(true); if (PEAR::isError($res)) { $errs[] = $res->getMessage(); } else { $updated++; } } if ($errs) { $_SESSION['--msg'] = 'Errors Occurred:<br/> ' . implode('<br/> ', $errs); } else { $_SESSION['--msg'] = "No errors occurred"; } $url = $app->url('-action=list'); if (@$_POST['--redirect']) { $url = base64_decode($_POST['--redirect']); } $url .= '&--msg=' . urlencode($updated . ' records were deleted.'); header('Location: ' . $url); exit; }
/** * Returns an array of the selected records. */ function &getSelectedRecords() { if (!isset($this->records)) { $this->records = df_get_selected_records($this->query); } return $this->records; }
function handle($params) { session_write_close(); while (@ob_end_clean()) { } set_time_limit(0); header('Connection: Keep-Alive'); header("Cache-Control: no-cache, must-revalidate"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); flush(); echo <<<END <!doctype html> <html> \t<head> \t\t<title>Batch Google Translate</title> \t</head> \t<body> END; flush(); for ($i = 0; $i < 20; $i++) { echo " "; } flush(); require_once 'modules/tm/lib/googleTranslatePlugin.php'; require_once 'modules/tm/lib/XFTranslationMemory.php'; $app = Dataface_Application::getInstance(); $query = $app->getQuery(); $strings = df_get_selected_records($query); $errors = array(); $translated = array(); $googleCodes = array(); $res = df_q("select language_code, google_language_code from languages"); while ($row = mysql_fetch_row($res)) { $googleCodes[$row[0]] = $row[1] ? $row[1] : $row[0]; } @mysql_free_result($res); $i = 1; foreach ($strings as $string) { $site = $this->getSite($string->val('website_id')); $encString = TMTools::encode($string->val('string'), $garbage); $compiledString = $this->compileString($encString); echo "<script>progressBar.progressbar('option','value'," . ceil(floatval($i) / floatval(count($strings))) . ");\n\t\t\t\tprogressLabel.text('Processing ['+" . json_encode($encString) . ".substring(0,30)+'...]');\n\t\t\t\tsuccessMarker.text(" . count($translated) . ");\n\t\t\t\tfailedMarker.text(" . count($errors) . ");\n\t\t\t</script>"; flush(); if (!$site) { $errors[] = $err = "The string [" . $encString . "] could not be translated because the site with id " . $string->val('website_id') . " could not be found."; echo "<script>progressLog.val(progressLog.val()+'\\n-------\\n'+" . json_encode($err) . ");</script>"; flush(); continue; } if (!$site->checkPermission('google translate')) { $errors[] = $err = "The string [" . $encString . "] could not be translated because you don't have permission."; echo "<script>progressLog.val(progressLog.val()+'\\n------\\n'+" . json_encode($err) . ");</script>"; flush(); continue; } $apiKey = $site->val('google_api_key'); if (!$apiKey) { $errors[] = $err = "The string [" . $encString . "] could not be translated because the site that it belongs to does not have a Google API key set."; echo "<script>progressLog.val(progressLog.val()+'\\n-------\\n'+" . json_encode($err) . ");</script>"; flush(); continue; } $sourceCode = $string->val('source_language'); $destCode = $string->val('destination_language'); $gtp = new googleTranslatePlugin($googleCodes[$sourceCode], $googleCodes[$destCode]); $gtp->setGoogleAPIKey($apiKey); //echo $compiledString;exit; $gtp->addSourceString($compiledString); try { $translations = $gtp->getTranslations(); } catch (Exception $ex) { $errors[] = $err = "Failed to translate string [" . $string->val('encoded_string') . "] due to a google translate error: " . $ex->getMessage(); echo "<script>progressLog.val(progressLog.val()+'\\n-----\\n'+" . json_encode($err) . ");</script>"; flush(); continue; } if (!isset($translations[$compiledString])) { $errors[] = $err = "Failed to translate string [" . $encString . "]. The string returned null after translation."; echo "<script>progressLog.val(progressLog.val()+'\\n-------\\n'+" . json_encode($err) . ");</script>"; flush(); continue; } $tm = $this->getTranslationMemory($site->val('translation_memory_id')); $trString = $this->uncompileString($translations[$compiledString]); //echo $trString;exit; $tm->setTranslationStatus($encString, $trString, XFTranslationMemory::TRANSLATION_SUBMITTED, 'Google'); $translated[$encString] = $trString; } echo "<script> progressBar.progressbar('option','value',100);\n\t\tprogressLabel.text(" . json_encode('Translated ' . count($translated) . ' strings successfully. ' . count($errors) . ' errors.') . ");\n\t\tsuccessMarker.text(" . count($translated) . ");\n\t\tfailedMarker.text(" . count($errors) . ");\n\t\t</script>"; flush(); /* $out = array( 'translated' => $translated, 'errors' => $errors, 'code' => 200, 'message' => 'Translated '.count($translated).' strings successfully. '.count($errors).' errors.' ); $this->out($out); */ exit; }
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 process($values) { $app =& Dataface_Application::getInstance(); import('Dataface/CopyTool.php'); $copyTool =& Dataface_CopyTool::getInstance(); $query =& $app->getQuery(); //if ( @$values['-copy_replace:copy'] ){ //} $orig_replacements = $values['-copy_replace_form:replace']; $update_fields = explode('-', $values['-copy_replace:fields']); //print_r($update_fields); $replacements = array(); foreach ($update_fields as $fld) { if (!$fld) { continue; } $replacements[$fld] = $orig_replacements[$fld]; } $blanks = @$_POST['-copy_replace:blank_flag']; if (!$blanks) { $blanks = array(); } foreach ($blanks as $key => $val) { if ($val) { $replacements[$key] = null; } } if (!is_array($replacements)) { return PEAR::raiseError(df_translate('actions.copy_replace.no_fields_selected_to_change', "No fields were selected to change.")); } $records = df_get_selected_records($query); if (count($records) == 0) { $q = $query; $q['-limit'] = 99999; $q['-skip'] = 0; $records =& df_get_records_array($q['-table'], $q); } $fields = $this->getFieldsForRecord($records[0]); $dummyForm =& $this->getTableForm($query['-table']); foreach ($replacements as $key => $val) { $dummyForm =& $this->getTableForm($fields[$key]['tablename']); if (strpos($val, '=') === 0) { // This is a calculated change so we don't try to push the value // we'll let it go through continue; } $val = $dummyForm->pushValue($key, $metaValues, $this->form->getElement('-copy_replace_form:replace[' . $key . ']')); //echo $val;//)); // if ($val === '' and !@$blanks[$key]) { unset($replacements[$key]); } else { $replacements[$key] = $val; } unset($dummyForm); } $warnings = array(); $messages = array(); foreach ($records as $record) { if (@$values['-copy_replace:copy']) { // We are performing a copy. $relatedRecord = null; // This is a hack fix. It should work with 1:n relationships // but will probably fail for n:m relationships. if (is_a($record, 'Dataface_RelatedRecord')) { $relatedRecord = $record; $record = $record->toRecord(); } $res = $copyTool->copy($record, $replacements); if (PEAR::isError($res)) { $warnings[] = $res; } else { $messages[] = sprintf(df_translate('actions.copy_replace.successfully_copied_record_x_as_record_y', "Successfully copied record '%s' as record '%s'"), $record->getTitle(), $res->getTitle()); } $warnings = array_merge($warnings, $copyTool->warnings); } else { if (!$record->checkPermission('edit')) { $warnings[] = Dataface_Error::permissionDenied(sprintf(df_translate('actions.copy_replace.could_not_update_record_x_insufficient_permissions', "Could not update record '%s' because of insufficient permissions."), $record->getTitle())); continue; } $failed = false; foreach ($replacements as $key => $val) { if (!$record->checkPermission('edit', array('field' => $key))) { $warnings[] = Dataface_Error::permissionDenied(sprintf(df_translate('actions.copy_replace.could_not_update_record_x_insufficient_permissions_on_field_y', "Could not update record '%s' because of insufficient permissions on field '%s'."), $record->getTitle(), $key)); $failed = true; } } if ($failed) { continue; } foreach ($replacements as $k => $v) { if (strpos($v, '=') === 0) { $replacements[$k] = $copyTool->evaluate($v, $k, $record); } } $record->setValues($replacements); $res = $record->save(); if (PEAR::isError($res)) { $warnings[] = $res; } else { $messages[] = sprintf(df_translate('actions.copy_replace.successfully_updated_title', "Successfully updated '%s'"), $record->getTitle()); } } unset($record); } if (@$values['-copy_replace:copy']) { $action = 'copied'; } else { $action = 'updated'; } $this->message = sprintf(df_translate('actions.copy_replace.x_records_y_successfully_count_warnings', '%d records %s successfully. %d warnings.'), count($messages), df_translate($action, $action), count($warnings)); //$this->message = count($messages).' records '.$action.' successfully. '.count($warnings).' warnings.'; if (count($warnings)) { $warning_msgs = array(); foreach ($warnings as $warning) { $warning_msgs[] = $warning->getMessage(); } } else { $warning_msgs = array(); } //print_r($warning_msgs); $this->message .= '<br>' . implode('<br>', $warning_msgs); return true; }
function handle(&$params) { try { if (!$_POST) { return PEAR::raiseError("This method is only available via POST"); } $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); $table = Dataface_Table::loadTable($query['-table']); $q = array('-table' => $query['-table']); foreach (array_keys($table->keys()) as $key) { $q[$key] = '='; if (@$query[$key]) { if (strpos($query[$key], '=') === 0) { $q[$key] = $query[$key]; } else { $q[$key] .= $query[$key]; } } else { if (!isset($query['--selected-ids'])) { throw new Exception("Delete action must include either all primary keys in the query, or must specify the --selected-ids parameter. This request specified neither"); } } } $records = df_get_selected_records($query); $rec = df_get_record($q['-table'], $q); if ($rec) { $records[] = $rec; } if (!$records) { throw new Exception("No matching records found", XATAJAX_DELETE_RESPONSE_CODE_NO_RECORDS_FOUND); } //print_r(array_keys($records));exit; $updated = 0; $errs = array(); $deletedIds = array(); $failedIds = array(); foreach ($records as $rec) { if (!$rec->checkPermission('delete')) { $errs[] = sprintf("You do not have permission to delete '%s' because you do not have the 'delete' permission.", $rec->getTitle()); continue; } $res = $rec->delete(true); if (PEAR::isError($res)) { $errs[] = array('message' => $res->getMessage(), 'code' => $res->getCode(), 'record_id' => $rec->getId()); } else { $updated++; $deletedIds[] = $rec->getId(); } } if ($errs) { $this->errors = $errs; $this->updated = $updated; $this->deletedIds = $deletedIds; $code = XATAJAX_DELETE_RESPONSE_CODE_SOME_FAILURES; if (!$updated) { $code = XATAJAX_DELETE_RESPONSE_CODE_FAIL; } throw new Exception(sprintf('%d records were successfully updated. %d errors occurred.', $updated, count($errs)), $code); } xj_json_response(array('code' => 200, 'message' => sprintf('%d records successfully deleted', $updated), 'deletedIds' => $deletedIds, 'numDeleted' => $updated, 'errors' => array())); exit; } catch (Exception $ex) { xj_json_response(array('code' => $ex->getCode(), 'message' > $ex->getMessage(), 'deletedIds' => $this->deletedIds, 'numDeleted' => $this->updated, 'errors' => $this->errors)); } }
function handle(&$params) { $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); $records = df_get_selected_records($query); if (!$records) { if ($query['-mode'] == 'list') { $records = df_get_records_array($query['-table'], $query); } else { $records = array(); $r = $app->getRecord(); if ($r) { $records[] = $r; } } } $jsonProfile = 'basic'; if (@$query['--profile']) { $jsonProfile = $query['--profile']; } $displayMethod = 'val'; if (@$query['--displayMethod'] == 'display') { $displayMethod = 'display'; } else { if (@$query['--displayMethod'] == 'htmlValue') { $displayMethod = 'htmlValue'; } } $out = array(); if (isset($query['--fields'])) { $fields = explode(' ', $query['--fields']); } else { $fields = null; } foreach ($records as $record) { if (!$record->checkPermission('export_json')) { continue; } $del = $record->table()->getDelegate(); $row = null; if (isset($del) and method_exists($del, 'export_json')) { $row = $del->export_json($record, $jsonProfile, $records); } if (!isset($row)) { if (!is_array($fields)) { $fields = array_keys($record->table()->fields(false, true)); } if (is_array($fields)) { $allowed_fields = array(); foreach ($fields as $field) { if (!$record->checkPermission('export_json', array('field' => $field))) { continue; } $allowed_fields[] = $field; } } $row = array(); foreach ($allowed_fields as $fld) { $row[$fld] = $record->{$displayMethod}($fld); } if (@$query['--include-title']) { $row['__title__'] = $record->getTitle(); } if (@$query['--include-id']) { $row['__id__'] = $record->getId(); } } if (isset($del) and method_exists($del, 'filter_json')) { $del->filter_json($record, $row, $jsonProfile, $records); } $out[] = $row; } if (@$query['--single']) { if (count($out) > 0) { $out = $out[0]; } } if (@$query['--var']) { $out = array('code' => 200, $query['--var'] => $out); if (@$query['--stats']) { $queryTool = Dataface_QueryTool::$lastIterated; if (isset($queryTool)) { $out['metaData'] = array('limit' => $queryTool->limit(), 'found' => $queryTool->found(), 'skip' => $queryTool->start()); } else { $out['metaData'] = array('limit' => count($records), 'skip' => 0, 'found' => count($records)); } } } //import('Services/JSON.php'); //$json = new Services_JSON; $enc_out = json_encode($out); header('Content-type: application/json; charset=' . $app->_conf['oe']); header('Connection: close'); echo $enc_out; exit; }
public function handle(&$params) { //get the selected strings to export $app = Dataface_Application::getInstance(); $query =& $app->getQuery(); unset($query['-limit']); //if we don't do this, it will only export the 30 results on the first page $selectedRecords = df_get_selected_records($query); $numRecords = count($selectedRecords); //check to see whether we should export the found or selected strings if ($numRecords == 0) { //if there are none selected, then export all of the strings, and update $numRecords $selectedRecords = new Dataface_RecordReader($query, 40, false); $numRecords = iterator_count($selectedRecords); } $outFilename = tempnam('translation_miss_log', '.xliff'); //"translation_miss_log.xliff"; $numProcessed = 0; $writer = NULL; $outFile = NULL; //do only if there are results to export if ($numRecords > 0) { foreach ($selectedRecords as $record) { if (!$record->checkPermission('view')) { continue; } //for the first translation, we need to set up the writer, and get the source/target language if ($numProcessed == 0) { //create the XLIFFWriter and write the header $sourceLanguage = $record->_values['source_language']; $targetLanguage = $record->_values['destination_language']; $writer = new XLIFFWriter($sourceLanguage, $targetLanguage); $writer->setFile("TranslationMissLog"); // Indicate that we are adding translations and sources // as XML directly so the writer doesn't need to encode them $writer->rawSources(true)->rawTranslations(true); //open the output file for writing if (!($outFile = fopen($outFilename, "w+"))) { throw new Exception("Failed to open {$outFilename} for writing."); } } //write the translation $originalFile = $record->_values['request_url']; $source = TMTools::encodeForXLIFF(TMTools::encode($record->_values['normalized_string'], $params)); // The translation should already be encoded so we don't need to encode it // we just do the xliff encoding $target = TMTools::encodeForXLIFF($record->_values['normalized_translation_value']); if (!$target) { $target = $source; } $writer->setFile($originalFile); $writer->addTranslation($source, $target); $numProcessed++; //flush the writer, or it could run out of memory for large sets if ($numProcessed % 100 == 0) { $writer->flush($outFile); } } //close the writer and save the output file $writer->write($outFile); fclose($outFile); unlink($outFile); //output the file to the browser header("Content-disposition: attachment; filename='exported-strings-" . time() . ".xliff'"); header('Content-Transfer-Encoding: binary'); readfile($outFilename); unlink($outFilename); } return; }
function process($values) { $app =& Dataface_Application::getInstance(); $query =& $app->getQuery(); if (@$values['-copy_replace:copy']) { import('Dataface/CopyTool.php'); $copyTool =& Dataface_CopyTool::getInstance(); } $orig_replacements = $values['-copy_replace_form:replace']; $update_fields = explode('-', $values['-copy_replace:fields']); //print_r($update_fields); $replacements = array(); foreach ($update_fields as $fld) { if (!$fld) { continue; } $replacements[$fld] = $orig_replacements[$fld]; } $blanks = @$_POST['-copy_replace:blank_flag']; if (!$blanks) { $blanks = array(); } foreach ($blanks as $key => $val) { if ($val) { $replacements[$key] = null; } } if (!is_array($replacements)) { return PEAR::raiseError("No fields were selected to change."); } $records = df_get_selected_records($query); if (count($records) == 0) { $q = $query; $q['-limit'] = 99999; $q['-skip'] = 0; $records =& df_get_records_array($q['-table'], $q); } $fields = $this->getFieldsForRecord($records[0]); $dummyForm =& $this->getTableForm($query['-table']); foreach ($replacements as $key => $val) { $dummyForm =& $this->getTableForm($fields[$key]['tablename']); $val = $dummyForm->pushValue($key, $metaValues, $this->form->getElement('-copy_replace_form:replace[' . $key . ']')); //echo $val;//)); // if ($val === '' and !@$blanks[$key]) { unset($replacements[$key]); } else { $replacements[$key] = $val; } unset($dummyForm); } $warnings = array(); $messages = array(); foreach ($records as $record) { if (@$values['-copy_replace:copy']) { // We are performing a copy. $res = $copyTool->copy($record, $replacements); if (PEAR::isError($res)) { $warnings[] = $res; } else { $messages[] = "Successfully copied record '" . $record->getTitle() . "' as record '" . $res->getTitle() . "'"; } $warnings = array_merge($warnings, $copyTool->warnings); } else { if (!$record->checkPermission('edit')) { $warnings[] = Dataface_Error::permissionDenied("Could not update record '" . $record->getTitle() . "' because of insufficient permissions."); continue; } $failed = false; foreach ($replacements as $key => $val) { if (!$record->checkPermission('edit', array('field' => $key))) { $warnings[] = Dataface_Error::permissionDenied("Could not update record '" . $record->getTitle() . "' because of insufficient permissions on field '{$key}'."); $failed = true; } } if ($failed) { continue; } $record->setValues($replacements); $res = $record->save(); if (PEAR::isError($res)) { $warnings[] = $res; } else { $messages[] = "Successfully updated '" . $record->getTitle() . "'"; } } unset($record); } if (@$values['-copy_replace:copy']) { $action = 'copied'; } else { $action = 'updated'; } $this->message = count($messages) . ' records ' . $action . ' successfully. ' . count($warnings) . ' warnings.'; if (count($warnings)) { $warning_msgs = array(); foreach ($warnings as $warning) { $warning_msgs[] = $warning->getMessage(); } } else { $warning_msgs = array(); } //print_r($warning_msgs); $this->message .= '<br>' . implode('<br>', $warning_msgs); return true; }