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;
         }
     }
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 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));
 }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
 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;
 }
Exemplo n.º 7
0
 /**
  * Returns an array of the selected records.
  */
 function &getSelectedRecords()
 {
     if (!isset($this->records)) {
         $this->records = df_get_selected_records($this->query);
     }
     return $this->records;
 }
Exemplo n.º 8
0
    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;
    }
Exemplo n.º 9
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;
 }
Exemplo n.º 10
0
 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;
 }
Exemplo n.º 11
0
 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));
     }
 }
Exemplo n.º 12
0
 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;
 }
Exemplo n.º 14
0
 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;
 }