/**
  * @return PublisherSubscriberManager
  */
 public static function getInstance()
 {
     if (!is_object(self::$instance)) {
         self::$instance = new PublisherSubscriberManager();
     }
     return self::$instance;
 }
예제 #2
0
 public function onBeforeDelete()
 {
     if ($this->triggered) {
         return;
     }
     $this->triggered = true;
     PublisherSubscriberManager::getInstance()->publish(ISummitEntityEvent::DeletedEntity, array($this->owner));
 }
 private function __construct()
 {
     $this_var = $this;
     PublisherSubscriberManager::getInstance()->subscribe('dataobject_publish', function ($do) use($this_var) {
         $this_var->update();
     });
     PublisherSubscriberManager::getInstance()->subscribe('dataobject_unpublish', function ($do) use($this_var) {
         $this_var->update();
     });
 }
예제 #4
0
    if ($join_table !== 'SummitAttendee_Schedule') {
        return;
    }
    $attendee_id = $list->getForeignID();
    $attendee = SummitAttendee::get()->byID($attendee_id);
    $metadata = '';
    $event = new SummitEntityEvent();
    $event->EntityClassName = 'MySchedule';
    $event->EntityID = $item->ID;
    $event->Type = 'INSERT';
    $event->OwnerID = $attendee->MemberID;
    $event->SummitID = $summit_id;
    $event->Metadata = $metadata;
    $event->write();
});
PublisherSubscriberManager::getInstance()->subscribe('manymanylist_removed_item', function ($list, $item) {
    if (!$item instanceof ISummitEvent) {
        return;
    }
    $summit_id = $item->getField("SummitID");
    if (is_null($summit_id) || $summit_id == 0) {
        $summit_id = Summit::ActiveSummitID();
    }
    $metadata = '';
    $join_table = $list->getJoinTable();
    if ($join_table !== 'SummitAttendee_Schedule') {
        return;
    }
    $attendee_id = $list->getForeignID();
    $attendee = SummitAttendee::get()->byID($attendee_id);
    $event = new SummitEntityEvent();
예제 #5
0
<?php

/**
 * Copyright 2015 OpenStack Foundation
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 **/
PublisherSubscriberManager::getInstance()->subscribe('survey_organization_selected', function ($member, $organization_name) {
    //create the affiliation as current
    $organization_name = Convert::raw2sql(trim($organization_name));
    if (!empty($organization_name)) {
        $org = Org::get()->filter(array('Name' => $organization_name))->first();
        if (!$org) {
            $org = new Org();
            $org->Name = $organization_name;
            $org->IsStandardizedOrg = false;
            $org->write();
            //register new request
            $new_request = new OrganizationRegistrationRequest();
            $new_request->MemberID = $member->getIdentifier();
            $new_request->OrganizationID = $org->ID;
            $new_request->write();
        }
        // If a new org name was provided for the member, find / create the new org and update the member record
예제 #6
0
 function doRegister($data, $form)
 {
     if (!isset($data["Affiliations"]) || empty($data["Affiliations"])) {
         //Set error message
         $form->AddErrorMessage('Affiliations', "Sorry, You must at least enter one valid Affiliation.", 'bad');
         //Set form data from submitted values
         Session::set("FormInfo.Form_RegistrationForm.data", $data);
         //Return back to form
         return $this->redirectBack();
     }
     $new_affiliations = json_decode($data["Affiliations"]);
     //Check for existing member email address
     if ($member = Member::get()->filter('Email', Convert::raw2sql($data['Email']))->first()) {
         //Set error message
         $form->AddErrorMessage('Email', "Sorry, that email address already exists. Please choose another.", 'bad');
         //Set form data from submitted values
         Session::set("FormInfo.Form_RegistrationForm.data", $data);
         //Return back to form
         return $this->redirectBack();
     }
     //Otherwise create new member and log them in
     $Member = new Member();
     $form->saveInto($Member);
     if (isset($data['Gender'])) {
         $Gender = $data['Gender'];
         if ($Gender != 'Male' && $Gender != 'Female' && $Gender != 'Prefer not to say') {
             $Member->Gender = Convert::raw2sql($data['GenderSpecify']);
         }
     }
     $Member->write();
     if ($data['MembershipType'] == 'foundation') {
         $Member->upgradeToFoundationMember();
     } else {
         $Member->convert2SiteUser();
     }
     //Find or create the 'user' group
     if (!($userGroup = Group::get()->filter('Code', 'users')->first())) {
         $userGroup = new Group();
         $userGroup->Code = "users";
         $userGroup->Title = "Users";
         $userGroup->Write();
         $Member->Groups()->add($userGroup);
     }
     //Add member to user group
     $Member->Groups()->add($userGroup);
     foreach ($new_affiliations as $key => $newAffiliation) {
         $dbAffiliation = new Affiliation();
         $org_name = Convert::raw2sql($newAffiliation->OrgName);
         $org_name = trim($org_name);
         AffiliationController::Save($dbAffiliation, $newAffiliation, $org_name, $Member);
     }
     PublisherSubscriberManager::getInstance()->publish('new_user_registered', array($Member->ID));
     //Get profile page
     if ($ProfilePage = EditProfilePage::get()->first()) {
         //send Thank you email
         $config = SiteConfig::current_site_config();
         if ($config->RegistrationSendMail && !empty($config->RegistrationFromMessage) && !empty($config->RegistrationSubjectMessage) && !empty($config->RegistrationHTMLMessage) && !empty($config->RegistrationPlainTextMessage)) {
             $registration_email = new CustomEmail($config->RegistrationFromMessage, $Member->Email, $data['MembershipType'] == 'foundation' ? 'Thank you for becoming an OpenStack Foundation Member' : 'Thank you for becoming an OpenStack Community Member', $config->RegistrationHTMLMessage, $config->RegistrationPlainTextMessage);
             $registration_email->send();
         }
         //Redirect to profile page with success message
         return OpenStackIdCommon::loginMember($member, $ProfilePage->Link('?success=1'));
     }
 }
예제 #7
0
<?php

/**
 * Copyright 2014 Openstack Foundation
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 **/
//decorators
Object::add_extension('Member', 'ICLAMemberDecorator');
Object::add_extension('Company', 'ICLACompanyDecorator');
Object::add_extension('SangriaPage_Controller', 'SangriaPageICLACompaniesExtension');
Object::add_extension('EditProfilePage_Controller', 'EditProfilePageICLAExtension');
PublisherSubscriberManager::getInstance()->subscribe('new_user_registered', function ($member_id) {
    //check if user has pending invitations
    $team_manager = new CCLATeamManager(new SapphireTeamInvitationRepository(), new SapphireCLAMemberRepository(), new TeamInvitationFactory(), new TeamFactory(), new CCLAValidatorFactory(), new SapphireTeamRepository(), SapphireTransactionManager::getInstance());
    $team_manager->verifyInvitations($member_id, new TeamInvitationEmailSender(new SapphireTeamInvitationRepository()));
});
예제 #8
0
 /**
  * Register an speaker and confirm the registration request if exists
  * @param array $data
  * @param IMessageSenderService $sender_service
  * @return Member
  * @throws EntityValidationException
  * @throws Exception
  */
 public function registerSpeaker(array $data, IMessageSenderService $sender_service)
 {
     $repository = $this->repository;
     $group_repository = $this->group_repository;
     $factory = $this->factory;
     $group_factory = $this->group_factory;
     $speaker_registration_request_manager = $this->speaker_registration_request_manager;
     try {
         return $this->tx_manager->transaction(function () use($data, $repository, $group_repository, $factory, $group_factory, $speaker_registration_request_manager, $sender_service) {
             $mandatory_fields = array('Email' => 'Email', 'FirstName' => 'First Name', 'Surname' => 'Surname', 'Password' => 'Password');
             foreach ($mandatory_fields as $mf => $fn) {
                 if (!isset($data[$mf]) || empty($data[$mf])) {
                     throw new EntityValidationException(sprintf('%s is a mandatory field!.', $fn));
                 }
             }
             if (!isset($data['Password']['_Password']) || !isset($data['Password']['_ConfirmPassword']) || $data['Password']['_ConfirmPassword'] !== $data['Password']['_Password']) {
                 throw new EntityValidationException('Password is a mandatory field!.');
             }
             $old_member = $repository->findByEmail(Convert::raw2sql($data['Email']));
             if (!is_null($old_member)) {
                 throw new EntityValidationException('Sorry, that email address already exists. Please choose another.');
             }
             $member = $factory->buildReduced($data);
             $member->write();
             $member->convert2SiteUser();
             $speakers_group = $group_repository->getByCode(ISecurityGroupFactory::SpeakersGroupCode);
             if (is_null($speakers_group)) {
                 // create group
                 $speakers_group = $group_factory->build(ISecurityGroupFactory::SpeakersGroupCode);
                 $speakers_group->write();
             }
             $member->addToGroupByCode(ISecurityGroupFactory::SpeakersGroupCode);
             if (!empty($data[SpeakerRegistrationRequest::ConfirmationTokenParamName])) {
                 $speaker_registration_token = $data[SpeakerRegistrationRequest::ConfirmationTokenParamName];
                 $speaker_registration_request_manager->confirm($speaker_registration_token, $member);
             }
             if (!is_null($sender_service)) {
                 $sender_service->send($member);
             }
             //force write,
             $member->write();
             PublisherSubscriberManager::getInstance()->publish('new_user_registered', array($member->ID));
             return $member;
         });
     } catch (EntityValidationException $ex1) {
         SS_Log::log($ex1->getMessage(), SS_Log::WARN);
         throw $ex1;
     } catch (Exception $ex) {
         SS_Log::log($ex->getMessage(), SS_Log::ERR);
         throw $ex;
     }
 }
예제 #9
0
 /**
  * @param $member_id
  * @param $event_id
  * @return mixed
  */
 public function removeEventFromSchedule($member_id, $event_id)
 {
     $this_var = $this;
     $summitevent_repository = $this->summitevent_repository;
     $attendee_repository = $this->attendee_repository;
     return $this->tx_manager->transaction(function () use($this_var, $member_id, $event_id, $attendee_repository, $summitevent_repository) {
         $event = $summitevent_repository->getById($event_id);
         if (!$event) {
             throw new NotFoundEntityException('Event', sprintf('id %s', $event_id));
         }
         $attendee = $attendee_repository->getByMemberAndSummit($member_id, $event->Summit->getIdentifier());
         if (!$attendee) {
             throw new NotFoundEntityException('Attendee', sprintf('id %s', $event_id));
         }
         $attendee->removeFromSchedule($event);
         PublisherSubscriberManager::getInstance()->publish(ISummitEntityEvent::RemovedToSchedule, array($member_id, $event));
         return $attendee;
     });
 }
예제 #10
0
 /**
  * @param array $data
  * @param ISurveyStep $current_step
  * @return ISurveyStep
  */
 public function completeStep(ISurveyStep $current_step, array $data)
 {
     $template_repository = $this->template_repository;
     $survey_repository = $this->survey_repository;
     $survey_builder = $this->survey_builder;
     $member_repository = $this->member_repository;
     return $this->tx_manager->transaction(function () use($current_step, $data, $survey_builder, $member_repository, $template_repository, $survey_repository) {
         $current_survey = $current_step->survey();
         if ($current_step instanceof ISurveyRegularStep) {
             $current_step->clearAnswers();
             foreach ($current_step->template()->getQuestions() as $q) {
                 if (isset($data[$q->name()])) {
                     // its has an answer set
                     if ($q->name() === SurveyOrganizationQuestionTemplate::FieldName) {
                         //publish event
                         PublisherSubscriberManager::getInstance()->publish('survey_organization_selected', array($current_survey->createdBy(), $data[$q->name()]));
                     }
                     $current_step->addAnswer($survey_builder->buildAnswer($q, $data[$q->name()]));
                 }
             }
         }
         return $current_survey->completeCurrentStep();
     });
 }
예제 #11
0
 public function onBeforeDelete()
 {
     PublisherSubscriberManager::getInstance()->publish(ISummitEntityEvent::DeletedEntity, array($this->owner));
 }
 /**
  * @return void
  */
 public function onAfterUnpublish()
 {
     PublisherSubscriberManager::getInstance()->publish('dataobject_unpublish', array($this));
 }
예제 #13
0
 /**
  * @param array $data
  * @param EditProfilePage $profile_page
  * @param IMessageSenderService $sender_service
  * @return null
  * @throws Exception
  */
 public function register(array $data, EditProfilePage $profile_page, IMessageSenderService $sender_service)
 {
     $repository = $this->repository;
     $group_repository = $this->group_repository;
     $factory = $this->factory;
     $group_factory = $this->group_factory;
     $affiliation_factory = $this->affiliation_factory;
     $org_repository = $this->org_repository;
     $org_factory = $this->org_factory;
     // we use an external ref to member bc is there is any error on TX, Member table does not
     // support transactions bc its MyISam
     $member = null;
     try {
         $this->tx_manager->transaction(function () use($data, $profile_page, $repository, $group_repository, $org_repository, $factory, $group_factory, $affiliation_factory, $org_factory, $sender_service, &$member) {
             if (!isset($data["HiddenAffiliations"]) || empty($data["HiddenAffiliations"])) {
                 throw new EntityValidationException(array('You must at least enter one valid Affiliation.'));
             }
             $old_member = $repository->findByEmail(Convert::raw2sql($data['Email']));
             if (!is_null($old_member)) {
                 throw new EntityValidationException(array('Sorry, that email address already exists. Please choose another.'));
             }
             $member = $factory->build($data);
             //force write, will write immediatly bc MyIsam engine
             $member->write();
             $affiliations_data = json_decode($data["HiddenAffiliations"]);
             if (is_null($affiliations_data)) {
                 throw new EntityValidationException(array('You must at least enter one valid Affiliation.'));
             }
             if ($data['MembershipType'] === 'foundation') {
                 $member->upgradeToFoundationMember();
             } else {
                 $member->convert2SiteUser();
             }
             $users_group = $group_repository->getByCode(ISecurityGroupFactory::UsersGroupCode);
             if (is_null($users_group)) {
                 // create group
                 $users_group = $group_factory->build(ISecurityGroupFactory::UsersGroupCode);
                 $users_group->write();
             }
             $member->addToGroupByCode(ISecurityGroupFactory::UsersGroupCode);
             foreach ($affiliations_data as $key => $d) {
                 $org_name = trim($d->OrgName);
                 $org = $org_repository->getByName($org_name);
                 if (is_null($org)) {
                     $org = $org_factory->build($org_name);
                     $org->write();
                 }
                 $affiliation = $affiliation_factory->build($d, $member, $org);
                 $affiliation->write();
             }
             if (!is_null($profile_page)) {
                 $sender_service->send($member);
             }
             //force write,
             $member->write();
             return $member;
         });
     } catch (Exception $ex) {
         if (!is_null($member)) {
             $member->delete();
         }
         throw $ex;
     }
     PublisherSubscriberManager::getInstance()->publish('new_user_registered', array($member->ID));
     return $member;
 }
 public function remove($item)
 {
     parent::remove($item);
     PublisherSubscriberManager::getInstance()->publish('manymanylist_removed_item', array($this, $item));
 }