public function connect(Application $app) { $controller = $app['controllers_factory']; $controller->get('/', function (Application $app, Request $request) { return $app['twig']->render('admin/dashboard.html.twig'); })->bind('dashboard'); $controller->match('/settings', function (Application $app, Request $request) { $qb = $app['em']->createQueryBuilder(); $qb->select('s')->from('CMSilex\\Entities\\Setting', 's', 's.att'); $currentSettings = $qb->getQuery()->getResult(); $builder = $app->form($currentSettings); $form = $builder->add('about', TextareaType::class)->add('github', TextType::class)->add('Save', SubmitType::class)->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $allSettings = $form->getData(); foreach ($allSettings as $key => $value) { $newSetting = new Setting($key, $value); $app['em']->merge($newSetting); } $app['em']->flush(); return $app->redirect($app->url("settings")); } return $app['twig']->render('admin/settings.html.twig', ['form' => $form->createView()]); })->bind('settings')->method('POST|GET'); return $controller; }
function addUserAction(Request $request, Application $app, $email) { /*$user = new \Application\Entity\User(); $form = $this->createForm(new ArticleType(), $article); $form->handleRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($article); $em->flush(); $session = $this->getRequest()->getSession(); $session->getFlashBag()->add('message', 'Article saved!'); return $this->redirect($this->generateUrl('_form2saved')); } //*/ return $app->render('Application/Form/user.twig', ['title' => 'Ajouter un Utilisateur', 'breadcrumb' => [$app->url('application_dashboard') => 'Administration', $app->url('application_administration_users') => 'Utilisateurs', '#' => 'Ajouter']]); }
public function indexAction(Application $app, Request $req) { $form = $app['form.factory']->create(new GuestbookType()); if ($req->getMethod() == 'POST') { $form->bind($req); if ($form->isValid()) { $data = $form->getData(); $app['guestbook']->add($data['name'], $data['message'], $app['request_time'])->save(); return $app->redirect($app->url('homepage'), 303); } } $response = new Response(); $response->headers->set('Surrogate-Control', 'content="ESI/1.0"'); return $app->render('guestbook.twig', ['guestbook' => $form->createView()], $response->setTtl(300)); }
public function registerAction(Application $app, Request $request) { $builder = $app->form(); $builder->add('email', EmailType::class)->add('password', RepeatedType::class, ['type' => PasswordType::class, 'first_options' => ['label' => 'Password'], 'second_options' => ['label' => 'Repeat Password']])->add('register', SubmitType::class); $form = $builder->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $userInfo = $form->getData(); $newUser = new User(); $password = $app->encodePassword($newUser, $userInfo['password']); $newUser->setUsername($userInfo['email']); $newUser->setPassword($password); $newUser->setEnabled(true); $newUser->setAccountNonExpired(true); $newUser->setAccountNonLocked(true); $newUser->setCredentialsNonExpired(true); $newUser->setRoles(['ROLE_USER']); $app['em']->persist($newUser); $app['em']->flush(); return $app->redirect($app->url('login')); } return $app->render('authentication/register.html.twig', ['form' => $form->createView()]); }
public function deleteEntityAction($entityName, $entity, Application $app, Request $request) { $app['em']->remove($entity); $app['em']->flush(); return $app->redirect($app->url('cms_list', ['entityName' => $entityName])); }
/** * connect * * @param Application $app * * @return Silex\ControllerCollection */ public function connect(Application $app) { // creates a new controller based on the default route $controllers = $app['controllers_factory']; $controllers->get('/', function (Application $app) { return 'It works'; })->bind('msiof-stripe-index'); $controllers->get('/unsubscribe', function (Application $app) { \Stripe::setApiKey($app['msiof.stripe']['keys']['secret']); $currentPlan = $app['user']->getCustomField('stripe_current_plan'); if ($currentPlan != $app['msiof.stripe']['plans']['paid']) { return 'You aren\'t subscribed anyway, so you can\'t unsubscribe'; } if (empty($app['user']->getCustomField('stripe_customer_id'))) { return 'You have no stripe customerid, so you can\'t unsubscribe'; } try { $customer = \Stripe_Customer::retrieve($app['user']->getCustomField('stripe_customer_id')); $result = $customer->subscriptions->retrieve($app['user']->getCustomField('stripe_subscription_id_paid'))->cancel(['at_period_end' => true]); $app['user']->setCustomField('stripe_subscription_awaiting_cancellation', 1); $app['user.manager']->update($app['user']); } catch (Exception $e) { return 'Something went wrong, sorry'; } $app['session']->getFlashBag()->set('alert-success', 'You are now unsubscribed, but why? :('); return $app->redirect($app->url('msiof-stripe-account')); })->bind('msiof-stripe-unsubscribe'); $controllers->get('/account', function (Application $app) { if (!$app['user']) { return $app->redirect('user.login'); } $subscriptionId = $app['user']->getCustomField('stripe_subscription_id_paid'); if (!empty($subscriptionId)) { if ($app['user']->getCustomField('stripe_subscription_awaiting_cancellation')) { return 'Your subscription is cancelled'; } else { return '<a href="/stripe/unsubscribe">Unsubscribe</a>'; } } $serverCount = 26; $form = ' <form action="/stripe/upgrade" method="POST"> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="pk_test_2bpghGfYvZb4cS2rYIhpcC31" data-amount="0" data-name="Upgrade Plan" data-description="' . $serverCount . ' More Server Fires ($3/server/month)" data-image="/128x128.png" data-currency="USD" data-allowrememberme="false" data-email="' . $app['user']->getEmail() . '" data-panelLabel="Subscribe" data-label="Upgrade" > </script> </form> '; return $form; })->bind('msiof-stripe-account'); $controllers->post('/upgrade', function (Application $app, Request $request) { if (!$app['user']) { return $app->redirect('user.login'); } $subscriptionId = $app['user']->getCustomField('stripe_subscription_id_paid'); if (!empty($subscriptionId)) { $app['session']->getFlashBag()->set('alert', 'You are already subscribed, what ya playing at?'); return $app->redirect($app->url('dashboard')); } \Stripe::setApiKey($app['msiof.stripe']['keys']['secret']); $customerId = $app['user']->getCustomField('stripe_customer_id'); if (empty($customerId)) { /* * They don't have a customerid somehow, so we need to make them one */ $customer = \Stripe_Customer::create(['email' => $app['user']->getEmail(), 'metadata' => ['userid' => $app['user']->getId()]]); $subscription = $customer->subscriptions->create(["plan" => $app['msiof.stripe']['plans']['free']]); $app['user']->setCustomField('stripe_subscription_id_free', $subscription->id); $app['user']->setCustomField('stripe_customer_id', $customer->id); $app['user']->setCustomField('stripe_current_plan', $app['msiof.stripe']['plans']['free']); $app['user.manager']->update($app['user']); $customerId = $customer->id; } $serverCount = 26; try { $customer = \Stripe_Customer::retrieve($customerId); \Stripe_InvoiceItem::create(["customer" => $customerId, "amount" => $serverCount * $app['msiof.stripe']['pricePerServer']['USD'], "currency" => "usd", "description" => "{$serverCount} server fires"]); $subscription = $customer->subscriptions->create(["plan" => $app['msiof.stripe']['plans']['paid'], "card" => $request->get('stripeToken')]); $result = $subscription->save(); } catch (Stripe_CardError $e) { $body = $e->getJsonBody(); $err = $body['error']; $app['session']->getFlashBag()->set('alert', 'Something was wrong with your card [' . $err['message'] . ']. Please try again.'); } catch (Stripe_Error $e) { $app['session']->getFlashBag()->set('alert', 'Something went wrong. Please get in touch at somethingwentwrong@myserverisonfire.com'); return $app->redirect($app->url('dashboard')); } catch (Exception $e) { $app['session']->getFlashBag()->set('alert', 'Something went wrong. Please get in touch at somethingwentwrong@myserverisonfire.com'); return $app->redirect($app->url('dashboard')); } $subscriptionId = $result->id; $app['user']->setCustomField('stripe_current_plan', $app['msiof.stripe']['plans']['paid']); $app['user']->setCustomField('stripe_subscription_id_paid', $subscriptionId); $app['user']->setCustomField('stripe_current_period_start', $result->current_period_start); $app['user']->setCustomField('stripe_current_period_end', $result->current_period_end); $app['user.manager']->update($app['user']); $app['session']->getFlashBag()->set('alert-success', 'You are now upgraded! Congrats!'); return $app->redirect($app->url('msiof-stripe-account')); })->bind('msiof-stripe-pay-post'); $controllers->post('/webhook', function (Application $app, Request $request) { $serverCount = 26; if (strpos($request->headers->get('Content-Type'), 'application/json') === 0) { $data = json_decode($request->getContent(), true); if ($data['data']['object']['lines']['data'][0]['plan']['id'] == $app['msiof.stripe']['plans']['free']) { return "Ignoring because it's the free plan"; } if ($data['type'] == 'invoice.created') { $customerId = $data['data']['object']['customer']; $invoiceId = $data['data']['object']['id']; \Stripe_InvoiceItem::create(["customer" => $customerId, "amount" => $serverCount * $app['msiof.stripe']['pricePerServer']['USD'], "currency" => "usd", "description" => "{$serverCount} server fires"]); } elseif ($data['type'] == 'invoice.payment_succeeded') { //@TODO: Update db to set current_period_start and current_period_end? } elseif ($data['type'] == 'invoice.payment_failed') { //@TODO: Email to say payment failed } elseif ($data['type'] == 'customer.subscription.deleted') { //@TODO: They should only be able to cancel paid subscription, so set stripe_current_plan to 'free', and remove paid subscription id //@TODO: Get user instance - findOneBy? //@TODO: Remove stripe_subscription_awaiting_cancellation too } } return "{$customerId} / {$invoiceId}"; }); return $controllers; }