本文整理汇总了PHP中Zotero_DB::profileEnd方法的典型用法代码示例。如果您正苦于以下问题:PHP Zotero_DB::profileEnd方法的具体用法?PHP Zotero_DB::profileEnd怎么用?PHP Zotero_DB::profileEnd使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zotero_DB
的用法示例。
在下文中一共展示了Zotero_DB::profileEnd方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: end
protected function end()
{
if ($this->profile) {
Zotero_DB::profileEnd($this->objectLibraryID, true);
}
switch ($this->responseCode) {
case 200:
// Output a Content-Type header for the given format
//
// Note that this overrides any Content-Type set elsewhere. To force a content
// type elsewhere, clear $this->queryParams['format'] when calling header()
// manually.
//
// TODO: Check headers_list so that clearing the format parameter manually isn't
// necessary? Performance?
if (isset($this->queryParams['format'])) {
Zotero_API::outputContentType($this->queryParams['format']);
}
break;
case 301:
case 302:
case 303:
// Handled in $this->redirect()
break;
case 401:
header('WWW-Authenticate: Basic realm="Zotero API"');
header('HTTP/1.1 401 Unauthorized');
break;
// PHP completes these automatically
// PHP completes these automatically
case 201:
case 204:
case 300:
case 304:
case 400:
case 403:
case 404:
case 405:
case 409:
case 412:
case 413:
case 422:
case 500:
case 501:
case 503:
header("HTTP/1.1 " . $this->responseCode);
break;
case 428:
header("HTTP/1.1 428 Precondition Required");
break;
case 429:
header("HTTP/1.1 429 Too Many Requests");
break;
default:
throw new Exception("Unsupported response code " . $this->responseCode);
}
if (isset($this->libraryVersion)) {
if ($this->apiVersion >= 2) {
header("Last-Modified-Version: " . $this->libraryVersion);
}
// Send notification if library has changed
if ($this->isWriteMethod()) {
if ($this->libraryVersion > Zotero_Libraries::getOriginalVersion($this->objectLibraryID)) {
Zotero_Notifier::trigger('modify', 'library', $this->objectLibraryID);
}
}
}
if ($this->responseXML instanceof SimpleXMLElement) {
if (!$this->responseCode) {
$updated = (string) $this->responseXML->updated;
if ($updated) {
$updated = strtotime($updated);
$ifModifiedSince = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
$ifModifiedSince = strtotime($ifModifiedSince);
if ($ifModifiedSince >= $updated) {
header('HTTP/1.1 304 Not Modified');
exit;
}
$lastModified = substr(date('r', $updated), 0, -5) . "GMT";
header("Last-Modified: {$lastModified}");
}
}
$xmlstr = $this->responseXML->asXML();
// TEMP: Strip control characters
$xmlstr = Zotero_Utilities::cleanString($xmlstr, true);
$doc = new DOMDocument('1.0');
$doc->loadXML($xmlstr);
$doc->formatOutput = true;
echo $doc->saveXML();
}
$this->logRequestTime();
self::addHeaders();
echo ob_get_clean();
exit;
}
示例2: end
private function end()
{
if (!$this->responseXML instanceof SimpleXMLElement) {
throw new Exception("Response XML not provided");
}
if ($this->profile) {
Zotero_DB::profileEnd($this->profileShard, false);
}
if ($this->responseCode) {
switch ($this->responseCode) {
case 201:
header("HTTP/1.1 201 Created");
break;
default:
throw new Exception("Unsupported response code");
}
} else {
$updated = (string) $this->responseXML->updated;
if ($updated) {
$updated = strtotime($updated);
$ifModifiedSince = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
$ifModifiedSince = strtotime($ifModifiedSince);
if ($ifModifiedSince >= $updated) {
header('HTTP/1.1 304 Not Modified');
exit;
}
$lastModified = substr(date('r', $updated), 0, -5) . "GMT";
header("Last-Modified: {$lastModified}");
}
}
$xmlstr = $this->responseXML->asXML();
$doc = new DOMDocument('1.0');
$doc->loadXML($xmlstr);
$doc->formatOutput = true;
if ($this->queryParams['pprint']) {
$ppdoc = new DOMDocument('1.0');
// Zero-width spaces to push <feed> beyond Firefox's
// feed auto-detection boundary
$comment = $ppdoc->createComment("");
$ppdoc->appendChild($comment);
$ppdoc->formatOutput = true;
$rootElem = $doc->firstChild;
$importedNode = $ppdoc->importNode($rootElem, true);
$ppdoc->appendChild($importedNode);
$doc = $ppdoc;
}
$xmlstr = $doc->saveXML();
if ($this->queryParams['pprint']) {
header("Content-Type: text/xml");
} else {
header("Content-Type: application/atom+xml");
}
echo $xmlstr;
$this->logRequestTime();
echo ob_get_clean();
exit;
}
示例3: processUploadInternal
//.........这里部分代码省略.........
}
$ids[] = $item->id;
}
$collection['obj']->setChildItems($ids);
}
}
unset($collectionSets);
}
// Add/update saved searches
if ($xml->searches) {
$searches = array();
$keys = array();
foreach ($xml->searches->search as $xmlElement) {
$key = (string) $xmlElement['key'];
if (isset($keys[$key])) {
throw new Exception("Search {$key} already processed");
}
$keys[$key] = true;
$searchObj = Zotero_Searches::convertXMLToSearch($xmlElement);
$searchObj->save();
}
unset($xml->searches);
}
// Add/update tags
if ($xml->tags) {
$keys = array();
// DOM
$xmlElements = dom_import_simplexml($xml->tags);
$xmlElements = $xmlElements->getElementsByTagName('tag');
foreach ($xmlElements as $xmlElement) {
$key = $xmlElement->getAttribute('key');
if (isset($keys[$key])) {
throw new Exception("Tag {$key} already processed");
}
$keys[$key] = true;
$tagObj = Zotero_Tags::convertXMLToTag($xmlElement);
$tagObj->save(true);
}
unset($keys);
unset($xml->tags);
}
// Add/update relations
if ($xml->relations) {
// DOM
$xmlElements = dom_import_simplexml($xml->relations);
$xmlElements = $xmlElements->getElementsByTagName('relation');
foreach ($xmlElements as $xmlElement) {
$relationObj = Zotero_Relations::convertXMLToRelation($xmlElement, $userLibraryID);
if ($relationObj->exists()) {
continue;
}
$relationObj->save();
}
unset($keys);
unset($xml->relations);
}
// TODO: loop
if ($xml->deleted) {
// Delete collections
if ($xml->deleted->collections) {
Zotero_Collections::deleteFromXML($xml->deleted->collections);
}
// Delete items
if ($xml->deleted->items) {
Zotero_Items::deleteFromXML($xml->deleted->items);
}
// Delete creators
if ($xml->deleted->creators) {
Zotero_Creators::deleteFromXML($xml->deleted->creators);
}
// Delete saved searches
if ($xml->deleted->searches) {
Zotero_Searches::deleteFromXML($xml->deleted->searches);
}
// Delete tags
if ($xml->deleted->tags) {
Zotero_Tags::deleteFromXML($xml->deleted->tags);
}
// Delete tags
if ($xml->deleted->relations) {
Zotero_Relations::deleteFromXML($xml->deleted->relations);
}
}
self::removeUploadProcess($processID);
Zotero_DB::commit();
Z_Core::$MC->commit();
if ($profile) {
$shardID = Zotero_Shards::getByUserID($userID);
Zotero_DB::profileEnd($shardID);
}
// Return timestamp + 1, to keep the next /updated call
// (using >= timestamp) from returning this data
return $timestamp + 1;
} catch (Exception $e) {
Z_Core::$MC->rollback();
Zotero_DB::rollback(true);
self::removeUploadProcess($processID);
throw $e;
}
}
示例4: processUploadInternal
//.........这里部分代码省略.........
if ($xml->deleted) {
// Delete collections
if ($xml->deleted->collections) {
Zotero_Collections::deleteFromXML($xml->deleted->collections, $userID);
}
// Delete items
if ($xml->deleted->items) {
Zotero_Items::deleteFromXML($xml->deleted->items, $userID);
}
// Delete creators
if ($xml->deleted->creators) {
Zotero_Creators::deleteFromXML($xml->deleted->creators, $userID);
}
// Delete saved searches
if ($xml->deleted->searches) {
Zotero_Searches::deleteFromXML($xml->deleted->searches, $userID);
}
// Delete tags
if ($xml->deleted->tags) {
$xmlElements = dom_import_simplexml($xml->deleted->tags);
$xmlElements = $xmlElements->getElementsByTagName('tag');
foreach ($xmlElements as $xmlElement) {
$libraryID = (int) $xmlElement->getAttribute('libraryID');
$key = $xmlElement->getAttribute('key');
$tagObj = Zotero_Tags::getByLibraryAndKey($libraryID, $key);
if (!$tagObj) {
continue;
}
// We need to update all items on the deleted tag
$modifiedItems = array_merge($modifiedItems, array_map(function ($key) use($libraryID) {
return $libraryID . "/" . $key;
}, $tagObj->getLinkedItems(true)));
}
Zotero_Tags::deleteFromXML($xml->deleted->tags, $userID);
}
// Delete relations
if ($xml->deleted->relations) {
Zotero_Relations::deleteFromXML($xml->deleted->relations, $userID);
}
// Delete relations
if ($xml->deleted->settings) {
Zotero_Settings::deleteFromXML($xml->deleted->settings, $userID);
}
}
$toUpdate = array();
foreach ($modifiedItems as $item) {
// libraryID/key string
if (is_string($item)) {
if (isset($savedItems[$item])) {
continue;
}
$savedItems[$item] = true;
list($libraryID, $key) = explode("/", $item);
$item = Zotero_Items::getByLibraryAndKey($libraryID, $key);
if (!$item) {
// Item was deleted
continue;
}
} else {
$lk = $item->libraryID . "/" . $item->key;
if (isset($savedItems[$lk])) {
continue;
}
$savedItems[$lk] = true;
}
$toUpdate[] = $item;
}
Zotero_Items::updateVersions($toUpdate, $userID);
unset($savedItems);
unset($modifiedItems);
try {
self::removeUploadProcess($processID);
} catch (Exception $e) {
if (strpos($e->getMessage(), 'MySQL server has gone away') !== false) {
// Reconnect
error_log("Reconnecting to MySQL master");
Zotero_DB::close();
self::removeUploadProcess($processID);
} else {
throw $e;
}
}
// Send notifications for changed libraries
foreach ($affectedLibraries as $libraryID) {
Zotero_Notifier::trigger('modify', 'library', $libraryID);
}
Zotero_DB::commit();
if ($profile) {
$shardID = Zotero_Shards::getByUserID($userID);
Zotero_DB::profileEnd($shardID);
}
// Return timestamp + 1, to keep the next /updated call
// (using >= timestamp) from returning this data
return $timestamp + 1;
} catch (Exception $e) {
Zotero_DB::rollback(true);
self::removeUploadProcess($processID);
throw $e;
}
}
示例5: end
private function end()
{
if ($this->profile) {
Zotero_DB::profileEnd($this->profileShard, false);
}
header("Content-Type: text/xml");
$xmlstr = $this->responseXML->asXML();
echo $xmlstr;
Z_Core::exitClean();
}