function del_relation() { global $current_user; $this->ca(); $id1 = isset($_POST['id']) ? (int) $_POST['id'] : false; $id2 = isset($_POST['item_id']) ? (int) $_POST['item_id'] : false; if (!$id1 || !$id2) { throw new Exception('id or item_id missed'); } if (PersonRelations::delRelation($id1, $id2)) { $this->data['success'] = 1; $this->data['item_id'] = $id2; $search = Search::getInstance(); /* @var $search Search */ $search->setAuthorToFullUpdate($id1); $search->setAuthorToFullUpdate($id2); } else { $this->data['success'] = 0; $this->data['error'] = 'ошибочка:' . PersonRelations::getLastError(); } }
/** * implementation of abstract parse() operation from RestXMLParser. * * @xml SimpleXMLElement the root element of the application XML representation * * @return Default_Model_Researcher * @access public */ public function parse($xml) { if (!is_null($this->_user)) { $person = new Default_Model_Researcher(); try { $xml = new SimpleXMLElement($xml); } catch (Exception $e) { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = $e->getMessage(); return $person; } $xmli = $xml->xpath('//person:person'); if (count($xmli) === 0) { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; return $person; } $xml = $xmli[0]; if ($this->_parent->getMethod() === RestMethodEnum::RM_POST) { if ($xml->attributes()->id) { $person->id = strval($xml->attributes()->id); } else { $this->_error = RestErrorEnum::RE_INVALID_REPRESENTATION; $this->_extError = 'Resource ID missing'; return $person; } } if ($xml->attributes()->nodissemination) { $person->noDissemination = strval($xml->attributes()->nodissemination) === "true" ? true : false; } if ($xml->attributes()->cname) { $person->cname = strval($xml->attributes()->cname); } $firstname = $this->el($xml, "person:firstname"); if (!is_null($firstname) && trim(strval($firstname)) !== "") { $person->firstName = trim(strval($firstname)); } $lastname = $this->el($xml, "person:lastname"); if (!is_null($lastname) && trim(strval($lastname)) !== "") { $person->lastName = trim(strval($lastname)); } $gender = $this->el($xml, "person:gender"); if (!is_null($gender)) { if (trim(strval($gender->attributes(RestAPIHelper::XMLNS_XSI())->nil)) === "true") { $person->gender = 'n/a'; } elseif (trim(strval($gender)) !== "") { if (trim(strtolower(strval($gender))) === "male") { $person->gender = "male"; } elseif (trim(strtolower(strval($gender))) === "female") { $person->gender = "female"; } } } if ($this->_parent->getMethod() === RestMethodEnum::RM_PUT) { $person->dateInclusion = date("Y-m-d"); $person->addedByID = $this->_parent->getUser()->id; } $person->lastUpdated = date('Y-m-d'); $institute = trim(strval($this->el($xml, "person:institute"))); if (!is_null($institute)) { $person->institution = trim(strval($institute)); } $country = $this->el($xml, "regional:country"); if (!is_null($country) && trim(strval($country->attributes()->id)) !== "") { $person->countryID = trim(strval($country->attributes()->id)); } $role = $this->el($xml, "person:role"); if (!is_null($role) && trim(strval($role->attributes()->id)) !== "") { $person->positionTypeID = trim(strval($role->attributes()->id)); } $image = $this->el($xml, "person:image"); $removeImageCache = false; if (!is_null($image)) { if (trim(strval($image->attributes(RestAPIHelper::XMLNS_XSI())->nil)) === "true") { $person->clearImage(); $removeImageCache = true; } else { if (!is_null($image->attributes()->type) && trim(strval($image->attributes()->type)) === "base64") { // image is given as byte64 encoded string if (trim(strval($image)) != '') { $person->image = pg_escape_bytea(trim(strval($image))); $removeImageCache = true; } } else { // image is given as URL if (trim(parse_url(strval($image), PHP_URL_SCHEME)) == '') { // no URL scheme present; assume uploaded file though // portal's uploadimage action in AppsController if (trim(strval($image)) != '') { try { $person->image = pg_escape_bytea(base64_encode(file_get_contents(APPLICATION_PATH . "/../public/" . trim(strval($image))))); $removeImageCache = true; } catch (Exception $e) { $this->_error = RestErrorEnum::RE_BACKEND_ERROR; $this->_extError = $e->getMessage(); return $person; } } } else { // URL scheme present; assume remote file if (trim(strval($image)) != '') { try { $person->image = pg_escape_bytea(base64_encode(file_get_contents(trim(strval($image))))); $removeImageCache = true; } catch (Exception $e) { $this->_error = RestErrorEnum::RE_BACKEND_ERROR; $this->_extError = $e->getMessage(); return $person; } } } } } } if ($removeImageCache === true) { if ($person->id != '' && file_exists(APPLICATION_PATH . "/../cache/ppl-image-" . $person->id . ".png")) { unlink(APPLICATION_PATH . "/../cache/ppl-image-" . $person->id . ".png"); } } $person->save(); if ($this->_parent->getMethod() === RestMethodEnum::RM_POST) { //remove existing contact info $conts = new Default_Model_Contacts(); $conts->filter->researcherid->equals($person->id); $conts->refresh(); for ($i = count($conts->items) - 1; $i >= 0; $i--) { $conts->remove($conts->items[$i]); } } //add new contact info $cts = new Default_Model_ContactTypes(); $cts->refresh(); $xmli = $xml->xpath("//person:contact"); $conts2 = new Default_Model_Contacts(); foreach ($xmli as $x) { if (trim(strval($x)) !== '') { $cont = new Default_Model_Contact(); $cont->researcherID = $person->id; $ct = trim(strval($x->attributes()->type)); $ctid = null; for ($i = 0; $i < count($cts->items); $i++) { if (strtolower($ct) == strtolower($cts->items[$i]->description)) { $ctid = $cts->items[$i]->id; break; } } if (!is_null($ctid)) { $cont->contactTypeID = $ctid; } else { $cont->contactTypeID = 7; //e-mail by default } $cont->data = trim(strval($x)); if (strval($x->attributes()->primary) === "true") { $cont->isPrimary = true; } $conts2->filter->data->equals($cont->data)->and($conts2->filter->contacttypeid->equals(7))->and($conts2->filter->researcherid->notequals($person->id)); $conts2->refresh("xml"); if (count($conts2->items) == 0) { $cont->save(); } else { $this->_error = RestErrorEnum::RE_BACKEND_ERROR; $this->_extError = "e-mail address `" . $cont->data . "' already exists"; return $person; } } } if ($this->_parent->getMethod() === RestMethodEnum::RM_POST || $this->_parent->getMethod() === RestMethodEnum::RM_PUT) { $xrels = $xml->xpath("person:relation"); $ps = new Default_Model_Researchers(); $ps->filter->id->equals($person->id); $p = null; if (count($ps->items) > 0) { $p = $ps->items[0]; } if ($p !== null) { $rels = array(); if (count($xml->xpath('person:relation[@xsi:nil="true"]')) === 0) { foreach ($xrels as $x) { $targuid = trim(strval($x->attributes()->targetguid)); $subguid = trim(strval($x->attributes()->subjectguid)); $rel = array("id" => trim(strval($x->attributes()->id)), "parentid" => trim(strval($x->attributes()->parentid))); if ($targuid === "") { $rel["subjectguid"] = $subguid; } else { if ($subguid === "") { $rel["targetguid"] = $targuid; } } if ($rel["parentid"] === "") { $rel["parentid"] = null; } $rels[] = $rel; } } try { $res = PersonRelations::syncRelations($p->guid, $this->_user->id, $rels); } catch (Exception $ex) { $res = $ex->getMessage(); } if (is_string($res)) { $this->_error = RestErrorEnum::RE_BACKEND_ERROR; $this->_extError = $res; return $p; } } } } $this->_error = RestErrorEnum::RE_OK; return $person; }
function getEditions() { if (!$this->params['author_id']) { return; } $ids = array(); $person = Persons::getInstance()->getByIdLoaded($this->params['author_id']); $rels = PersonRelations::getPersonRelations($this->params['author_id']); /* @var $book Book */ if ($rels) { $ids = Database::sql2array('SELECT `id` FROM `persons` WHERE `id` IN(' . implode(',', array_keys($rels)) . ') AND `is_deleted`=0 AND `id`<>' . $this->params['author_id'] . ' AND `author_lang`=' . $person->getLangId(), 'id'); } else { $ids = array(); } $this->data = $this->_idsToData(array_keys($ids)); $this->data['authors']['title'] = 'Редакции'; $this->data['authors']['count'] = count($ids); }