コード例 #1
0
ファイル: AccountPresenter.php プロジェクト: venne/venne
 /**
  * @return \Venne\System\Components\AdminGrid\AdminGrid
  */
 protected function createComponentLoginTable()
 {
     $_this = $this;
     $data = array();
     foreach ($this->securityManager->getLoginProviders() as $name) {
         $data[] = array('id' => str_replace(' ', '_', $name), 'name' => $name);
     }
     $admin = $this->adminGridFactory->create($this->loginRepository);
     // columns
     $table = $admin->getTable();
     $table->setModel(new ArraySource($data));
     $table->setTranslator($this->translator);
     $table->addColumnText('name', 'Name')->getCellPrototype()->width = '100%';
     /** @var \Venne\Security\User $user */
     $user = $this->user->identity;
     $securityManager = $this->securityManager;
     $providerFormFactory = $this->providerFormFactory;
     $connectAction = $table->addActionEvent('connect', 'Connect')->setCustomRender(function ($entity, $element) use($securityManager, $user) {
         if ($user->hasLoginProvider($entity['name'])) {
             $element->class[] = 'disabled';
         } else {
             $element->class[] = 'btn-primary';
         }
         return $element;
     });
     $connectAction->onClick[] = function ($button, $name) use($_this, $securityManager, $providerFormFactory, $user) {
         if (!$securityManager->getLoginProviderByName(str_replace('_', ' ', $name))->getFormContainer()) {
             $_this->redirect('connect!', str_replace('_', ' ', $name));
         } else {
             $_this->provider = str_replace('_', ' ', $name);
             $providerFormFactory->setProvider($_this->provider);
         }
     };
     $this->providerFormFactory->setUser($user);
     if ($this->provider) {
         $this->providerFormFactory->setProvider($this->provider);
     }
     $this->providerFormFactory->onSave[] = function (Form $form) use($_this) {
         $_this->redirect('connect!', array($form['provider']->value, json_encode($form['parameters']->values)));
     };
     $this->providerFormFactory->onSuccess[] = function ($parameters) use($_this) {
         $_this->redirect('this');
     };
     $form = $admin->addForm('provider', 'Provider', $this->providerFormFactory);
     $table->addActionEvent('disconnect', 'Disconnect')->setCustomRender(function ($entity, $element) use($securityManager, $user) {
         if (!$user->hasLoginProvider($entity['name'])) {
             $element->class[] = 'disabled';
         }
         return $element;
     })->setConfirm(function ($entity) {
         return array('Really disconnect from \'%s\'?', $entity['name']);
     });
     $table->getAction('disconnect')->onClick[] = function ($button, $name) use($_this) {
         $_this->handleDisconnect(str_replace('_', ' ', $name));
     };
     $table->getAction('disconnect')->getElementPrototype()->class[] = 'ajax';
     $admin->connectFormWithAction($form, $connectAction);
     return $admin;
 }
コード例 #2
0
ファイル: LoginControl.php プロジェクト: venne/venne
 /**
  * @return \Nette\Application\UI\Form
  */
 protected function createComponentProviderForm()
 {
     $this->providerFormFactory->setProvider($this->provider);
     $form = $this->providerFormFactory->invoke();
     $form['cancel']->onClick[] = function () {
         $this->redirect('this', array('provider' => null));
     };
     $form->onSuccess[] = $this->providerFormSuccess;
     return $form;
 }