// Make it DOM-traversable $doc_citations = new DOMDocument(); $doc_citations->loadXML($zp_xml); $entries = $doc_citations->getElementsByTagName("entry"); foreach ($entries as $entry) { $item_key = $entry->getElementsByTagNameNS("http://zotero.org/ns/api", "key")->item(0)->nodeValue; $citation_content = ""; $citation_content_temp = new DOMDocument(); foreach ($entry->getElementsByTagName("content") as $child) { foreach ($child->childNodes as $child_content) { $citation_content_temp->appendChild($citation_content_temp->importNode($child_content, true)); $citation_content = $citation_content_temp->saveHTML(); } } // Update style $wpdb->update($wpdb->prefix . 'zotpress_zoteroItems', array("style" => zp_db_prep($style), "citation" => zp_db_prep($citation_content)), array('item_key' => $item_key, 'api_user_id' => $zp_account[0]->api_user_id), array('%s', '%s'), array('%s', '%s')); $xml .= "<item key=\"" . $item_key . "\">" . htmlentities($citation_content) . "</item>\n"; } // entry unset($zp_import_contents); unset($zp_import_url); unset($zp_xml); unset($doc_citations); unset($entries); } unset($zp_items_current_style); unset($zp_items_current_style_proceed); unset($query_items); // Display success XML $xml .= "<result success=\"true\" api_user_id=\"" . $api_user_id . "\" />\n"; $wpdb->flush();
function zp_get_server_tags($wpdb, $api_user_id, $zp_start) { $zp_import_contents = new ZotpressRequest(); $zp_account = zp_get_account($wpdb, $api_user_id); //$zp_account = $GLOBALS['zp_session'][$api_user_id]['zp_account']; // Build request URL $zp_import_url = "https://api.zotero.org/" . $zp_account[0]->account_type . "/" . $zp_account[0]->api_user_id . "/tags?limit=50&start=" . $zp_start; if (is_null($zp_account[0]->public_key) === false && trim($zp_account[0]->public_key) != "") { $zp_import_url .= "&key=" . $zp_account[0]->public_key; } $zp_xml = $zp_import_contents->get_request_contents($zp_import_url, false); // Make it DOM-traversable $doc_citations = new DOMDocument(); $doc_citations->loadXML($zp_xml); // Get last set if (!isset($GLOBALS['zp_session'][$api_user_id]['tags']['last_set'])) { $last_set = ""; $links = $doc_citations->getElementsByTagName("link"); foreach ($links as $link) { if ($link->getAttribute('rel') == "last") { if (stripos($link->getAttribute('href'), "start=") !== false) { $last_set = explode("start=", $link->getAttribute('href')); $GLOBALS['zp_session'][$api_user_id]['tags']['last_set'] = intval($last_set[1]); } else { $GLOBALS['zp_session'][$api_user_id]['tags']['last_set'] = 0; } } } } $entries = $doc_citations->getElementsByTagName("entry"); foreach ($entries as $entry) { $title = $entry->getElementsByTagName("title")->item(0)->nodeValue; $retrieved = $entry->getElementsByTagName("updated")->item(0)->nodeValue; // Check to see if tags exists in local if (array_key_exists(trim($title), $GLOBALS['zp_session'][$api_user_id]['tags']['zp_local_tags'])) { // Check to see if it needs updating if ($retrieved != $GLOBALS['zp_session'][$api_user_id]['tags']['zp_local_tags'][trim($title)]->retrieved) { $GLOBALS['zp_session'][$api_user_id]['tags']['zp_tags_to_update'][trim($title)] = $GLOBALS['zp_session'][$api_user_id]['tags']['zp_local_tags'][trim($title)]->id; //unset($GLOBALS['zp_session'][$api_user_id]['tags']['zp_local_tags'][trim($title)]); // Leave only the local ones that should be deleted update_option('ZOTPRESS_DELETE_' . $api_user_id, get_option('ZOTPRESS_DELETE_' . $api_user_id) . "," . $item_key); } else { //unset($GLOBALS['zp_session'][$api_user_id]['tags']['zp_local_tags'][trim($title)]); // Leave only the local ones that should be deleted update_option('ZOTPRESS_DELETE_' . $api_user_id, get_option('ZOTPRESS_DELETE_' . $api_user_id) . "," . $item_key); continue; } } $numItems = $entry->getElementsByTagNameNS("http://zotero.org/ns/api", "numItems")->item(0)->nodeValue; unset($zp_import_contents); unset($zp_import_url); unset($zp_xml); // GET LIST OF ITEM KEYS $zp_import_contents = new ZotpressRequest(); $zp_import_url = "https://api.zotero.org/" . $zp_account[0]->account_type . "/" . $zp_account[0]->api_user_id . "/tags/" . urlencode($title) . "/items?format=keys"; if (is_null($zp_account[0]->public_key) === false && trim($zp_account[0]->public_key) != "") { $zp_import_url .= "&key=" . $zp_account[0]->public_key; } // Import content $zp_xml = $zp_import_contents->get_request_contents($zp_import_url, false); $zp_tag_itemkeys = rtrim(str_replace("\n", ",", $zp_xml), ","); // If item key needs updating if (array_key_exists(trim($title), $GLOBALS['zp_session'][$api_user_id]['tags']['zp_tags_to_update'])) { $GLOBALS['zp_session'][$api_user_id]['tags']['zp_tags_to_update'][trim($title)] = array("api_user_id" => $zp_account[0]->api_user_id, "title" => zp_db_prep($title), "retrieved" => zp_db_prep($retrieved), "numItems" => $numItems, "listItems" => zp_db_prep($zp_tag_itemkeys)); } else { if (!array_key_exists(trim($title), $GLOBALS['zp_session'][$api_user_id]['tags']['zp_local_tags'])) { array_push($GLOBALS['zp_session'][$api_user_id]['tags']['zp_tags_to_add'], $zp_account[0]->api_user_id, zp_db_prep($title), zp_db_prep($retrieved), $numItems, zp_db_prep($zp_tag_itemkeys)); $GLOBALS['zp_session'][$api_user_id]['tags']['query_total_tags_to_add']++; } } unset($title); unset($retrieved); unset($numItems); unset($zp_tag_itemkeys); } // entry // LAST SET if ($GLOBALS['zp_session'][$api_user_id]['tags']['last_set'] == $zp_start) { return false; } else { return true; } unset($zp_import_contents); unset($zp_import_url); unset($zp_xml); unset($doc_citations); unset($entries); }
function zp_get_tags($wpdb, $api_user_id, $zp_start, $zp_collection = false) { $zp_import_contents = new ZotpressRequest(); $zp_account = zp_get_account($wpdb, $api_user_id); // Get import url if ($zp_collection) { $zp_collection = '/collections/' . $zp_collection; } else { $zp_collection = ''; } $zp_import_url = "https://api.zotero.org/" . $zp_account[0]->account_type . "/" . $zp_account[0]->api_user_id . $zp_collection . "/tags?limit=50&start=" . $zp_start; if (is_null($zp_account[0]->public_key) === false && trim($zp_account[0]->public_key) != "") { $zp_import_url .= "&key=" . $zp_account[0]->public_key; } // Import content $zp_xml = $zp_import_contents->get_request_contents($zp_import_url, false); // Report any errors returned from Zotero if (trim(strtolower($zp_xml)) == "forbidden") { return "Zotero is telling Zotpress that access is forbidden. Are you sure that the Zotero API key you're using for this account is correct?"; } // Make it DOM-traversable $doc_citations = new DOMDocument(); $doc_citations->loadXML($zp_xml); // Get last set if (!isset($GLOBALS['zp_session'][$api_user_id]['tags']['last_set'])) { $last_set = ""; $links = $doc_citations->getElementsByTagName("link"); foreach ($links as $link) { if ($link->getAttribute('rel') == "last") { if (stripos($link->getAttribute('href'), "start=") !== false) { $last_set = explode("start=", $link->getAttribute('href')); $GLOBALS['zp_session'][$api_user_id]['tags']['last_set'] = intval($last_set[1]); } else { $GLOBALS['zp_session'][$api_user_id]['tags']['last_set'] = 0; } } } } // PREPARE EACH ENTRY FOR DB INSERT $entries = $doc_citations->getElementsByTagName("entry"); foreach ($entries as $entry) { $title = str_replace("&", "__and__", $entry->getElementsByTagName("title")->item(0)->nodeValue); $retrieved = $entry->getElementsByTagName("updated")->item(0)->nodeValue; $numItems = $entry->getElementsByTagNameNS("http://zotero.org/ns/api", "numItems")->item(0)->nodeValue; unset($zp_import_contents); unset($zp_import_url); unset($zp_xml); // GET LIST OF ITEM KEYS - now handled in Items import // $zp_import_contents = new ZotpressRequest(); // // $zp_import_url = "https://api.zotero.org/".$zp_account[0]->account_type."/".$zp_account[0]->api_user_id."/tags/".urlencode($title)."/items?format=keys"; // if (is_null($zp_account[0]->public_key) === false && trim($zp_account[0]->public_key) != "") // $zp_import_url .= "&key=".$zp_account[0]->public_key; // // // Import content // $zp_xml = $zp_import_contents->get_request_contents( $zp_import_url, false ); // // $zp_tag_itemkeys = rtrim(str_replace("\n", ",", $zp_xml), ","); // // unset($zp_import_contents); // unset($zp_import_url); // unset($zp_xml); // Prep for insert into db array_push($GLOBALS['zp_session'][$api_user_id]['tags']['query_params'], $zp_account[0]->api_user_id, zp_db_prep($title), zp_db_prep($retrieved), $numItems); $GLOBALS['zp_session'][$api_user_id]['tags']['query_total_entries']++; unset($title); unset($retrieved); unset($numItems); //unset($zp_tag_itemkeys); } // entry // LAST SET if ($GLOBALS['zp_session'][$api_user_id]['tags']['last_set'] == $zp_start) { return false; } else { return true; } unset($entries); unset($doc_citations); }