public function newAction(Request $request) { $locationType = $this->get('campaignchain.core.form.type.location'); $locationType->setBundleName('campaignchain/location-website'); $locationType->setModuleIdentifier('campaignchain-website'); $form = $this->createFormBuilder()->add('URL', 'url', array('label' => 'Website URL', 'constraints' => array(new Url(array('checkDNS' => true)))))->getForm(); $form->handleRequest($request); if ($form->isValid()) { $locationURL = $form->getData()['URL']; $locationName = ParserUtil::getHTMLTitle($locationURL, $locationURL); $locationService = $this->get('campaignchain.core.location'); $locationModule = $locationService->getLocationModule('campaignchain/location-website', 'campaignchain-website'); $location = new Location(); $location->setLocationModule($locationModule); $location->setName($locationName); $location->setUrl($locationURL); // Get the Website's favicon as Channel image if possible. $favicon = ParserUtil::getFavicon($locationURL); if ($favicon) { $locationImage = $favicon; } else { // $locationImage = $this->container->get('templating.helper.assets') // ->getUrl( // 'bundles/campaignchainlocationwebsite/images/icons/256x256/website.png', // null // ); $locationImage = null; } $location->setImage($locationImage); $wizard = $this->get('campaignchain.core.channel.wizard'); $wizard->setName($location->getName()); $repository = $this->getDoctrine()->getRepository('CampaignChainCoreBundle:Location'); if (!$repository->findBy(array('url' => $location->getUrl()))) { $wizard->addLocation($location->getUrl(), $location); try { $channel = $wizard->persist(); $wizard->end(); $this->get('session')->getFlashBag()->add('success', "The Website '" . $location->getUrl() . "' has been connected."); return $this->redirect($this->generateUrl('campaignchain_core_location')); } catch (\Exception $e) { $this->addFlash('warning', "An error occured during the creation of the website location"); $this->get('logger')->addError($e->getMessage()); } } else { $this->addFlash('warning', "The website '" . $location->getUrl() . "' already exists."); } } //return $this->redirect($this->generateUrl( // 'campaignchain_channel_website_page_new', //array('id' => $channel->getLocations()[0]->getId()))); return $this->render('CampaignChainCoreBundle:Base:new.html.twig', array('page_title' => 'Connect Website', 'form' => $form->createView())); }
public function loginAction() { $oauth = $this->get('campaignchain.security.authentication.client.oauth.authentication'); $status = $oauth->authenticate(self::RESOURCE_OWNER, $this->applicationInfo); $profile = $oauth->getProfile(); if ($status) { try { $em = $this->getDoctrine()->getManager(); $em->getConnection()->beginTransaction(); $wizard = $this->get('campaignchain.core.channel.wizard'); $wizard->setName($profile->displayName); // Get the location module. $locationService = $this->get('campaignchain.core.location'); $locationModule = $locationService->getLocationModule('campaignchain/location-twitter', 'campaignchain-twitter-user'); $location = new Location(); $location->setIdentifier($profile->identifier); $location->setName($profile->displayName); $location->setLocationModule($locationModule); $location->setImage($profile->photoURL); $location->setUrl($profile->profileURL); $wizard->addLocation($location->getIdentifier(), $location); $channel = $wizard->persist(); $wizard->end(); $oauth->setLocation($channel->getLocations()[0]); $twitterUser = new TwitterUser(); $twitterUser->setLocation($channel->getLocations()[0]); $twitterUser->setIdentifier($profile->identifier); $twitterUser->setDisplayName($profile->firstName); $twitterUser->setUsername($profile->displayName); $twitterUser->setProfileImageUrl($profile->photoURL); $twitterUser->setProfileUrl($profile->profileURL); $em->persist($twitterUser); // schedule job to get metrics from now on if ($channel->getLocations()[0]->getLocationModule()->getIdentifier() === 'campaignchain-twitter-user') { $this->get('campaignchain.job.report.location.twitter')->schedule($channel->getLocations()[0]); } $em->flush(); $em->getConnection()->commit(); $this->addFlash('success', 'The Twitter location <a href="#">' . $profile->displayName . '</a> was connected successfully.'); } catch (\Exception $e) { $em->getConnection()->rollback(); throw $e; } } else { // A channel already exists that has been connected with this Facebook account $this->addFlash('warning', 'A location has already been connected for this Twitter account.'); } return $this->render('CampaignChainChannelTwitterBundle:Create:login.html.twig', ['redirect' => $this->generateUrl('campaignchain_core_location')]); }
public function loginAction(Request $request) { $oauth = $this->get('campaignchain.security.authentication.client.oauth.authentication'); $status = $oauth->authenticate(self::RESOURCE_OWNER, $this->applicationInfo); $profile = $oauth->getProfile(); if ($status) { try { $em = $this->getDoctrine()->getManager(); $em->getConnection()->beginTransaction(); $wizard = $this->get('campaignchain.core.channel.wizard'); $wizard->setName($profile->displayName); // Get the location module. $locationService = $this->get('campaignchain.core.location'); $locationModule = $locationService->getLocationModule(self::LOCATION_BUNDLE, self::LOCATION_MODULE); $location = new Location(); $location->setIdentifier($profile->identifier); $location->setName($profile->displayName); $location->setUrl($profile->profileURL); $location->setImage($profile->photoURL); $location->setLocationModule($locationModule); $wizard->addLocation($location->getIdentifier(), $location); $channel = $wizard->persist(); $wizard->end(); $oauth->setLocation($channel->getLocations()[0]); $user = new XingUser(); $user->setLocation($channel->getLocations()[0]); $user->setIdentifier($profile->identifier); $user->setDisplayName($profile->displayName); $user->setFirstName($profile->firstName); $user->setLastName($profile->lastName); if (isset($profile->emailVerified)) { $user->setEmail($profile->emailVerified); } else { $user->setEmail($profile->email); } $user->setProfileImageUrl($profile->photoURL); $em->persist($user); $em->flush(); $em->getConnection()->commit(); $this->get('session')->getFlashBag()->add('success', 'The Xing location <a href="#">' . $profile->displayName . '</a> was connected successfully.'); } catch (\Exception $e) { $em->getConnection()->rollback(); throw $e; } } else { $this->get('session')->getFlashBag()->add('warning', 'A location has already been connected for this Xing account.'); } return $this->render('CampaignChainChannelXingBundle:Create:login.html.twig', array('redirect' => $this->generateUrl('campaignchain_core_location'))); }
public function newAction(Request $request) { $locationType = $this->get('campaignchain.core.form.type.location'); $locationType->setBundleName('campaignchain/location-ezplatform'); $locationType->setModuleIdentifier('campaignchain-ezplatform-user'); $form = $this->createFormBuilder()->add('location_name', 'text', array('label' => 'Location name', 'attr' => array('placeholder' => 'For example, "Our corporate website"')))->add('url', 'url', array('label' => 'REST API base URL', 'attr' => array('placeholder' => 'For example, "http://www.example.com/api/ezp/v2/"')))->add('username', 'text', array('attr' => array('placeholder' => 'An eZ Platform user with access to the REST API')))->add('password', 'repeated', array('required' => false, 'type' => 'password', 'first_name' => 'password', 'second_name' => 'password_again', 'invalid_message' => 'The password fields must match.'))->getForm(); $form->handleRequest($request); try { if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->getConnection()->beginTransaction(); $locationName = $form->getData()['location_name']; $url = $form->getData()['url']; $username = $form->getData()['username']; $password = $form->getData()['password']; /* * TODO: Check whether URL exists * TODO: Check that credentials are correct * TODO: Check whether provided URL points to a valid eZ REST API */ $client = $this->container->get('campaignchain.channel.ezplatform.rest.client'); $connection = $client->connect($url, $username, $password); $locationService = $this->get('campaignchain.core.location'); $locationModule = $locationService->getLocationModule('campaignchain/location-ezplatform', 'campaignchain-ezplatform-user'); $location = new Location(); $location->setLocationModule($locationModule); $location->setName($locationName); $location->setUrl($url); $wizard = $this->get('campaignchain.core.channel.wizard'); $wizard->setName($location->getName()); $wizard->addLocation($location->getUrl(), $location); $channel = $wizard->persist(); $wizard->end(); $user = new EZPlatformUser(); $user->setLocation($channel->getLocations()[0]); $user->setUsername($username); $user->setPassword($password); $em->persist($user); $em->flush(); $em->getConnection()->commit(); $this->addFlash('success', 'The eZ Platform <a href="' . $url . '">' . $locationName . '</a> was connected successfully.'); return $this->redirect($this->generateUrl('campaignchain_core_location')); } } catch (\Exception $e) { $em->getConnection()->rollback(); throw $e; } return $this->render('CampaignChainCoreBundle:Base:new.html.twig', array('page_title' => 'Connect eZ Platform Instance', 'form' => $form->createView())); }
public function processContentLocation(Location $location, $data) { $sid = $data['slideshow']; $location->setIdentifier($sid); $location->setName($this->availableSlideshows[$sid]['title']); $location->setUrl($this->availableSlideshows[$sid]['url']); return $location; }
/** * Finds a Location by the URL and automatically creates the Location if it * does not exist and if the respective Location module supports auto * generation of Locations. ** * @param $url * @param $operation Operation * @return bool|Location|null|object */ public function findLocationByUrl($url, $operation, $alias = null) { $url = ParserUtil::sanitizeUrl($url); /* * If not a Location, then see if the URL is inside a connected * Channel's top-level Locations. To do so, check if one of these * criteria apply: * - The Location URL matches the beginning of the CTA URL * - The Location identifier is included in the CTA URL as well * as the domain */ if (ParserUtil::urlExists($url)) { $urlParts = parse_url($url); if ($urlParts['scheme'] == 'http') { $urlAltScheme = str_replace('http://', 'https://', $url); } elseif ($urlParts['scheme'] == 'https') { $urlAltScheme = str_replace('https://', 'http://', $url); } $repository = $this->em->getRepository('CampaignChainCoreBundle:Location'); $query = $repository->createQueryBuilder('location')->where("(:url LIKE CONCAT('%', location.url, '%')) OR " . "(:url_alt_scheme LIKE CONCAT('%', location.url, '%')) OR " . "(" . "location.identifier IS NOT NULL AND " . ":url LIKE CONCAT('%', location.identifier, '%') AND " . "location.url LIKE :host" . ")")->andWhere('location.parent IS NULL')->setParameter('url', $url)->setParameter('url_alt_scheme', $urlAltScheme)->setParameter('host', $urlParts['host'] . '%')->getQuery(); /** @var Location $matchingLocation */ $matchingLocation = $query->getOneOrNullResult(); if ($matchingLocation) { /* * Create a new Location based on the tracking alias * within the matching Location's Channel. * * If no tracking alias was provided, we take the * default LocationModule to create a new Location. */ if (!$alias) { // Done if the URL is exactly the same in the matching Location. if ($matchingLocation->getUrl() == $url || $matchingLocation->getUrl() == $urlAltScheme) { return $matchingLocation; } // Let's move on to create a new Location with the default module. $locationService = $this->container->get('campaignchain.core.location'); /** @var LocationModule $locationModule */ $locationModule = $locationService->getLocationModule(self::DEFAULT_LOCATION_BUNDLE_NAME, self::DEFAULT_LOCATION_MODULE_IDENTIFIER); if (!$locationModule) { throw new \Exception('No Location module found for bundle "' . $matchingLocation->getChannel()->getBundle()->getName() . ' and module ' . $matchingLocation->getChannel()->getChannelModule()->getIdentifier() . '"'); } } else { /* * Get the Location module within the matching Location's * Channel and with the given tracking alias. */ /** @var LocationModule $locationModule */ $locationModule = $this->getLocationModuleByTrackingAlias($matchingLocation->getChannel()->getChannelModule(), $alias); // Done if the matching Location also matches the alias and URL. if ($matchingLocation->getLocationModule() == $locationModule && ($matchingLocation->getUrl() == $url || $matchingLocation->getUrl() == $urlAltScheme)) { return $matchingLocation; } /* * See if there is already another Location that matches the * aliase's Location module and the URL. */ $repository = $this->em->getRepository('CampaignChainCoreBundle:Location'); $query = $repository->createQueryBuilder('location')->where('location.locationModule = :locationModule')->andWhere('(location.url = :url OR location.url = :url_alt_scheme')->setParameter('locationModule', $locationModule)->setParameter('url', $url)->setParameter('url_alt_scheme', $urlAltScheme)->getQuery(); /** @var Location $location */ $location = $query->getOneOrNullResult(); // We found an existing Location, we're done. if ($location) { return $location; } if (!$locationModule) { throw new \Exception('Cannot map tracking alias "' . $alias . '" to a "' . 'Location module that belongs to Channel module "' . $matchingLocation->getChannel()->getBundle()->getName() . '/' . $matchingLocation->getChannel()->getChannelModule()->getIdentifier() . '"'); } } /* * If the matching Location provides auto-generation of Locations, * then let's create a new child Location. */ $ctaServiceName = $locationModule->getServices()['job_cta']; if ($ctaServiceName) { // Create the new Location $location = new Location(); $location->setUrl($url); $location->setOperation($operation); $location->setChannel($matchingLocation->getChannel()); $location->setParent($matchingLocation); // Update the Location module to be the current // one. $location->setLocationModule($locationModule); // Let the module's service process the new // Location. $ctaService = $this->container->get($ctaServiceName); return $ctaService->execute($location); } else { throw new \Exception('No CTA Job service defined for Location module ' . 'of bundle "' . $locationModule->getBundle()->getName() . '" ' . 'and module "' . $locationModule->getIdentifier() . '"'); } } else { return false; } } throw new \Exception('The URL ' . $url . ' does not exist.'); }
public function createLocationAction(Request $request) { $selectedIds = $request->get('google-analytics-profile-id', []); if (empty($selectedIds)) { $this->addFlash('warning', 'Please select at least one Google Analytics property'); return $this->redirectToRoute('campaignchain_channel_google_analytics_list_properties'); } /** @var Token $token */ $token = $request->getSession()->get('token'); $em = $this->getDoctrine()->getManager(); $token = $em->merge($token); $websiteChannelModule = $em->getRepository('CampaignChainCoreBundle:ChannelModule')->findOneBy(['identifier' => 'campaignchain-website']); $googleAnalyticsChannelModule = $em->getRepository('CampaignChainCoreBundle:ChannelModule')->findOneBy(['identifier' => 'campaignchain-google-analytics']); foreach ($selectedIds as $analyticsId) { list($accountId, $propertyId, $profileId) = explode('|', $analyticsId); $analyticsClient = $this->get('campaignchain_report_google_analytics.service_client')->getService($token); /** @var \Google_Service_Analytics_Profile $profile */ $profile = $analyticsClient->management_profiles->get($accountId, $propertyId, $profileId); $wizard = $this->get('campaignchain.core.channel.wizard'); $wizard->start(new Channel(), $googleAnalyticsChannelModule); $wizard->setName($profile->getName()); // Get the location module. $locationService = $this->get('campaignchain.core.location'); $locationModule = $locationService->getLocationModule('campaignchain/location-google-analytics', 'campaignchain-google-analytics'); $location = new Location(); $location->setIdentifier($profile->getId()); $location->setName($profile->getName()); $location->setLocationModule($locationModule); $google_base_url = 'https://www.google.com/analytics/web/#report/visitors-overview/'; $location->setUrl($google_base_url . 'a' . $profile->getAccountId() . 'w' . $profile->getInternalWebPropertyId() . 'p' . $profile->getId()); $em->persist($location); try { $em->flush(); } catch (UniqueConstraintViolationException $e) { //This GA endpoint is already connected $this->addFlash('warning', 'The Google Analytics Property <a href="#">' . $profile->getName() . '</a> is already connected.'); continue; } $wizard->addLocation($location->getIdentifier(), $location); $wizard->persist(); $wizard->end(); //Check if the if the belonging website location exists, if not create a new website location $website = $em->getRepository('CampaignChainCoreBundle:Location')->findOneByUrl($profile->getWebsiteUrl()); //Create website location that belongs to the GA location if (!$website) { $websiteLocationModule = $locationService->getLocationModule('campaignchain/location-website', 'campaignchain-website'); $websiteLocationName = ParserUtil::getHTMLTitle($profile->getWebsiteUrl()); $websiteLocation = new Location(); $websiteLocation->setLocationModule($websiteLocationModule); $websiteLocation->setName($websiteLocationName); $websiteLocation->setUrl($profile->getWebsiteUrl()); $em->persist($websiteLocation); $wizard->start(new Channel(), $websiteChannelModule); $wizard->setName($websiteLocationName); $wizard->addLocation($profile->getWebsiteUrl(), $websiteLocation); $wizard->persist(); $website = $websiteLocation; } $entityToken = clone $token; $entityToken->setLocation($location); $entityToken->setApplication($token->getApplication()); $em->persist($entityToken); $analyticsProfile = new Profile(); $analyticsProfile->setAccountId($profile->getAccountId()); $analyticsProfile->setPropertyId($profile->getWebPropertyId()); $analyticsProfile->setProfileId($profile->getId()); $analyticsProfile->setIdentifier($profile->getId()); $analyticsProfile->setDisplayName($profile->getName()); $analyticsProfile->setLocation($location); $analyticsProfile->setBelongingLocation($website); $em->persist($analyticsProfile); $em->flush(); $this->addFlash('success', 'The Google Analytics Property <a href="#">' . $profile->getName() . '</a> was connected successfully.'); } return $this->redirectToRoute('campaignchain_core_location'); }
public function processActivityLocation(Location $location) { $location->setUrl(self::LINK_ADMIN_CAMPAIGNS); return $location; }
public function handleCompanyPageCreation(Location $location) { $this->channelWizard->setName($location->getName()); $pagesData = $this->channelWizard->get('pagesData'); $pageData = $pagesData[$location->getIdentifier()]; $companyLink = 'https://www.linkedin.com/company/' . $pageData['id']; $location->setUrl($companyLink); $page = new Page(); $page->setLocation($location); $page->setIdentifier($pageData['id']); $page->setDisplayName($pageData['name']); $page->setDescription($pageData['description']); $page->setLink($companyLink); $page->setWebsiteLink($pageData['websiteUrl']); // Remember the user object in the Wizard. $this->channelWizard->set($page->getIdentifier(), $page); $flashBagMsg = $this->channelWizard->get('flashBagMsg'); $flashBagMsg .= '<li>Page: <a href="' . $page->getLink() . '">' . $page->getDisplayName() . '</a></li>'; $this->channelWizard->set('flashBagMsg', $flashBagMsg); }
public function processContentLocation(Location $location, $data) { $location->setIdentifier($this->remoteWebinar['webinarKey']); $location->setName($this->remoteWebinar['subject']); $location->setUrl($this->remoteWebinar['registrationUrl']); return $location; }
public function newAction(Request $request) { $locationType = $this->get('campaignchain.core.form.type.location'); $locationType->setBundleName('campaignchain/location-slideshare'); $locationType->setModuleIdentifier('campaignchain-slideshare'); $form = $this->createFormBuilder()->add('username', 'text')->add('password', 'repeated', array('required' => false, 'type' => 'password', 'first_name' => 'password', 'second_name' => 'password_again', 'invalid_message' => 'The password fields must match.'))->getForm(); $form->handleRequest($request); try { if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->getConnection()->beginTransaction(); $locationUsername = $form->getData()['username']; $locationPassword = $form->getData()['password']; /* $oauthApp = $this->get('campaignchain.security.authentication.client.oauth.application'); $application = $oauthApp->getApplication(self::RESOURCE_OWNER); $ts = time(); $client = new \Guzzle\Http\Client; $request = $client->createRequest('GET', 'https://www.slideshare.net/api/2/get_user_tags'); $query = $request->getQuery(); $query->set('api_key', $application->getKey()); $query->set('ts', $ts); $query->set('hash', sha1($application->getSecret().$ts)); $query->set('username', $locationUsername); $query->set('password', $locationPassword); $response = $request->send(); $xml = $response->xml(); */ $oauthApp = $this->get('campaignchain.security.authentication.client.oauth.application'); $application = $oauthApp->getApplication(self::RESOURCE_OWNER); $client = $this->container->get('campaignchain.channel.slideshare.rest.client'); $connection = $client->connect($application->getKey(), $application->getSecret(), $locationUsername, $locationPassword); $xml = $connection->getUserTags(); if (isset($xml->Message) && strtolower($xml->Message) == 'failed user authentication') { throw new \Exception('The credentials provided are invalid'); } $locationURL = 'http://www.slideshare.net/' . $locationUsername; $locationService = $this->get('campaignchain.core.location'); $locationModule = $locationService->getLocationModule('campaignchain/location-slideshare', 'campaignchain-slideshare-user'); $location = new Location(); $location->setLocationModule($locationModule); $location->setName($locationUsername); $location->setUrl($locationURL); /* * If user uploaded an image, use that as the Location image, * otherwise, take the SlideShare default profile image. */ $slideShareUserImage = 'http://cdn.slidesharecdn.com/profile-photo-' . $locationUsername . '-96x96.jpg'; try { getimagesize($slideShareUserImage); } catch (\Exception $e) { $slideShareUserImage = 'http://public.slidesharecdn.com/b/images/user-96x96.png'; } $location->setImage($slideShareUserImage); $wizard = $this->get('campaignchain.core.channel.wizard'); $wizard->setName($location->getName()); $wizard->addLocation($location->getUrl(), $location); $channel = $wizard->persist(); $wizard->end(); $slideshareUser = new SlideShareUser(); $slideshareUser->setLocation($channel->getLocations()[0]); $slideshareUser->setIdentifier($locationUsername); $slideshareUser->setPassword($locationPassword); $slideshareUser->setDisplayName($locationUsername); $em->persist($slideshareUser); $em->flush(); $em->getConnection()->commit(); $this->get('session')->getFlashBag()->add('success', 'The Slideshare location <a href="#">' . $locationUsername . '</a> was connected successfully.'); return $this->redirect($this->generateUrl('campaignchain_core_location')); } } catch (\Exception $e) { $em->getConnection()->rollback(); throw $e; } return $this->render('CampaignChainCoreBundle:Base:new.html.twig', array('page_title' => 'Connect SlideShare Account', 'form' => $form->createView())); }