/** * @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; }
/** * @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; }