Example #1
0
 static function submit_translations()
 {
     // Request format (HTTP POST):
     //   client_token = <client_token>
     //   uid = <l10n server user id>
     //   signature = md5(user_api_key($uid, $client_token) . $data . $client_token))
     //   data = // JSON payload
     //
     //     {<key_1>: {message: <JSON encoded message>
     //                translations: {<locale_1>: <JSON encoded translation>,
     //                               <locale_2>: ...}},
     //      <key_2>: {...}
     //     }
     // @todo Batch requests (max request size)
     // @todo include base_revision in submission / how to handle resubmissions / edit fights?
     foreach (Database::instance()->select("key", "message", "locale", "base_revision", "translation")->from("outgoing_translations")->get() as $row) {
         $key = $row->key;
         if (!isset($request->{$key})) {
             $request->{$key}->message = json_encode(unserialize($row->message));
         }
         $request->{$key}->translations->{$row->locale} = json_encode(unserialize($row->translation));
     }
     // @todo reduce memory consumption, e.g. free $request
     $request_data = json_encode($request);
     $url = self::_server_url() . "?q=translations/submit";
     $signature = self::_sign($request_data);
     list($response_data, $response_status) = remote::post($url, array("data" => $request_data, "client_token" => self::client_token(), "signature" => $signature, "uid" => self::server_uid()));
     if (!remote::success($response_status)) {
         throw new Exception("@todo TRANSLATIONS_SUBMISSION_FAILED " . $response_status);
     }
     if (empty($response_data)) {
         return;
     }
     $response = json_decode($response_data);
     // Response format (JSON payload):
     //   [{key:<key_1>, locale:<locale_1>, rev:<rev_1>, status:<rejected|accepted|pending>},
     //    {key:<key_2>, ...}
     //   ]
     // @todo Move messages out of outgoing into incoming, using new rev?
     // @todo show which messages have been rejected / are pending?
 }