/** * Retrieves the Injector instance * * @return \Injector */ protected function getInjector() { if ($this->injector === null) { $this->injector = \Injector::inst(); } return $this->injector; }
public static function authenticate($email, $password) { $authenticator = \Injector::inst()->get('ApiMemberAuthenticator'); if ($user = $authenticator->authenticate(['Password' => $password, 'Email' => $email])) { return self::createSession($user); } }
/** * @return FixtureFactory */ public function getFixtureFactory() { if (!$this->fixtureFactory) { $this->fixtureFactory = \Injector::inst()->create('BehatFixtureFactory'); } return $this->fixtureFactory; }
public function __construct() { $this->session = Injector::inst()->create('Session', array()); $this->controller = new Controller(); $this->controller->setSession($this->session); $this->controller->pushCurrent(); }
/** * Get the appropriate {@link CatalogueProductController} or * {@link CatalogueProductController} for handling the relevent * object. * * @param $object Either Product or Category object * @param string $action * @return CatalogueController */ protected static function controller_for($object, $action = null) { if ($object->class == 'CatalogueProduct') { $controller = "CatalogueProductController"; } elseif ($object->class == 'CatalogueCategory') { $controller = "CatalogueCategoryController"; } else { $ancestry = ClassInfo::ancestry($object->class); while ($class = array_pop($ancestry)) { if (class_exists($class . "_Controller")) { break; } } // Find the controller we need, or revert to a default if ($class !== null) { $controller = "{$class}_Controller"; } elseif (ClassInfo::baseDataClass($object->class) == "CatalogueProduct") { $controller = "CatalogueProductController"; } elseif (ClassInfo::baseDataClass($object->class) == "CatalogueCategory") { $controller = "CatalogueCategoryController"; } } if ($action && class_exists($controller . '_' . ucfirst($action))) { $controller = $controller . '_' . ucfirst($action); } return class_exists($controller) ? Injector::inst()->create($controller, $object) : $object; }
public function updateItemEditForm($form) { if ($id = $this->owner->request->getVar('ID')) { Injector::inst()->get("CMSMain")->setCurrentPageID($id); $form->Fields()->push(new HiddenField('ID', '', $id)); } }
/** * Creates a member in a group with the correct permissions. * Example: Given I am logged in with "ADMIN" permissions * * @Given /^I am logged in with "([^"]*)" permissions$/ */ function iAmLoggedInWithPermissions($permCode) { if (!isset($this->cache_generatedMembers[$permCode])) { $group = \Group::get()->filter('Title', "{$permCode} group")->first(); if (!$group) { $group = \Injector::inst()->create('Group'); } $group->Title = "{$permCode} group"; $group->write(); $permission = \Injector::inst()->create('Permission'); $permission->Code = $permCode; $permission->write(); $group->Permissions()->add($permission); $member = \DataObject::get_one('Member', sprintf('"Email" = \'%s\'', "{$permCode}@example.org")); if (!$member) { $member = \Injector::inst()->create('Member'); } // make sure any validation for password is skipped, since we're not testing complexity here $validator = \Member::password_validator(); \Member::set_password_validator(null); $member->FirstName = $permCode; $member->Surname = "User"; $member->Email = "{$permCode}@example.org"; $member->PasswordEncryption = "none"; $member->changePassword('Secret!123'); $member->write(); $group->Members()->add($member); \Member::set_password_validator($validator); $this->cache_generatedMembers[$permCode] = $member; } return new Step\Given(sprintf('I log in with "%s" and "%s"', "{$permCode}@example.org", 'Secret!123')); }
public function setUp() { parent::setUp(); // mock the real api $this->api = $this->getMock('\\Acquia\\Pingdom\\PingdomApi', ['request'], ["*****@*****.**", "password", "token"]); Injector::inst()->registerService($this->api, 'PingdomService'); }
public function connect() { if (!($member = Member::currentUser())) { /** @var stdClass $params */ $params = $this->getAccessToken($this->request->getVar('code')); // member is not currently logged into SilverStripe. Look up // for a member with the UID which matches first. $member = Member::get()->filter(array("VkUID" => $params->user_id))->first(); if (!$member) { // see if we have a match based on email. From a // security point of view, users have to confirm their // email address in facebook so doing a match up is fine $email = $params->email; if ($email) { $member = Member::get()->filter(array('Email' => $email))->first(); } } if (!$member) { $member = Injector::inst()->create('Member'); $member->syncVkDetails($this->getUserInfo()); } } $member->logIn(true); // redirect the user to the provided url, otherwise take them // back to the route of the website. if ($url = Session::get(VkControllerExtension::SESSION_REDIRECT_URL_FLAG)) { return $this->redirect($url); } else { return $this->redirect(Director::absoluteBaseUrl()); } }
public function getEditForm($id = null, $fields = null) { // TODO Duplicate record fetching (see parent implementation) if (!$id) { $id = $this->currentPageID(); } $form = parent::getEditForm($id); // TODO Duplicate record fetching (see parent implementation) $record = $this->getRecord($id); if ($record && !$record->canView()) { return Security::permissionFailure($this); } $memberList = GridField::create('Members', false, Member::get(), $memberListConfig = GridFieldConfig_RecordEditor::create()->addComponent(new GridFieldButtonRow('after'))->addComponent(new GridFieldExportButton('buttons-after-left')))->addExtraClass("members_grid"); if ($record && method_exists($record, 'getValidator')) { $validator = $record->getValidator(); } else { $validator = Injector::inst()->get('Member')->getValidator(); } $memberListConfig->getComponentByType('GridFieldDetailForm')->setValidator($validator); $groupList = GridField::create('Groups', false, Group::get(), GridFieldConfig_RecordEditor::create()); $columns = $groupList->getConfig()->getComponentByType('GridFieldDataColumns'); $columns->setDisplayFields(array('Breadcrumbs' => singleton('Group')->fieldLabel('Title'))); $columns->setFieldFormatting(array('Breadcrumbs' => function ($val, $item) { return Convert::raw2xml($item->getBreadcrumbs(' > ')); })); $fields = new FieldList($root = new TabSet('Root', $usersTab = new Tab('Users', _t('SecurityAdmin.Users', 'Users'), $memberList, new LiteralField('MembersCautionText', sprintf('<p class="caution-remove"><strong>%s</strong></p>', _t('SecurityAdmin.MemberListCaution', 'Caution: Removing members from this list will remove them from all groups and the' . ' database')))), $groupsTab = new Tab('Groups', singleton('Group')->i18n_plural_name(), $groupList)), new HiddenField('ID', false, 0)); // Add import capabilities. Limit to admin since the import logic can affect assigned permissions if (Permission::check('ADMIN')) { $fields->addFieldsToTab('Root.Users', array(new HeaderField(_t('SecurityAdmin.IMPORTUSERS', 'Import users'), 3), new LiteralField('MemberImportFormIframe', sprintf('<iframe src="%s" id="MemberImportFormIframe" width="100%%" height="250px" frameBorder="0">' . '</iframe>', $this->Link('memberimport'))))); $fields->addFieldsToTab('Root.Groups', array(new HeaderField(_t('SecurityAdmin.IMPORTGROUPS', 'Import groups'), 3), new LiteralField('GroupImportFormIframe', sprintf('<iframe src="%s" id="GroupImportFormIframe" width="100%%" height="250px" frameBorder="0">' . '</iframe>', $this->Link('groupimport'))))); } // Tab nav in CMS is rendered through separate template $root->setTemplate('CMSTabSet'); // Add roles editing interface if (Permission::check('APPLY_ROLES')) { $rolesField = GridField::create('Roles', false, PermissionRole::get(), GridFieldConfig_RecordEditor::create()); $rolesTab = $fields->findOrMakeTab('Root.Roles', _t('SecurityAdmin.TABROLES', 'Roles')); $rolesTab->push($rolesField); } $actionParam = $this->getRequest()->param('Action'); if ($actionParam == 'groups') { $groupsTab->addExtraClass('ui-state-active'); } elseif ($actionParam == 'users') { $usersTab->addExtraClass('ui-state-active'); } elseif ($actionParam == 'roles') { $rolesTab->addExtraClass('ui-state-active'); } $actions = new FieldList(); $form = Form::create($this, 'EditForm', $fields, $actions)->setHTMLID('Form_EditForm'); $form->addExtraClass('cms-edit-form'); $form->setTemplate($this->getTemplatesWithSuffix('_EditForm')); // Tab nav in CMS is rendered through separate template if ($form->Fields()->hasTabset()) { $form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet'); } $form->addExtraClass('center ss-tabset cms-tabset ' . $this->BaseCSSClasses()); $form->setAttribute('data-pjax-fragment', 'CurrentForm'); $this->extend('updateEditForm', $form); return $form; }
/** * @return HybridSessionStore_Cookie */ protected function getStore() { $store = Injector::inst()->get('HybridSessionStore'); $store->setKey(uniqid()); $store->open(getTempFolder() . '/' . __CLASS__, 'SESSIONCOOKIE'); return $store; }
public function process() { $nextTask = DevTaskRun::get_next_task(); if ($nextTask) { //create task instance $task = Injector::inst()->create($nextTask->Task); //get params $params = explode(' ', $nextTask->Params); $paramList = array(); if ($params) { foreach ($params as $param) { $parts = explode('=', $param); if (count($parts) === 2) { $paramList[$parts[0]] = $parts[1]; } } } echo 'Starting task ' . $task->getTitle() . "\n"; //remove so it doesn't get rerun $nextTask->Status = 'Running'; $nextTask->write(); $request = new SS_HTTPRequest('GET', 'dev/tasks/' . $nextTask->Task, $paramList); $task->run($request); $nextTask->Status = 'Finished'; $nextTask->FinishDate = SS_Datetime::now()->getValue(); $nextTask->write(); echo 'Finished task ' . $task->getTitle() . "\n"; } }
public function onAfterWrite() { $config = Config::inst(); $sitetreeclasses = $config->get('ImageEditCacheBust', 'SiteTree'); $dataobjectclasses = $config->get('ImageEditCacheBust', 'DataObject'); $stages = $config->get('ImageEditCacheBust', 'Stages'); if ($sitetreeclasses) { // deal with SiteTree first foreach ($sitetreeclasses as $clazz => $idfield) { $instanceofclass = Injector::inst()->create($clazz); $objectsWithImage = $instanceofclass::get()->filter($idfield, $this->owner->ID); foreach ($objectsWithImage as $objectWithImage) { foreach ($stages as $stage) { $suffix = '_' . $stage; $suffix = str_replace('_Stage', '', $suffix); $sql = "UPDATE `SiteTree{$suffix}` SET LastEdited=NOW() where ID=" . $objectWithImage->ID; DB::query($sql); } } } } if ($dataobjectclasses) { // deal with SiteTree first foreach ($dataobjectclasses as $clazz => $idfield) { $instanceofclass = Injector::inst()->create($clazz); $objectsWithImage = $instanceofclass::get()->filter($idfield, $this->owner->ID); foreach ($objectsWithImage as $objectWithImage) { $sql = "UPDATE `{$clazz}` SET LastEdited=NOW() where ID=" . $objectWithImage->ID; DB::query($sql); } } } }
/** * Returns a form with fields from config.profiled_show_fields loaded from member.currentUser(). To work * properly expects the current controller to be extended with ProfiledControllerExtension. * * @return ProfiledMemberForm */ public function ProfiledMemberForm($action) { $form = ProfiledMemberForm::create_for_action($action, Controller::curr(), null, null, null); $member = Injector::inst()->get('ProfiledMemberClass'); $form->loadDataFrom($member::currentUser()); return $form; }
public function updateEnabled(&$enabled) { if ($enabled && Session::get("loggedInAs")) { $this->checkAndConnectDB(); $enabled = !Injector::inst()->create('LeftAndMain')->canView(); } }
public function run($request) { $service = Injector::inst()->create('GoogleAnalyticsUpgradeService'); $service->log("Upgrading googleanalytics module"); $service->setQuiet(false)->run(); $service->log("Done"); }
public function fire() { increase_memory_limit_to(); increase_time_limit_to(); /** @var i18nTextCollector $collector */ $collector = i18nTextCollector::create($this->option('locale')); if (!$this->option('locale')) { $this->info('Starting text collection. No Locale specified'); } else { $this->info('Starting text collection for: ' . $this->option('locale')); } $merge = $this->getIsMerge(); if ($merge) { $this->info('New strings will be merged with existing strings'); } // Custom writer $writerName = $this->option('writer'); if ($writerName) { $writer = Injector::inst()->get($writerName); $collector->setWriter($writer); $this->info('Set collector writer to: ' . $writer); } // Get restrictions $restrictModules = $this->option('module') ? explode(',', $this->option('module')) : null; $this->info('Collecting in modules: ' . $this->option('module')); // hack untill we have something better ob_start(); $collector->run($restrictModules, $merge); $this->warn(ob_get_contents()); ob_get_clean(); $this->info(__CLASS__ . ' completed!'); }
/** * @return MailingListAdapter */ public static function adapter() { if (!isset(self::$adapter)) { self::$adapter = Injector::inst()->get(self::config()->default_adapter_class); } return self::$adapter; }
/** * @return void */ public function run() { try { $batch_size = 100; $init_time = time(); $summit = null; if (isset($_GET['batch_size'])) { $batch_size = intval(trim(Convert::raw2sql($_GET['batch_size']))); echo sprintf('batch_size set to %s', $batch_size) . PHP_EOL; } if (isset($_GET['summit_id'])) { $summit = Summit::get()->byID(intval($_GET['summit_id'])); } if (is_null($summit)) { throw new Exception('summit_id is not valid!'); } $manager = Injector::inst()->get('SpeakerSecondBreakoutAnnouncementSenderManager'); if (!$manager instanceof ISpeakerSecondBreakoutAnnouncementSenderManager) { return; } $processed = $manager->send($summit, $batch_size); $finish_time = time() - $init_time; echo 'processed records ' . $processed . ' - time elapsed : ' . $finish_time . ' seconds.'; } catch (Exception $ex) { SS_Log::log($ex->getMessage(), SS_Log::ERR); } }
/** * @param IRSVPTemplate $template * @param IRSVP $rsvp * @param ISummitEvent $event * @param string $form_name * @return BootstrapForm|PresentationSpeaker */ public function build(IRSVPTemplate $template, IRSVP $rsvp, ISummitEvent $event, $form_name = 'RSVPForm') { $fields = new FieldList(); foreach ($template->getQuestions() as $q) { $type = $q->Type(); $builder_class = $type . 'UIBuilder'; // @IRSVPQuestionTemplateUIBuilder $builder = Injector::inst()->create($builder_class); $answer = $rsvp ? $rsvp->findAnswerByQuestion($q) : null; $field = $builder->build($rsvp, $q, $answer); $fields->add($field); } $validator = null; if ($rsvp) { $fields->add(new HiddenField('rsvp_id', 'rsvp_id', $rsvp->getIdentifier())); } $fields->add(new HiddenField('event_id', 'event_id', $event->getIdentifier())); $fields->add(new HiddenField('summit_id', 'summit_id', $event->Summit()->getIdentifier())); $fields->add(new HiddenField('seat_type', 'seat_type', $event->getCurrentRSVPSubmissionSeatType())); $fields->add(new LiteralField('hr', '<hr>')); $actions = new FieldList(FormAction::create('submit_rsvp')->setTitle('Send RSVP')->addExtraClass('rsvp_submit')); $form = new BootstrapForm(Controller::curr(), $form_name . '_' . $event->getIdentifier(), $fields, $actions, $validator); $form->setAttribute('class', 'rsvp_form'); return $form; }
/** * Entry point for message queue * * @param int $batchSize * @param string $taskName * @param array|string|null $classes */ public static function run_reindex($batchSize, $taskName, $classes = null) { // @todo Logger for message queue? $logger = Injector::inst()->createWithArgs('Monolog\\Logger', array(strtolower(get_class()))); $inst = Injector::inst()->get(get_class()); $inst->runReindex($logger, $batchSize, $taskName, $classes); }
/** * Will redirect the user directly to the IdP login endpoint if: * * 1) the 'SAMLAuthenticator' is the default authenticator * 2) there isn't a GET param showloginform set to 1 * 3) the member is not currently logged in * 4) there are no form messages (errors or notices) * * @return void */ public function onBeforeSecurityLogin() { if (Authenticator::get_default_authenticator() != 'SAMLAuthenticator') { return; } // by going to the URL Security/login?showloginform=1 we bypass the auto sign on if ($this->owner->request->getVar('showloginform') == 1) { return; } // if member is already logged in, don't auto-sign-on, this is most likely because // of unsufficient permissions. $member = Member::currentUser(); if ($member && $member->exists()) { return; } // if there are form messages, don't auto-sign-on, this is most likely because of // login errors / failures or other notices. if (Session::get('FormInfo')) { // since FormInfo can be a "nulled" array, we have to check foreach (Session::get('FormInfo') as $form => $info) { foreach ($info as $name => $value) { if ($value !== null) { return; } } } } $backURL = Session::get('BackURL'); if ($this->owner->request->getVar('BackURL')) { $backURL = $this->owner->request->getVar('BackURL'); } $authenticator = Injector::inst()->create('SAMLAuthenticator'); $authenticator->authenticate(array("BackURL" => $backURL)); }
/** * @return DynamicTranslationAdapter */ public static function get_translation_adapter() { if (!self::$translation_adapter) { self::$translation_adapter = Injector::inst()->get('DynamicTranslationAdapter'); } return self::$translation_adapter; }
/** * This should be updateCMSFields and configured to be called last but configuration * priority does not seem to work to force this to be the last loaded/called extension. * * For now will call via extend.manualUpdate with the field list in ArtisanModel.getCMSFields * * @param FieldList $fields */ public function manualUpdateCMSFields(FieldList $fields) { // $formFields = $fields->dataFields(); $formFields = $fields->VisibleFields(); $selectorFieldName = parent::get_config_setting('selector_field_name'); $hiddenCSSClass = parent::get_config_setting('hidden_css_class'); $provider = Injector::inst()->get('AdaptableFormMetaDataProvider'); $defaultFieldNames = $provider->getDefaultFieldNames(); // keep track of fields we have encountered in the spec, other fields will be hidden, // we can initialise this to defaultFieldNames as we don't want to hide these ever $handled = array_combine($defaultFieldNames, $defaultFieldNames); // we want to get the form so we can remove fields later $form = null; $metaData = $provider->getMetaData(); // the master list of content types by field name $this->contentTypes = []; foreach ($metaData as $contentType => $fieldSpec) { if (isset($fieldSpec['FormFields'])) { $fieldDefinitions = $fieldSpec['FormFields']; $specFields = array_merge($fieldDefinitions, $defaultFieldNames); $this->processFieldList($formFields, $contentType, $selectorFieldName, $specFields, $defaultFieldNames, $handled); } } $this->hideUnhandled($formFields, $handled, $hiddenCSSClass); }
/** * @return AjaxHTTPResponse */ public function getAjaxResponse() { if (!isset($this->ajaxResponse)) { $this->ajaxResponse = Injector::inst()->create('AjaxHTTPResponse', $this->owner->getRequest()); } return $this->ajaxResponse; }
/** * @param $methods * @param null $responseWill * @return mixed */ protected function createMockYouTubeService($methods, $responseWill = null) { if (!is_array($methods)) { $methods = [$methods]; } if (!$responseWill) { $responseWill = $this->returnSelf(); } $methodMap = []; foreach ($methods as $methodName => $callback) { if (is_numeric($methodName)) { $methodName = $callback; } $expects = is_callable($callback) ? $callback($this) : $this->any(); $methodMap[$methodName] = $expects; } $mockResponse = $this->getMockBuilder('GuzzleHttp\\Stream\\Stream')->setMethods(['getBody', 'getContents'])->disableOriginalConstructor()->getMock(); $mockResponse->expects($this->any())->method('getBody')->will($this->returnSelf()); $mockResponse->expects($this->any())->method('getContents')->will($responseWill); $mockService = $this->getMockBuilder('SummitVideoYouTubeService')->setConstructorArgs([Injector::inst()->get('SummitVideoHTTPClient')])->setMethods(array_keys($methodMap))->getMock(); foreach ($methodMap as $methodName => $expects) { $mockService->expects($expects)->method($methodName)->will($this->returnValue($mockResponse)); } return $mockService; }
/** * Performs the login, but will also create and sync the Member record on-the-fly, if not found. * * @param array $data * @param Form $form * @return bool|Member|void * @throws SS_HTTPResponse_Exception */ public static function authenticate($data, Form $form = null) { $service = Injector::inst()->get('LDAPService'); $result = $service->authenticate($data['Username'], $data['Password']); $success = $result['success'] === true; if (!$success) { if ($form) { $form->sessionMessage($result['message'], 'bad'); } return; } $data = $service->getUserByUsername($result['identity']); if (!$data) { if ($form) { $form->sessionMessage(_t('LDAPAuthenticator.PROBLEMFINDINGDATA', 'There was a problem retrieving your user data'), 'bad'); } return; } // LDAPMemberExtension::memberLoggedIn() will update any other AD attributes mapped to Member fields $member = Member::get()->filter('GUID', $data['objectguid'])->limit(1)->first(); if (!($member && $member->exists())) { $member = new Member(); $member->GUID = $data['objectguid']; $member->write(); } Session::clear('BackURL'); return $member; }
static function add_to_class($class, $extensionClass, $args = null) { if (method_exists($class, 'extraDBFields')) { $extraStaticsMethod = 'extraDBFields'; } else { $extraStaticsMethod = 'extraStatics'; } $statics = Injector::inst()->get($extensionClass, true, $args)->{$extraStaticsMethod}($class, $extensionClass); if ($statics) { Deprecation::notice('3.1.0', "{$extraStaticsMethod} deprecated. Just define statics on your extension, or use add_to_class"); // TODO: This currently makes extraStatics the MOST IMPORTANT config layer, not the least foreach (self::$extendable_statics as $key => $merge) { if (isset($statics[$key])) { if (!$merge) { Config::inst()->remove($class, $key); } Config::inst()->update($class, $key, $statics[$key]); } } // TODO - remove this DataObject::$cache_has_own_table[$class] = null; DataObject::$cache_has_own_table_field[$class] = null; } parent::add_to_class($class, $extensionClass, $args); }
/** * This routine simulates what would happen when a object is constructed * @param string $data * @return void */ public function unserialize($data) { $injector = \Injector::inst(); $extraData = null; if (empty(self::$objectConstructorReflectionMethods[__CLASS__])) { self::$objectConstructorReflectionMethods[__CLASS__] = new \ReflectionMethod(__CLASS__, '__construct'); } if (empty(self::$classConfigs[__CLASS__])) { self::$classConfigs[__CLASS__] = $injector->getConfigLocator()->locateConfigFor(__CLASS__); } if ($this instanceof ExtraDataInterface) { $unserialized = \Heystack\Core\unserialize($data); self::$objectConstructorReflectionMethods[__CLASS__]->invoke($this, $unserialized[0]); $extraData = $unserialized[1]; } else { self::$objectConstructorReflectionMethods[__CLASS__]->invoke($this, \Heystack\Core\unserialize($data)); } // Ensure that the spec is loaded for the class if (self::$classConfigs[__CLASS__]) { $injector->load([__CLASS__ => self::$classConfigs[__CLASS__]]); } $injector->inject($this, __CLASS__); if ($extraData) { $this->setExtraData($extraData); } }
public function run($request) { $service = Injector::inst()->create('UserFormsUpgradeService'); $service->log("Upgrading userforms module"); $service->setQuiet(false)->run(); $service->log("Done"); }