/** * add identifier * * @author Matthias Pfefferle * @param User $pUser * @param AuthToken $pAuthToken * @return OnlineIdentity */ public function addIdentifier($pUser, $pOAuthToken) { $lAccessToken = $this->getAccessToken($pOAuthToken); // get params $lParams = $lAccessToken->params; $lParamsArray = array(); // extract params parse_str($lParams, $lParamsArray); $lXml = OAuthClient::get($this->getConsumer(), $lParamsArray['oauth_token'], $lParamsArray['oauth_token_secret'], "http://api.linkedin.com/v1/people/~:(id,site-standard-profile-request,summary,picture-url,first-name,last-name,date-of-birth,location)"); $lProfileArray = XmlUtils::XML2Array($lXml); //var_dump($lProfileArray);die(); // identifier $lLinkedInId = $lProfileArray['id']; $lProfileUri = "http://www.linkedin.com/profile/view?id=" . $lLinkedInId; // ask for online identity $lOnlineIdentity = OnlineIdentityTable::retrieveByAuthIdentifier($lProfileUri); // check if user already exists if ($lOnlineIdentity) { if ($lOnlineIdentity->getUserId() && $pUser->getId() == $lOnlineIdentity->getUserId()) { if (!$lOnlineIdentity->getActive()) { $lOnlineIdentity->setActive(true); } else { throw new sfException("online identity already added", 1); } } elseif ($lOnlineIdentity->getUserId() && $pUser->getId() != $lOnlineIdentity->getUserId()) { throw new sfException("online identity already added by someone else", 2); } } else { // new online identity if no exist $lOnlineIdentity = OnlineIdentityTable::addOnlineIdentity($lProfileUri, $lLinkedInId, $this->aCommunityId, $lProfileUri); } $this->completeOnlineIdentity($lOnlineIdentity, $lProfileArray, $pUser); AuthTokenTable::saveToken($pUser->getId(), $lOnlineIdentity->getId(), $lParamsArray['oauth_token'], $lParamsArray['oauth_token_secret'], true); return $lOnlineIdentity; }
/** * Retorna um DOMElement baseado na estrutura do Objeto * * @param Object $obj * @param DOMDocument $dom * @return DOMElement */ private static function object2Xml($obj, &$dom, $attrDefault = null) { $vars = get_object_vars($obj); if (get_class($obj) != "stdClass") { $elem = $dom->createElement(get_class($obj)); } else { $elem = $dom->createElement("objeto"); } $i = 0; foreach ($vars as $chave => $valor) { if (is_object($valor)) { $elem->appendChild(XmlUtils::object2Xml($valor, $dom, $attrDefault)); } elseif (is_array($valor)) { XmlUtils::array2Xml($valor, $elem, $dom, $attrDefault); } else { if ($attrDefault) { $elem->setAttribute($chave, $valor); } else { $elem2 = $dom->createElement($chave); $elemText = $dom->createTextNode($valor); $elem2->appendChild($elemText); $elem->appendChild($elem2); } } } return $elem; }
/** * Converts an object to an XML string. The root element name is passed in as * a parameter, and each field of the object becomes a child element. Array * values are represented by multiples instances of that element. Methods on * the object are ignored. * * @param mixed $object the object to serialize * @param string $rootElementName the name of the root element * @param bool $useXsiType whether the xsi:type will be added into XML tags * when available * @return string the XML serialized string of the object */ public function ConvertObjectToXml($object, $rootElementName, $useXsiType) { $document = new DOMDocument('1.0', 'UTF-8'); $document->appendChild(self::ConvertObjectToElement($object, $rootElementName, $document, $useXsiType)); $xml = XmlUtils::GetXmlFromDom($document); if ($useXsiType) { // Insert links to definitions of the ns1 and xsi namespaces. $xml = preg_replace('/<ns1:mutate/', '<ns1:mutate ' . self::ADWORDS_NS_ATTR_PREFIX . $object::WSDL_NAMESPACE . '"', $xml); $xml = preg_replace('/<operations/', '<operations ' . self::XSI_ATTRIBUTE, $xml); } return $xml; }
/** * import twitter contacts * * @author Matthias Pfefferle * @author Karina Mies */ public static function importContacts($pOnlineIdentity) { $lToken = AuthTokenTable::getByUserAndOnlineIdentity($pOnlineIdentity->getUserId(), $pOnlineIdentity->getId()); // get api informations if (!$lToken) { $pOnlineIdentity->deactivate(); throw new Exception('damn theres no token!', '666'); } $lConsumer = new OAuthConsumer(sfConfig::get("app_linkedin_oauth_token"), sfConfig::get("app_linkedin_oauth_secret")); $lXml = OAuthClient::get($lConsumer, $lToken->getTokenKey(), $lToken->getTokenSecret(), "http://api.linkedin.com/v1/people/~/connections:(id)"); $lFriendObject = simplexml_load_string($lXml); $lXml = OAuthClient::get($lConsumer, $lToken->getTokenKey(), $lToken->getTokenSecret(), "http://api.linkedin.com/v1/people/~:(id,site-standard-profile-request,summary,picture-url,first-name,last-name,date-of-birth,location)"); $lProfileArray = XmlUtils::XML2Array($lXml); @self::importFriends($pOnlineIdentity, $lFriendObject); @self::updateIdentity($pOnlineIdentity, $lProfileArray); }
/** * Fixes the XML based on the parameters specified in the constructor. * @param string $request the raw request produced by the SOAP client * @param array $arguments the arguments passed to the SOAP method * @param array $headers the headers used in the request * @return string the prepared request ready to be sent to the server */ public function FixXml($request, array $arguments, array $headers) { $requestDom = XmlUtils::GetDomFromXml($request); $xpath = new DOMXPath($requestDom); // Fix headers. $headersDomNodes = $xpath->query("//*[local-name()='Envelope']/*[local-name()='Header']/*"); $this->FixXmlNodes($headersDomNodes, $headers, $xpath); // Fix body. $argumentsDomNodes = $xpath->query("//*[local-name()='Envelope']/*[local-name()='Body']/*"); $this->FixXmlNodes($argumentsDomNodes, $arguments, $xpath); // Remove empty headers. if ($this->removeEmptyElements) { $this->RemoveEmptyHeaderElements($xpath); } return $requestDom->saveXML(); }
/** * Generates the parameters to use for the download request. * @param mixed $reportDefinition the report definition, as an ID or object * @return array the parameters */ private static function GetParams($reportDefinition) { $params = array(); if (is_numeric($reportDefinition)) { $params['__rd'] = $reportDefinition; } else { if (is_object($reportDefinition) || is_array($reportDefinition)) { $document = XmlUtils::ConvertObjectToDocument($reportDefinition, 'reportDefinition'); $document->formatOutput = TRUE; $params['__rdxml'] = XmlUtils::GetXmlFromDom($document); } else { throw new ReportDownloadException('Invalid report definition type: ' . $reportDefinition); } } return $params; }
/** * A typemap conversion function for parsing long values in SOAP responses. * @param string $xml the XML snippet containing the long value. * @return mixed the inner long value as an integer, float, or string */ public static function TypemapLongFromXml($xml) { $document = XmlUtils::GetDomFromXml($xml); $tag = $document->documentElement->localName; $value = $document->documentElement->nodeValue; $isIdField = preg_match('/^id$|Id$|ID$/', $tag); if (!$isIdField) { if (strcmp(strval(intval($value)), $value) === 0) { return intval($value); } elseif (strcmp(sprintf('%.0f', floatval($value)), $value) === 0) { return floatval($value); } } return $value; }
/** * Get an Asset as an XML Dom. * @param string $assetName the XML asset name * @param null|string $ext the extension of the asset, if applicable * @return string the contents of the asset * @throws InvalidArgumentException if theres an issue finding the file * @throws DOMException if the DOM could not be loaded */ public function getAssetAsDom($assetName, $ext = null) { return XmlUtils::GetDomFromXml($this->getAsset($assetName, $ext)); }
/** * Test converting an object to a DOM document. * @param string $expected the expected XML * @param Object $object the object to convert * @covers XmlUtils::ConvertObjectToDocument * @covers XmlUtils::ConvertObjectToElement * @covers XmlUtils::ConvertObjectToNodeValue * @dataProvider ObjectToXmlProvider */ public function testConvertObjectToDocument($object, $expected) { $document = XmlUtils::ConvertObjectToDocument($object, 'root'); $result = XmlUtils::GetXmlFromDom($document); $this->assertEquals($expected, $result); }
/** * @covers XmlSerializer::ConvertObjectToXml * @covers XmlSerializer::ConvertObjectToElement * @covers XmlSerializer::ConvertObjectToNodeValue */ public function testConvertObjectToXmlReportDefinition() { $serializer = new XmlSerializer(); $result = $serializer->ConvertObjectToXml(XmlTestHelper::$REPORT_DEFINITION_OBJECT, 'reportDefinition', false); $this->assertEquals(XmlTestHelper::$REPORT_DEFINITION_XML, XmlUtils::PrettyPrint($result)); }
/** * @covers XmlSerializer::ConvertObjectToXml * @covers XmlSerializer::ConvertObjectToElement * @covers XmlSerializer::ConvertObjectToNodeValue */ public function testConvertObjectToXmlReportDownloadErrorFormatted() { $serializer = new XmlSerializer(); $result = $serializer->ConvertObjectToXml(XmlTestHelper::$REPORT_DOWNLOAD_ERROR_OBJECT, 'reportDownloadError', false); $this->assertEquals(XmlTestHelper::$REPORT_DOWNLOAD_ERROR_FORMATTED_XML, XmlUtils::PrettyPrint($result)); }
/** * Converts an XML representation to objects of proper classes using many * types of information, e.g., the xsi:type attribute. * * @param string $xml the XML representation to be deserialized * @return mixed the converted object */ public function ConvertXmlToObject($xml) { return self::ConvertElementToObject(XmlUtils::GetDomFromXml($xml)->documentElement); }
/** * @covers XmlUtils::PrettyPrint * @dataProvider PrettyXmlProvider */ public function testPrettyPrint($xml, $expected) { $result = XmlUtils::PrettyPrint($xml); $this->assertEquals($expected, $result); }