From add82b69fcc5976f525563d8d1c2a9bb575cb07a Mon Sep 17 00:00:00 2001 From: Wilco Louwerse Date: Mon, 26 Oct 2020 15:03:09 +0100 Subject: [PATCH 01/10] finished layout for claim modal --- .../dashboard/modals/claim_modal.html.twig | 62 ++++++++++++++----- api/translations/messages.nl.xlf | 12 ++++ 2 files changed, 59 insertions(+), 15 deletions(-) diff --git a/api/templates/dashboard/modals/claim_modal.html.twig b/api/templates/dashboard/modals/claim_modal.html.twig index d7ba15a6..e8f84b27 100644 --- a/api/templates/dashboard/modals/claim_modal.html.twig +++ b/api/templates/dashboard/modals/claim_modal.html.twig @@ -13,16 +13,16 @@ {{ 'load data'|trans|capitalize }} -
+
@@ -38,26 +38,58 @@ {{ 'add manually'|trans|capitalize }} - + - + + + +
- - + + +
+ + diff --git a/api/translations/messages.nl.xlf b/api/translations/messages.nl.xlf index 5908b453..c067c801 100644 --- a/api/translations/messages.nl.xlf +++ b/api/translations/messages.nl.xlf @@ -149,6 +149,18 @@ retrieve data gegevens ophalen + + Where do you want to retrieve your data from? + Waar wilt u uw gegevens van ophalen? + + + add data + gegevens toevoegen + + + What data do you want to add manually? + Welke gegevens wilt u handmatig toevoegen? + add manually handmatig toevoegen From dec2e78c39e38dbe03471b439457e77f065d67b3 Mon Sep 17 00:00:00 2001 From: Wilco Louwerse Date: Mon, 26 Oct 2020 15:15:16 +0100 Subject: [PATCH 02/10] Small visual text change --- api/templates/dashboard/claims.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/templates/dashboard/claims.html.twig b/api/templates/dashboard/claims.html.twig index cb26d6c5..30102fbf 100644 --- a/api/templates/dashboard/claims.html.twig +++ b/api/templates/dashboard/claims.html.twig @@ -29,7 +29,7 @@ From b0373a7207b37e8a5e88cbdf38c5b0d96ea40f90 Mon Sep 17 00:00:00 2001 From: Wilco Louwerse Date: Mon, 26 Oct 2020 15:16:04 +0100 Subject: [PATCH 03/10] wrong text :3 --- api/templates/dashboard/claims.html.twig | 2 +- api/templates/dashboard/modals/claim_modal.html.twig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/templates/dashboard/claims.html.twig b/api/templates/dashboard/claims.html.twig index 30102fbf..cb26d6c5 100644 --- a/api/templates/dashboard/claims.html.twig +++ b/api/templates/dashboard/claims.html.twig @@ -29,7 +29,7 @@ diff --git a/api/templates/dashboard/modals/claim_modal.html.twig b/api/templates/dashboard/modals/claim_modal.html.twig index e8f84b27..11f6dccd 100644 --- a/api/templates/dashboard/modals/claim_modal.html.twig +++ b/api/templates/dashboard/modals/claim_modal.html.twig @@ -55,7 +55,7 @@ From 1d108f0062b179734e56ccfc47e328aa5f586048 Mon Sep 17 00:00:00 2001 From: Wilco Louwerse Date: Mon, 26 Oct 2020 16:08:27 +0100 Subject: [PATCH 04/10] Added menu per claim and now showing claims and contracts from the user --- api/src/Controller/DashboardController.php | 14 +++++- api/templates/dashboard/claims.html.twig | 21 ++++++++- .../dashboard/modals/claim_modal.html.twig | 44 +++++++++++-------- api/translations/messages.nl.xlf | 16 +++++++ 4 files changed, 72 insertions(+), 23 deletions(-) diff --git a/api/src/Controller/DashboardController.php b/api/src/Controller/DashboardController.php index 15d47512..ab6610f2 100644 --- a/api/src/Controller/DashboardController.php +++ b/api/src/Controller/DashboardController.php @@ -86,7 +86,17 @@ public function notificationsAction(Session $session, Request $request, CommonGr public function claimsAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') { $variables = []; - $variables['claims'] = $commonGroundService->getResourceList('https://dev.zuid-drecht.nl/api/v1/wac/claims')['hydra:member']; //['component' => 'wac', 'type' => 'claims'], ['person' => $this->getUser()->getPerson(), 'order[dateCreated]' => 'desc'] + $variables['claims'] = $commonGroundService->getResourceList(['component' => 'wac', 'type' => 'claims'], ['person' => $this->getUser()->getPerson(), 'order[dateCreated]' => 'desc'])['hydra:member']; + + if ($request->isMethod('POST')) { + $resource = $request->request->all(); + + $resource['person'] = $this->getUser()->getPerson(); + + $commonGroundService->saveResource($resource, (['component' => 'wac', 'type' => 'claims'])); + + return $this->redirect($this->generateUrl('app_dashboard_claims')); + } return $variables; } @@ -98,7 +108,7 @@ public function claimsAction(Session $session, Request $request, CommonGroundSer public function contractsAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') { $variables = []; - $variables['contracts'] = $commonGroundService->getResourceList('https://dev.zuid-drecht.nl/api/v1/wac/contracts')['hydra:member']; //['component' => 'wac', 'type' => 'contracts'], ['person' => $this->getUser()->getPerson(), 'order[dateCreated]' => 'desc'] + $variables['contracts'] = $commonGroundService->getResourceList(['component' => 'wac', 'type' => 'contracts'], ['person' => $this->getUser()->getPerson(), 'order[dateCreated]' => 'desc'])['hydra:member']; return $variables; } diff --git a/api/templates/dashboard/claims.html.twig b/api/templates/dashboard/claims.html.twig index cb26d6c5..50411ac2 100644 --- a/api/templates/dashboard/claims.html.twig +++ b/api/templates/dashboard/claims.html.twig @@ -42,7 +42,7 @@
-
+

@@ -65,7 +65,7 @@

- {% if claim.proofs is defined and claim.proofs is not empty %} diff --git a/api/templates/dashboard/modals/claim_modal.html.twig b/api/templates/dashboard/modals/claim_modal.html.twig index 11f6dccd..c91c0ecb 100644 --- a/api/templates/dashboard/modals/claim_modal.html.twig +++ b/api/templates/dashboard/modals/claim_modal.html.twig @@ -47,11 +47,14 @@ + + +
- - - + + +
- -
-
+ +

+ {{ 'organizations'|trans|capitalize }} +

- {% if resources is defined and resources is not empty %} + {% if groups is defined and groups is not empty %} @@ -46,14 +32,15 @@ - {% for resource in resources %} + {% for group in groups %} - + {% endfor %}
{{ resource.name }}{{ group.name }}
{% else %} +

{{ 'no organizations available'|trans|capitalize }}

{% endif %} @@ -63,8 +50,4 @@
- - - {% include '/dashboard/modals/add-organization-modal.html.twig' %} - {% endblock %} diff --git a/api/templates/default/developers.html.twig b/api/templates/default/developers.html.twig deleted file mode 100644 index d04e51a1..00000000 --- a/api/templates/default/developers.html.twig +++ /dev/null @@ -1,680 +0,0 @@ -{% extends 'base.html.twig' %} - -{% block content %} -
- -
-
-
-
- - -
- The ID-Vault Online Self Sovereign Identity Wallet -
- - -

- Identity Solution for Developers. -

- - -

- We created a simple, safe, and easy-to-use platform for managing the complexity of self sovereign identity. -

- - -

- - Create an account - -

- -
-
-
-
- - -
- -
- -
-
-
-
- - -
-
- -
-
- - -
-
-
-
- - - ... - -
-
- - -

- We start with your needs and deliver a full banking solution. -

- - -
- Once you provide us with your companyā€™s basic information, we handle the remainder of the process without questions. -
- -
-
-
-
-
-
- - -
-
- - - - 1 - - -
-
- - -
- -
-
- -
-
- - -

- Fill out your intro survey -

- - -

- We start with a short 3-step online survey to help us determine the best banking solution for your specific startup. -

- -
-
-
-
-
-
- - -
-
- - - - 2 - - -
-
- - -
- -
-
- -
-
- - -

- We build a banking stack. -

- - -

- From your information, we generate a banking stack well suited to your companyā€™s personalized needs. -

- -
-
-
-
-
-
- - -
-
- - - - 3 - - -
-
- -
-
- - -

- Registration and filings -

- - -

- We handle the creation of your actual account including registering with the financial and government agencies. -

- -
-
-
-
-
-
- - -
-
- -
-
- - -
-
-
-
- - -
- - - ... - - - ... - - - ... - -
- -
-
- - -

- Powerful metrics to better understand your business. -

- - -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula auctor ornare. Nulla non ullamcorper tellus. Vestibulum pulvinar eros nec tortor maximus, iaculis rutrum nibh mollis. -

- - -
-
- - -
- - -
- -
- - -

- Real-time data -

- -
- - -
- - -
- -
- -

- FDIC Insured -

- -
- -
-
- - -
- - - - - - - -

- End-to-end encyption -

- -
- - -
- - -
- -
- - -

- REST API enabled -

- -
- -
-
- -
-
-
-
- - -
-
-
-
- - -
-
- - -
- - - -
- -
-
- - - -
-
- -
-
- - -

- Controlled access to data is one of our core values. -

- - -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula auctor ornare. Nulla non ullamcorper tellus. -

- - - - View our API - -
-
-
-
- - -
-
-
-
- - -

- Corporate cards available on iOS and Android. -

- - -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula auctor ornare. Nulla non ullamcorper tellus. Vestibulum pulvinar eros nec tortor maximus, iaculis rutrum nibh mollis. -

- - - - ... - - - - - ... - - -
-
- - -
- - -
- -
- -
- -
-
-
-
- - -
-
-
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
-
-
- - -
-
-
-
- - -
Integrations
- - -

- Sync your banking data anywhere. -

- - -

- Compliance, financial reviews, tax auditing, and any financial task has never been easier. -

- -
-
-
-
- - -
- -
- - -

- Slack -

- - -

- Sync your team's work and activity to share automatically in a channel with a simple plugin. -

- -
-
- - -
- -
- - -

- Mailchimp -

- - -

- Communicate important messages to your users through Landkit using Mailchimp as the delivery service. -

- -
-
- - -
- -
- - -

- Dropbox -

- - -

- Sync any file store to Dropbox for automated sharing with people outside the company. -

- -
-
- - -
- -
- - -

- Google Drive -

- - -

- Sync any file store to Google Drive for automated sharing with people outside the company. -

- -
-
- - -
- -
- - -

- Google Ad Manager -

- - -

- Easily manage and edit any Adwords campaign inline to improve ROI with constant review. -

- -
-
- - -
- -
- - -

- Atlassian -

- - -

- Keep your entire team in sync with development and easily manage tasks, goals, and deadlines. -

- -
-
-
-
- - -
-
-
-
- - -

- Register today. For the identity managment of tommorow. -

- - -

- Avoid the nightmare of managing GDPR and a ton of login solutions, use our platform. -

- -
- -
-
-
-
-{% endblock %} diff --git a/api/templates/default/pricing.html.twig b/api/templates/default/pricing.html.twig deleted file mode 100644 index 21356f18..00000000 --- a/api/templates/default/pricing.html.twig +++ /dev/null @@ -1,243 +0,0 @@ -{% extends 'base.html.twig' %} - -{% block content %} - -
- - -
- -
- - -
-
-
- - -

- Simple, fair pricing. -

- - -

- {{ 'needs text'|capitalize }} -

- -
-
-
- -
- - -
-
- -
-
- - -
-
-
-
- - -
-
- - -
- - {{ 'free'|trans|capitalize }} - -
- - -
- - -
- -
- - -

- OAuth
- {{ 'authenticate users via oauth'|trans|capitalize }} -

-
-
- - -
- -
- - -

- {{ 'basic data'|trans|capitalize }}
- {{ 'access to the basic user data'|trans|capitalize }} -

-
-
-
- -
-
- - -
-
- - -
- - {{ 'paid'|trans|capitalize }} - -
- - -
- - -
- -
- - -

- {{ 'SAML / Active Directory'|trans }}
- {{ 'short text'|trans|capitalize }} -

-
-
- - -
- -
- - -

- {{ 'certain claims for data'|trans|capitalize }}
- {{ 'for example: IDIN, IDeal or phone number'|trans|capitalize }} -

-
-
-
- -
- -
-
-
- - - -
-
- -
-
- - -
-
-
-
- - - - FAQ - - - -

- Frequently asked questions. -

- - -

- Let us help answer the most common questions you might have. -

- -
-
-
-
- - -

- Can I use Landkit for my clients? -

- - -

- Absolutely. The Bootstrap Themes license allows you to build a websites for personal use or for a client. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper quam ullamcorper cursus eu in dui. Aliquam cursus accumsan laoreet. -

- - -

- Is there a money back guarantee? -

- - -

- Yup! Bootstrap Themes come with a satisfaction guarantee. Submit a return and get your money back. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper quam ullamcorper cursus eu in dui. Aliquam cursus accumsan laoreet. -

- - -

- Do I get free updates? -

- - -

- Yes. We update all of our themes with each Bootstrap update, plus are constantly adding new components, pages, and features to our themes. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper. -

- -
-
- - -

- Does it work with Rails? React? Laravel? -

- - -

- Yes. Landkit has basic CSS/JS files you can include. If you want to enable deeper customization, you can integrate it into your assets pipeline or build processes. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper. -

- - -

- Can I use Landkit for my clients? -

- - -

- Absolutely. The Bootstrap Themes license allows you to build a websites for personal use or for a client. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper quam ullamcorper cursus eu in dui. Aliquam cursus accumsan laoreet. -

- - -

- Is there a money back guarantee? -

- - -

- Yup! Bootstrap Themes come with a satisfaction guarantee. Submit a return and get your money back. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper quam ullamcorper cursus eu in dui. Aliquam cursus accumsan laoreet. -

- -
-
-
-
-{% endblock %} diff --git a/api/templates/default/privacy.html.twig b/api/templates/default/privacy.html.twig deleted file mode 100644 index f2d1e917..00000000 --- a/api/templates/default/privacy.html.twig +++ /dev/null @@ -1,249 +0,0 @@ -{% extends 'base.html.twig' %} - -{% block content %} -
-
-
-
- - -

- Terms of Service -

- - -

- Updated 3/15/2019 -

- -
-
- - - - Print - - -
-
-
-
- - -
- -
-
-
-
- - -

- Below are our Terms of Service, which outline a lot of legal goodies, but the bottom line is itā€™s our aim to always take care of both you, as a customer, or as a seller on our platform. -

- - -

- Licensing Terms -

- - -

- By visiting and/or taking any action on Bootstrap Themes, you confirm that you are in agreement with and bound by the terms outlined below. These terms apply to the website, emails, or any other communication. -

- - -

- Here are terms of our Standard License: -

- - -
- - - - - - - -

- The Standard License grants you a non-exclusive right to make use of Theme you have purchased. -

- -
-
- - - - - - - -

- You are licensed to use the Item to create one End Product for yourself or for one client (a ā€œsingle applicationā€), and the End Product can be distributed for Free. -

- -
-
- - - - - - - -

- If a Theme contains code, images, or content sourced from elsewhere under a different license, that item retains its original license. The license for the code, images, or content will be noted by the Theme author. You are responsible for adhering to the original license or clearing it with the author of the code, image, or content. -

- -
-
- - - - - - - -

- This license can be terminated if you breach it and you lose the right to distribute the End Product until the Theme has been fully removed from the End Product. -

- -
-
- - - - - - - -

- The author of the Theme retains ownership of the Theme, but grants you the license on these terms. This license is between the author of the Theme and you. Be Colossal LLC (Bootstrap Themes) are not a party to this license or the one granting you the license. -

- -
- - -

- If you opt for an Extended License: -

- - -
- - - - - - - -

- You are licensed to use the Item to create one End Product for yourself or for one client (a ā€œsingle applicationā€), and the End Product maybe sold or distributed for free. -

- -
- - -

- Additional Terms -

- - -

- By visiting and/or taking any action on Bootstrap Themes, you confirm that you are in agreement with and bound by the terms outlined below. These terms apply to the website, emails, or any other communication. -

- - -
- - - - - - - -

- All payments are processed securely through PayPal or Stripe. Bootstrap Themes does not directly process payments through the website. -

- -
-
- - - - - - - -

- You have 14 days to evaluate your purchase. If your purchase fails to meet expectations set by the seller, or is critically flawed in some way, contact Bootstrap Themes and we will issue a full refund pending a review. -

- -
-
- - - - - - - -

- Membership is a benefit for those who follow our terms and policies. We may at any time suspend or terminate your account. -

- -
- -
-
- - -
-
- - -

- Have a question? -

- - -

- Not sure exactly what weā€™re looking for or just want clarification? Weā€™d be happy to chat with you and clear things up for you. Anytime! -

- - -
- Call anytime -
- - -

- (555) 123-4567 -

- - -
- {{ 'email us'|trans|capitalize }} -
- - -

- info@conduction.nl -

- -
-
- -
-
-
-
- - -
-
- -
-
-{% endblock %} diff --git a/api/templates/default/terms.html.twig b/api/templates/default/terms.html.twig deleted file mode 100644 index f2d1e917..00000000 --- a/api/templates/default/terms.html.twig +++ /dev/null @@ -1,249 +0,0 @@ -{% extends 'base.html.twig' %} - -{% block content %} -
-
-
-
- - -

- Terms of Service -

- - -

- Updated 3/15/2019 -

- -
-
- - - - Print - - -
-
-
-
- - -
- -
-
-
-
- - -

- Below are our Terms of Service, which outline a lot of legal goodies, but the bottom line is itā€™s our aim to always take care of both you, as a customer, or as a seller on our platform. -

- - -

- Licensing Terms -

- - -

- By visiting and/or taking any action on Bootstrap Themes, you confirm that you are in agreement with and bound by the terms outlined below. These terms apply to the website, emails, or any other communication. -

- - -

- Here are terms of our Standard License: -

- - -
- - - - - - - -

- The Standard License grants you a non-exclusive right to make use of Theme you have purchased. -

- -
-
- - - - - - - -

- You are licensed to use the Item to create one End Product for yourself or for one client (a ā€œsingle applicationā€), and the End Product can be distributed for Free. -

- -
-
- - - - - - - -

- If a Theme contains code, images, or content sourced from elsewhere under a different license, that item retains its original license. The license for the code, images, or content will be noted by the Theme author. You are responsible for adhering to the original license or clearing it with the author of the code, image, or content. -

- -
-
- - - - - - - -

- This license can be terminated if you breach it and you lose the right to distribute the End Product until the Theme has been fully removed from the End Product. -

- -
-
- - - - - - - -

- The author of the Theme retains ownership of the Theme, but grants you the license on these terms. This license is between the author of the Theme and you. Be Colossal LLC (Bootstrap Themes) are not a party to this license or the one granting you the license. -

- -
- - -

- If you opt for an Extended License: -

- - -
- - - - - - - -

- You are licensed to use the Item to create one End Product for yourself or for one client (a ā€œsingle applicationā€), and the End Product maybe sold or distributed for free. -

- -
- - -

- Additional Terms -

- - -

- By visiting and/or taking any action on Bootstrap Themes, you confirm that you are in agreement with and bound by the terms outlined below. These terms apply to the website, emails, or any other communication. -

- - -
- - - - - - - -

- All payments are processed securely through PayPal or Stripe. Bootstrap Themes does not directly process payments through the website. -

- -
-
- - - - - - - -

- You have 14 days to evaluate your purchase. If your purchase fails to meet expectations set by the seller, or is critically flawed in some way, contact Bootstrap Themes and we will issue a full refund pending a review. -

- -
-
- - - - - - - -

- Membership is a benefit for those who follow our terms and policies. We may at any time suspend or terminate your account. -

- -
- -
-
- - -
-
- - -

- Have a question? -

- - -

- Not sure exactly what weā€™re looking for or just want clarification? Weā€™d be happy to chat with you and clear things up for you. Anytime! -

- - -
- Call anytime -
- - -

- (555) 123-4567 -

- - -
- {{ 'email us'|trans|capitalize }} -
- - -

- info@conduction.nl -

- -
-
- -
-
-
-
- - -
-
- -
-
-{% endblock %} diff --git a/api/templates/default/users.html.twig b/api/templates/default/users.html.twig deleted file mode 100644 index e390dcdc..00000000 --- a/api/templates/default/users.html.twig +++ /dev/null @@ -1,796 +0,0 @@ -{% extends 'base.html.twig' %} - -{% block content %} -
- -
- - -
- -
- - -
-
-
- - -

- -

- - -

- Your data belongs to you, lets take it back. -

- - - - Create your acount - - -
-
-
- -
- - -
-
- -
-
- - -
-
-
-
- - - - - - -
-
-
-
- - -

- The hub for your online identity. -

- - -

- Landkit is where your team can come together to get stuff done. Chat, files, wikis, documentation, and more. -

- -
-
-
-
- - -
-
- - - ... - -
-
- - -

- Conversations -

- - -

- Communicate with your team in public or private chats with individuals or groups. -

- -
-
- - -
-
- - - ... - -
-
- - -

- Unified -

- - -

- Keep everything in one place and feel at peace and organized rather than scattered. -

- -
-
- - -
-
- -
-
- - - ... - -
-
- - -

- Analytics -

- - -

- Keep track of what's happening in your company from a centralized dashboard. -

- -
-
- - -
-
- - - ... - -
-
- - -

- Permissions -

- - -

- Control who has access to which projects and data through our control panel. -

- -
-
- -
-
-
-
- - -
-
-
-
- - - - Unified - - - -

- Replace your microservices
- with one simple app. -

- - -

- Using our single innovative platform you can remove all your communication dependencies and the messy rat's nest of email, calls, texts, wikis, and apps you currently have. -

- - -
-
-
- - -
- -
- -
-
- - - - -
-
-
- -
-
- - -
-
- - -
-
- - -
- - -

- Unlimited users. One price. -

- - -

- We don't charge per seat, just per service. -

- -
- - -
- -
- -
-
- - -
- - -

- Guaranteed 100% uptime -

- - -

- Our server network never goes down. -

- -
- - -
- -
- -
-
- - -
- - -

- Lifetime storage * -

- - -

- We store all your data forever. No extra charge. -

- -
- - -
- -
- -
-
- - -
- - -

- 256-bit encryption -

- - -

- Keep your communication and data safe. -

- -
- - -
- -
- -
-
- -
-
- - -

- * Limited to the life of the company -

- -
-
-
-
- - -
-
-
-
- - -
- - -

- "Our team turned to Landkit to solve our communication issues and it has been such a pleasure. Now that we're all on it we can never look back." -

- - -
- Casey Fyfe of Airbnb -
- -
- -
-
-
-
- - -
-
- -
-
- - -
-
-
-
- - - - Case Studies - - - -

- Used by your favorite companies -

- - -

- Many of the greatest startups in the world are already using Landkit to help them get work done and solve their communication needs. -

- -
-
-
-
- - -
-
-
-
- - -
-
- - -
-
- - -
- -
- - -

- Uses Landkit to keep their remote teams from around the world in sync. -

- - - Read more - -
-
- -
-
- - -
-
- - -
- -
- - -

- Uses Landkit to document their processes for acquiring shows. -

- - - Read more - -
-
- -
-
- - -
-
- - -
- -
- - - -

- Uses Landkit to share their brand assets across their teams. -

- - - Read more - -
-
- -
-
- - -
-
- - -
- -
- - - -

- Uses Landkit to plan their product development with engineering. -

- - - Read more - -
-
- -
-
- - -
-
- - -
- -
- - - -

- Uses Landkit to share financial projections with their investors. -

- - - Read more - -
-
- -
-
- - -
-
- - -
- -
- - -

- Uses Landkit to plan their priorities for the company quarterly and annually. -

- - - Read more - -
-
- -
-
- -
-
-
-
- - -
-
-
-
- - - - Integrations - - - -

- Integrated with your favorite platforms -

- - -

- Your data should be connected and portable. Landkit connects with other sources to help you get more done. -

- -
-
-
-
- - -
- -
- - -

- Slack -

- - -

- Sync your team's work and activity to share automatically in a channel with a simple plugin. -

- -
-
- - -
- -
- - -

- Mailchimp -

- - -

- Communicate important messages to your users through Landkit using Mailchimp as the delivery service. -

- -
-
- - -
- -
- - -

- Dropbox -

- - -

- Sync any file store to Dropbox for automated sharing with people outside the company. -

- -
-
- - -
- -
- - -

- Google Drive -

- - -

- Sync any file store to Google Drive for automated sharing with people outside the company. -

- -
-
- - -
- -
- - -

- Google Ad Manager -

- - -

- Easily manage and edit any Adwords campaign inline to improve ROI with constant review. -

- -
-
- - -
- -
- - -

- Atlassian -

- - -

- Keep your entire team in sync with development and easily manage tasks, goals, and deadlines. -

- -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
- ... -
- - -

- Schedule a demo with us -

- - -

- We can help you solve company communication. -

- - -
-
-
- - -
- - -
- -
-
- - -
- - -
- -
-
-
-
- - -
- - -
- -
-
- - -
- - -
- -
-
-
-
- - - - -
-
-
- -
-
-
-
- -
-
-
-
- - -
-
- -
-
-
-{% endblock %} diff --git a/api/templates/documentation/glossary.html.twig b/api/templates/documentation/glossary.html.twig deleted file mode 100644 index 6cdcb673..00000000 --- a/api/templates/documentation/glossary.html.twig +++ /dev/null @@ -1,103 +0,0 @@ -{% extends '/documentation/main.html.twig'%} - -{% set currentPage = 'introduction' %} - -{% block documentation %} - - - -

Glossary

- - -

- Feeling a bit lost in all of the technical terms of an online SSI Wallet (or thinking a what?), don't worry we understand that it can al be a bit overwelming. So we set up this glossery to help you allong. -

- - -

- Still cant find out what the h*ll where are talking about? Or completly lost in the jungle of technical terms? Don't hesitate to send us a message! -

- - -
- - -

Uitspraken (claim)

- - -

Binnen id-vault worden jouw gegevens opgeslagen als claims, een claim is een uitspraak die jij doet. Bijvoorbeeld mijn e-mailadres is john@do.com, deze kunnen claims worden onderschreven door derden. Z’n onderschrijving noemen we een Attest en vormt eigenlijk het bewijs dat jouw uitspraak waar is. In het geval van je e-mailadres zou bijvoorbeeld facebook of gmail kunnen onderschrijven dat dit jouw email address is (ze hebben dit immers getest door je een e-mail te sturen).

- -

Doordat andere partijen jouw uitspraken onderschrijven voorzien ze deze van bewijslast, zo weet een webshop zeker dat jouw e mailadres ook echt jouw emailaddres is.

- - -
- - -

Onderschrijving (attest)

- - -

Een onderschrijving vormt de bewijslast onder een uitspraak, via contracten kan je als gebruiker applicaties toegang geven tot

- - -
- - -

Contract

- - -

Vanuit id-vault kan je jouw gegevens en de bewijslast daarvan ontsluiten voor derden, zo kan je via id-vault inloggen op andere applicaties. Op het moment dat jij jouw gegevens ontsluit voor een andere partij ga je een contract aan met die partij, in dat contract spreek je af welke gegevens je voor welk doel ontsluit. Contracten hebben altijd een eindtijd maar kunnen tussentijds door jou worden opgezegd. Op die manier hou jij zelf controle over wie er toegang heeft tot jouw gegevens.

- -

De enige uitzondering hierop zijn dossiers, een dossier kan een juridische blockade geven op het verbreken van een contract omdat de wet verplicht tot langdurige opslag (bijvoorbeeld personeels dossier)

- - -
- - -

Dossier

- - -

Een dossier is een zet van data die een organisatie over jouw heeft maar die geen onderdeel vormt van jouw online wallet. Denk hierbij aan een personeelsdossier bij je werkgever of een bestelling bij een webstore.

- - -
- - -

Onderschrijvers (issuer)

- - -

Onderschrijvers zijn partijen die jouw uitspraken onderschrijven en daarmee van bewijslast voorzien.

- -{% endblock %} - -{% block jumpto %} - - -
- - -
- Glossary -
- - - - -
- -{% endblock %} diff --git a/api/templates/documentation/index.html.twig b/api/templates/documentation/index.html.twig index 10ba94e9..776384db 100644 --- a/api/templates/documentation/index.html.twig +++ b/api/templates/documentation/index.html.twig @@ -9,100 +9,41 @@

- How to get started with ID-Vault! + How to get started with Landkit!

- ID-Vault is a Self Sovereign Identity (SSI) framework, that means that it aims to make users (self) the ultimate masters (sovereign) of thier data (identity). It does so by providing them a save and reliable wallet to store thire online data. -

- - - -

- The ID-Vault framework + This guide will help you get started with Landkit! All the important stuff ā€“ compiling the source, file structure, build tools, file includes ā€“ is documented here, but should you have any questions, always feel free to reach out to support@goodthemes.co.


- -

- Why ID-Vault? -

- - -

Historically seen there have been a lot of digital identity wallet solutions, SSI is in fact a popular theme or trac on many hackathons and ID-Vault it’s is actually a child of the Dutch / EU oddesy program. So why would we need a new solution?

- -

- Well actually there are two main reasons -

    -
  • Simplicity
  • -
  • Compliance
  • -
-

- -

Let talk a little bit about simplicity first, most wallet and SSI solution operate on a blockchain premise where users make claims about there identity and external organisation back those claims up by proof. A user can then provide there claim + proof to a third party wich based on there trust in the signing organisation accepts the claim. This concept is called chain of trust. Actually ID-Vault is bassed on the same principle, but with one major difference. We handle all of this blockchain magic on our side. And instead of requiring blockchain knowledge from developers we provide a simple to implement OAuth2 interface. That means that if you as a developer have ever build a Facebook, Google of Github sign-on form you have all the knowledge that you need.

- -

The second major difference is compliance, most if not all SSI solutions give full control to users. In fact in most cases the data is stored in a wallet on a mobile device (like a phone) and a user can delete this data at will. That is a nice and idyllic thought but in practice most organizations that you give access to your data are required by law to “hold on to” that data for a given period of time (in europe for example an employer needs to keep employee data in a register for seven years). That dosn’t fly when a user can delete there data at will of simply lose or destroy a device. So in practice organization copy data from a user that logs in with SSI to here own databases. Unfortunately that mean that data moves out of the users control and that a user leads a breadcrumb trail of data with different organizations. In this way a device based wallet leads to less control on your data. How dos ID-Vault solve this? Quite simple actually, first instead of storing the data on a device we store in a secure cloud. Secondly we allow users to set up contracts with organizations that guarantee them access to the users data for a given time. That way the organization is ensurer of legal compliance and no langer needs to store the data locally. Keeping al the users data where it belongs, in your data wallet.

- - -

- So I just give you al my data? right…. -

- -

Well actually no, with ID-Vault a user NEVER transfers the ownership or right of there data to ID-Vault the data stays yours. You simply use the wallet to store it, and share it. Look to us as service provider, an online storage box of sorts that helps you keep in control.

- - -

- But if i’m not paying for it then i am the product right? -

- -

Well that part is actually true, but not in a traditional sense of the word. We actually went to great legal lengths to prevent us form owning your data or having any right to it. That means that we can’t sell ot give it to other parties (even if we wanted to,wich obviously we don’t).

- - -

- So who pays for al of this? -

- -

The organizations that use your data, in the world of modern e-commerce data equals money. That means that you as a user are sitting on a gold mine without the ability to mine it. With ID-Vault you mine it a little bit, organizations pay for accessing your data and that money is then used to keep your data. In a weird way instead of multinationals datamining you, you mine them. Like a modern day data robin hood.

- - -
- - -

- The claim and proof infrastructure -

+

Test

+

onder divider

{% endblock %} {% block jumpto %} - -
- - -
- Frequently Asked Questions -
- - - - -
+
  • + New & extended components +
  • +
  • + Dev setup +
  • +
  • + Compiling +
  • +
  • + File structure +
  • +
  • + Gulp file includes +
  • +
  • + Customizing SCSS +
  • {% endblock %} diff --git a/api/templates/documentation/main.html.twig b/api/templates/documentation/main.html.twig index c15caec8..ea403368 100644 --- a/api/templates/documentation/main.html.twig +++ b/api/templates/documentation/main.html.twig @@ -1,38 +1,9 @@ +{% extends 'base.html.twig'%} - - - - - - +{% set noFooter = true %} - - - - - - - - - - +{% block content %} - - - - - - - Landkit - - - - -{% include 'documentation/menu.html.twig' %} - - - - -
    -
    -
    -
    +
    +
    +
    +
    + +
    +
    + + +
    + Getting started +
    + + + + + +
    + Section +
    -
    -
    - {% include 'documentation/sidenav.html.twig' %} + + + + +
    + +
    +
    + {% block documentation %} -
    -
    + {% endblock %} - - {% block documentation %} +
    +
    +
    - {% endblock %} + +
    + Jump to +
    -
    -
    - - {% block jumpto %} + +
      + {% block jumpto %} - {% endblock %} -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + {% endblock %} + +
    +
    +
    + +
    +{% endblock %} diff --git a/api/templates/documentation/menu.html.twig b/api/templates/documentation/menu.html.twig deleted file mode 100644 index 08666358..00000000 --- a/api/templates/documentation/menu.html.twig +++ /dev/null @@ -1,135 +0,0 @@ - - diff --git a/api/templates/documentation/sidenav.html.twig b/api/templates/documentation/sidenav.html.twig deleted file mode 100644 index 2d944218..00000000 --- a/api/templates/documentation/sidenav.html.twig +++ /dev/null @@ -1,58 +0,0 @@ - - -
    - Getting started -
    - - - - - -
    - Documentation -
    - - - - - - -
    - Legal -
    - - - diff --git a/api/templates/landkit/getstarted-section.html.twig b/api/templates/landkit/getstarted-section.html.twig index a2a189c4..6964f7a9 100644 --- a/api/templates/landkit/getstarted-section.html.twig +++ b/api/templates/landkit/getstarted-section.html.twig @@ -1,4 +1,4 @@ -
    +
    @@ -6,7 +6,7 @@ -

    +

    {{ 'Get in charge of your online data'|trans|capitalize }}

    diff --git a/api/templates/landkit/menu.html.twig b/api/templates/landkit/menu.html.twig index cb2e1529..84cb8e3e 100644 --- a/api/templates/landkit/menu.html.twig +++ b/api/templates/landkit/menu.html.twig @@ -24,178 +24,13 @@ diff --git a/api/templates/landkit/registration-section.html.twig b/api/templates/landkit/registration-section.html.twig index 694c80a1..3be40c52 100644 --- a/api/templates/landkit/registration-section.html.twig +++ b/api/templates/landkit/registration-section.html.twig @@ -5,7 +5,7 @@

    {{ 'the best place to'|trans|capitalize}}
    -

    diff --git a/api/templates/landkit/welcome-section.html.twig b/api/templates/landkit/welcome-section.html.twig index dbfa6e08..2818a2dc 100644 --- a/api/templates/landkit/welcome-section.html.twig +++ b/api/templates/landkit/welcome-section.html.twig @@ -4,7 +4,7 @@

    - ... + ...
    diff --git a/api/translations/messages.nl.xlf b/api/translations/messages.nl.xlf index 1307533f..6a1a551b 100644 --- a/api/translations/messages.nl.xlf +++ b/api/translations/messages.nl.xlf @@ -133,9 +133,9 @@ claims claims - + no claims available - __no claims available + geen claims beschikbaar add data @@ -185,7 +185,7 @@ no contracts available geen contracten beschikbaar - + general algemeen @@ -221,15 +221,15 @@ basic information basis informatie - + become a developer! word ontwikkelaar! - + Are you an application developer? And are your hands itching to get started with id-vault? Then all you have to do is turn on the developer view, you can do that by using the slider in your personal settings or by pressing this button. Ben je een ontwikkelaar van applicaties? En jeuken je handen om aan de slag te gaan met id-vault? Dan is het enige wat je hoeft te doen de ontwikkelaars weergave aanzetten, dat kan je doen moet het schuifje in je persoonlijke instellingen of door op deze knop te drukken. - + view usage gebruik inzien @@ -861,11 +861,11 @@ organizations organisaties - + applications applicaties - + documentation documentatie @@ -873,15 +873,15 @@ new nieuw - + no organizations available geen organisaties beschikbaar - + no applications available geen applicaties beschikbaar - + developer view ontwikkelaars weergave @@ -1289,7 +1289,7 @@ to change your password om uw wachtwoord te wijzigen - + to login om in te loggen @@ -1705,90 +1705,6 @@ back to safety back to safety - - no organizations - __no organizations - - - development - __development - - - free - gratis - - - email us - mail ons - - - take control - take control - - - take your data - take your data - - - authenticate users via oauth - gebruikers authenticeren via oauth - - - basic data - basis gegevens - - - access to the basic user data - toegang to basis gebruikers gegevens - - - SAML / Active Directory - SAML / Active Directory - - - short text - short text - - - certain claims for data - bepaalde claims voor gegevens - - - for example: IDIN, IDeal or phone number - bijvoorbeeld: IDIN, IDeal of telefoonnummer - - - how does it work - hoe werkt het - - - technics - techniek - - - terminology - terminologie - - - terminology for id-vault - terminologie voor id-vault - - - terms of service - algemene voorwaarden - - - add new - toevoegen - - - add organization - organisatie toevoegen - - - choose logo - kies logo - From 5e5b3266c4ed40a418916eb33de35801d374bdb2 Mon Sep 17 00:00:00 2001 From: Wilco Louwerse Date: Mon, 26 Oct 2020 16:11:39 +0100 Subject: [PATCH 07/10] Revert "Revert "Merge branch 'dev-gino' into dev-wilco"" This reverts commit 4ed01279a8069f677d427b45962fa343f7c8b15f. --- api/helm/id-vault-0.1.0.tgz | Bin 7116 -> 7119 bytes api/helm/index.yaml | 6 +- api/public/schema/openapi.yaml | 8 +- api/src/Controller/ApiController.php | 127 -- api/src/Controller/ArcController.php | 50 - api/src/Controller/BcController.php | 52 - api/src/Controller/CcController.php | 50 - api/src/Controller/ChinController.php | 1354 ----------------- api/src/Controller/ChrcController.php | 403 ----- api/src/Controller/CmcController.php | 137 -- api/src/Controller/DashboardController.php | 70 +- api/src/Controller/DefaultController.php | 54 + .../Controller/DocumentationController.php | 11 + api/templates/base.html.twig | 2 +- .../modals/add-organization-modal.html.twig | 83 + .../dashboard/organizations.html.twig | 33 +- api/templates/default/developers.html.twig | 680 +++++++++ api/templates/default/pricing.html.twig | 243 +++ api/templates/default/privacy.html.twig | 249 +++ api/templates/default/terms.html.twig | 249 +++ api/templates/default/users.html.twig | 796 ++++++++++ .../documentation/glossary.html.twig | 103 ++ api/templates/documentation/index.html.twig | 103 +- api/templates/documentation/main.html.twig | 150 +- api/templates/documentation/menu.html.twig | 135 ++ api/templates/documentation/sidenav.html.twig | 58 + .../landkit/getstarted-section.html.twig | 4 +- api/templates/landkit/menu.html.twig | 175 ++- .../landkit/registration-section.html.twig | 2 +- .../landkit/welcome-section.html.twig | 2 +- api/translations/messages.nl.xlf | 108 +- 31 files changed, 3201 insertions(+), 2296 deletions(-) delete mode 100644 api/src/Controller/ApiController.php delete mode 100644 api/src/Controller/ArcController.php delete mode 100644 api/src/Controller/BcController.php delete mode 100644 api/src/Controller/CcController.php delete mode 100644 api/src/Controller/ChinController.php delete mode 100644 api/src/Controller/ChrcController.php delete mode 100644 api/src/Controller/CmcController.php create mode 100644 api/templates/dashboard/modals/add-organization-modal.html.twig create mode 100644 api/templates/default/developers.html.twig create mode 100644 api/templates/default/pricing.html.twig create mode 100644 api/templates/default/privacy.html.twig create mode 100644 api/templates/default/terms.html.twig create mode 100644 api/templates/default/users.html.twig create mode 100644 api/templates/documentation/glossary.html.twig create mode 100644 api/templates/documentation/menu.html.twig create mode 100644 api/templates/documentation/sidenav.html.twig diff --git a/api/helm/id-vault-0.1.0.tgz b/api/helm/id-vault-0.1.0.tgz index 79cff62a38d38671088af127b7c3deae8b867685..9f7fbdc6489f2b3676a7bfbbc3b6c6577495339b 100644 GIT binary patch literal 7119 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 zWRrender('api/index.html.twig', [ - 'controller_name' => 'ApiController', - ]); - } - - /** - * @Route("/{component}/{type}") - */ - public function collectionAction($component, $type, Request $request, ApiService $apiService, SerializerInterface $serializer) - { - $contentType = $request->headers->get('accept'); - if (!$contentType) { - $contentType = $request->headers->get('Accept'); - } - switch ($contentType) { - case 'application/json': - $renderType = 'json'; - break; - case 'application/ld+json': - $renderType = 'jsonld'; - break; - case 'application/hal+json': - $renderType = 'jsonhal'; - break; - default: - $contentType = 'application/json'; - $renderType = 'json'; - } - if ($request->isMethod('POST')) { - $results = $apiService->createResource(json_decode($request->getContent(), true), $component, $type); - } elseif ($request->isMethod('GET')) { - $results = $apiService->getResourceList($component, $type, $request->server->get('QUERY_STRING')); - } else { - throw new HttpException(405, 'METHOD NOT ALLOWED'); - } - $response = $serializer->serialize( - $results, - $renderType, - ['enable_max_depth'=> true] - ); - - // Creating a response - $response = new Response( - $response, - Response::HTTP_OK, - ['content-type' => $contentType] - ); - - return $response; - } - - /** - * @Route("/{component}/{type}/{id}") - * @Route("/{component}/{type}/{id}/{log}") - */ - public function itemAction($component, $type, $id, $log, Request $request, ApiService $apiService, SerializerInterface $serializer) - { - $contentType = $request->headers->get('accept'); - if (!$contentType) { - $contentType = $request->headers->get('Accept'); - } - switch ($contentType) { - case 'application/json': - $renderType = 'json'; - break; - case 'application/ld+json': - $renderType = 'jsonld'; - break; - case 'application/hal+json': - $renderType = 'jsonhal'; - break; - default: - $contentType = 'application/json'; - $renderType = 'json'; - } - if ($request->isMethod('PUT')) { - $results = $apiService->updateResource(json_decode($request->getContent(), true), $component, $type, $id); - } elseif ($request->isMethod('GET')) { - $results = $apiService->getResource($component, $type, $id, $log); - } elseif ($request->isMethod('DELETE')) { - $results = $apiService->deleteResource($component, $type, $id); - } else { - throw new HttpException(405, 'METHOD NOT ALLOWED'); - } - - $response = $serializer->serialize( - $results, - $renderType, - ['enable_max_depth'=> true] - ); - - // Creating a response - $response = new Response( - $response, - Response::HTTP_OK, - ['content-type' => $contentType] - ); - - return $response; - } -} diff --git a/api/src/Controller/ArcController.php b/api/src/Controller/ArcController.php deleted file mode 100644 index 18fb153a..00000000 --- a/api/src/Controller/ArcController.php +++ /dev/null @@ -1,50 +0,0 @@ -getResourceList(['component'=>'arc', 'type'=>'calendars'], ['resource'=>$this->getUser()->getPerson(), 'order[endDate]' => 'desc'])['hydra:member']; - $variables['resources'] = $calendar[0]['events']; - - return $variables; - } - - /** - * @Route("/organisation") - * @Template - */ - public function organisationAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') - { - $variables = []; - $variables['resources'] = $commonGroundService->getResourceList(['component'=>'arc', 'type'=>'calendars'], ['resource'=>$this->getUser()->getOrganization()])['hydra:member']; - - return $variables; - } -} diff --git a/api/src/Controller/BcController.php b/api/src/Controller/BcController.php deleted file mode 100644 index da29a9be..00000000 --- a/api/src/Controller/BcController.php +++ /dev/null @@ -1,52 +0,0 @@ -getResourceList(['component'=>'bc', 'type'=>'invoices'], ['customer'=>$this->getUser()->getPerson()])['hydra:member']; - - return $variables; - } - - /** - * @Route("/organization") - * @Security("is_granted('ROLE_group.admin') or is_granted('ROLE_group.organization_admin')") - * @Template - */ - public function organizationAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') - { - $variables = []; - $variables['resources'] = $commonGroundService->getResourceList(['component'=>'bc', 'type'=>'invoices'], ['submitters.brp'=>$this->getUser()->getOrganization()])['hydra:member']; - - return $variables; - } -} diff --git a/api/src/Controller/CcController.php b/api/src/Controller/CcController.php deleted file mode 100644 index 3a9fb17c..00000000 --- a/api/src/Controller/CcController.php +++ /dev/null @@ -1,50 +0,0 @@ -getResourceList(['component'=>'cc', 'type'=>'organizations'])['hydra:member']; - - if ($request->isMethod('POST')) { - $resource = $request->request->all(); - -// var_dump($resource); -// die; - - $commonGroundService->saveResource($resource, (['component'=>'cc', 'type'=>'organizations'])); - - return $this->redirect($this->generateUrl('app_cc_organization')); - } - - return $variables; - } -} diff --git a/api/src/Controller/ChinController.php b/api/src/Controller/ChinController.php deleted file mode 100644 index 3d2d0994..00000000 --- a/api/src/Controller/ChinController.php +++ /dev/null @@ -1,1354 +0,0 @@ -getResourceList(['component' => 'chin', 'type' => 'checkins'], ['person' => $this->getUser()->getPerson(), 'order[dateCreated]' => 'desc'])['hydra:member']; - - return $variables; - } - - /** - * @Route("/checkin/organisation") - * @Security("is_granted('ROLE_group.admin') or is_granted('ROLE_group.organization_admin')") - * - * @Template - */ - public function checkinOrganizationAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') - { - $variables = []; - $variables['checkins'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'checkins'], ['person' => $this->getUser()->getOrganization(), 'order[dateCreated]' => 'desc'])['hydra:member']; - - return $variables; - } - - /** - * @Route("/checkin/statistics") - * @Security("is_granted('ROLE_group.admin') or is_granted('ROLE_group.organization_admin')") - * @Template - */ - public function checkinStatisticsAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') - { - $variables = []; - $variables['checkins'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'checkins'], ['person' => $this->getUser()->getOrganization(), 'order[dateCreated]' => 'desc'])['hydra:member']; - - return $variables; - } - - /** - * @Route("/checkin/reservations") - * @Template - */ - public function checkinReservationsAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') - { - $variables = []; - if (in_array('group.admin', $this->getUser()->getRoles())) { - $organization = $commonGroundService->getResource($this->getUser()->getOrganization()); - $organization = $commonGroundService->cleanUrl(['component' => 'wrc', 'type' => 'organizations', 'id' => $organization['id']]); - $variables['reservations'] = $commonGroundService->getResourceList(['component' => 'arc', 'type' => 'reservations'], ['provider' => $organization, 'order[dateCreated]' => 'desc'])['hydra:member']; - } else { - $person = $commonGroundService->getResource($this->getUser()->getPerson()); - $person = $commonGroundService->cleanUrl(['component' => 'cc', 'type' => 'people', 'id' => $person['id']]); - $variables['reservations'] = $commonGroundService->getResourceList(['component' => 'arc', 'type' => 'reservations'], ['underName' => $person, 'order[dateCreated]' => 'desc'])['hydra:member']; - - foreach ($variables['reservations'] as &$reservation) { - $nodes = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['accommodation' => $reservation['event']['calendar']['resource']])['hydra:member']; - if (count($nodes) > 0) { - $reservation['node'] = $nodes[0]; - } - - if (isset($nodes[0]['configuration']['cancelable'])) { - $hourDiff = round((strtotime('now') - strtotime($reservation['event']['startDate'])) / 3600); - $dayDiff = round((strtotime($reservation['event']['startDate']) - strtotime('now')) / (60 * 60 * 24)); - - if ($hourDiff < (float) $nodes[0]['configuration']['cancelable'] && $dayDiff == 0) { - $reservation['cantCancel'] = true; - } - } - } - } - - return $variables; - } - - /** - * @Route("/nodes") - * @Security("is_granted('ROLE_scope.chin.node.write')") - * @Template - */ - public function nodesAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') - { - $variables = []; - $variables['organization'] = $commonGroundService->getResource($this->getUser()->getOrganization()); - $variables['accommodations'] = $commonGroundService->getResourceList(['component' => 'lc', 'type' => 'accommodations'], ['place.organization' => $variables['organization']['id']])['hydra:member']; - $variables['nodes'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['organization' => $variables['organization']['id']])['hydra:member']; - - //set rgb values to hex and place them in temp property - foreach ($variables['nodes'] as &$node) { - if (isset($node['qrConfig'])) { - if (isset($node['qrConfig']['foreground_color'])) { - $colors = $node['qrConfig']['foreground_color']; - $node['foregroundColor'] = sprintf('#%02x%02x%02x', $colors['r'], $colors['g'], $colors['b']); - } - - if (isset($node['qrConfig']['background_color'])) { - $colors = $node['qrConfig']['background_color']; - $node['backgroundColor'] = sprintf('#%02x%02x%02x', $colors['r'], $colors['g'], $colors['b']); - } - } - } - - if ($request->isMethod('POST')) { - $resource = $request->request->all(); - - // Check if the accommodation already exists - if (key_exists('accommodation', $resource) and !empty($resource['accommodation'])) { - $accommodation = $commonGroundService->getResource($resource['accommodation']); - // Check if the place already exists - if (key_exists('place', $accommodation) and !empty($accommodation['place'])) { - $place = $commonGroundService->getResource($commonGroundService->cleanUrl(['component' => 'lc', 'type' => 'places', 'id' => $accommodation['place']['id']])); - if (key_exists('address', $place) and !empty($place['address'])) { - $address = $commonGroundService->getResource($commonGroundService->cleanUrl(['component' => 'lc', 'type' => 'addresses', 'id' => $place['address']['id']])); - } - } - } - - // Create a new address or update the existing one for the place of this node - $address['name'] = $resource['name']; - if (key_exists('address', $resource)) { - $address['street'] = $resource['address']['street']; - $address['houseNumber'] = $resource['address']['houseNumber']; - $address['houseNumberSuffix'] = $resource['address']['houseNumberSuffix']; - $address['postalCode'] = $resource['address']['postalCode']; - $address['locality'] = $resource['address']['locality']; - // Check if address is set and if so, unset it in the resource used for creating a node - unset($resource['address']); - } - $address = $commonGroundService->saveResource($address, (['component' => 'lc', 'type' => 'addresses'])); - - // Create a new place or update the existing one for this node - $place['name'] = $resource['name']; - $place['description'] = $resource['description']; - $place['publicAccess'] = true; - $place['smokingAllowed'] = false; - $place['openingTime'] = '09:00'; - $place['closingTime'] = '22:00'; - if (key_exists('accommodation', $resource) and !empty($resource['accommodation'])) { - $place['accommodations'] = ['/accommodations/'.$accommodation['id']]; - } - $place['organization'] = $commonGroundService->cleanUrl(['component' => 'wrc', 'type' => 'organizations', 'id' => $variables['organization']['id']]); - $place['address'] = '/addresses/'.$address['id']; - $place = $commonGroundService->saveResource($place, (['component' => 'lc', 'type' => 'places'])); - - // Create a new accommodation or update the existing one for this node - $accommodation['name'] = $resource['name']; - $accommodation['description'] = $resource['description']; - $accommodation['place'] = '/places/'.$place['id']; - if (key_exists('maximumAttendeeCapacity', $resource) and !empty($resource['maximumAttendeeCapacity'])) { - $accommodation['maximumAttendeeCapacity'] = (int) $resource['maximumAttendeeCapacity']; - // Check if maximumAttendeeCapacity is set and if so, unset it in the resource used for creating a node - unset($resource['maximumAttendeeCapacity']); - } - $accommodation = $commonGroundService->saveResource($accommodation, (['component' => 'lc', 'type' => 'accommodations'])); - - // Node configuration/personalization - if (key_exists('qrConfig', $resource)) { - // Convert hex color to rgb - list($r, $g, $b) = sscanf($resource['qrConfig']['foreground_color'], '#%02x%02x%02x'); - $resource['qrConfig']['foreground_color'] = ['r'=>$r, 'g'=>$g, 'b'=>$b]; - list($r, $g, $b) = sscanf($resource['qrConfig']['background_color'], '#%02x%02x%02x'); - $resource['qrConfig']['background_color'] = ['r'=>$r, 'g'=>$g, 'b'=>$b]; - } - - // Save the (new or already existing) node - $resource['accommodation'] = $commonGroundService->cleanUrl(['component' => 'lc', 'type' => 'accommodations', 'id' => $accommodation['id']]); - $commonGroundService->saveResource($resource, (['component' => 'chin', 'type' => 'nodes'])); - - return $this->redirect($this->generateUrl('app_chin_nodes')); - } - - return $variables; - } - - /** - * This function shows all available locations. - * - * @Route("/") - * @Security("is_granted('ROLE_group.admin') or is_granted('ROLE_group.organization_admin')") - * @Template - */ - public function indexAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - $variables = $applicationService->getVariables(); - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'cmc', 'type' => 'contact_moments'], ['receiver' => $this->getUser()->getPerson()])['hydra:member']; - - return $variables; - } - - /** - * This function will render a qr code. - * - * It provides the following optional query parameters - * size: the size of the image renderd, default 300 - * margin: the maring on the image in pixels, default 10 - * file: the file type renderd, default png - * encoding: the encoding used for the file, default: UTF-8 - * - * @Route("/render/{id}") - */ - public function renderAction(Session $session, $id, Request $request, FlashBagInterface $flash, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, QrCodeFactoryInterface $qrCodeFactory) - { - $node = $commonGroundService->getResource(['component' => 'chin', 'type' => 'nodes', 'id'=>$id]); - - $url = $this->generateUrl('app_chin_checkin', ['code'=>$node['reference']], UrlGeneratorInterface::ABSOLUTE_URL); - - $configuration = $node['qrConfig']; - if ($request->query->get('size')) { - $configuration['size'] = $request->query->get('size', 300); - } - if ($request->query->get('margin')) { - $configuration['margin'] = $request->query->get('margin', 10); - } - - $qrCode = $qrCodeFactory->create($url, $configuration); - - // Set advanced options - $qrCode->setWriterByName($request->query->get('file', 'png')); - $qrCode->setEncoding($request->query->get('encoding', 'UTF-8')); - //$qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH()); - - $response = new Response($qrCode->writeString()); - $response->headers->set('Content-Type', $qrCode->getContentType()); - $response->setStatusCode(Response::HTTP_NOT_FOUND); - - return $response; - } - - /** - * This function will prompt a downloaden for the qr code. - * - * It provides the following optional query parameters - * size: the size of the image renderd, default 300 - * margin: the maring on the image in pixels, default 10 - * file: the file type renderd, default png - * encoding: the encoding used for the file, default: UTF-8 - * - * @Route("/download/{id}") - */ - public function downloadAction(Session $session, $id, $type = 'png', Request $request, FlashBagInterface $flash, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, QrCodeFactoryInterface $qrCodeFactory) - { - $splits = explode('.', $id); - $id = $splits[0]; - $extention = $splits[1]; - $node = $commonGroundService->getResource(['component' => 'chin', 'type' => 'nodes', 'id'=>$id]); - - $url = $this->generateUrl('app_chin_checkin', ['code'=>$node['reference']], UrlGeneratorInterface::ABSOLUTE_URL); - - $configuration = $node['qrConfig']; - if ($request->query->get('size')) { - $configuration['size'] = $request->query->get('size', 300); - } - if ($request->query->get('margin')) { - $configuration['margin'] = $request->query->get('margin', 10); - } - - $qrCode = $qrCodeFactory->create($url, $configuration); - - // Set advanced options - $qrCode->setWriterByName($request->query->get('file', $extention)); - $qrCode->setEncoding($request->query->get('encoding', 'UTF-8')); - //$qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH()); - - $filename = 'qr-code.'.$extention; - - $response = new Response($qrCode->writeString()); - // Create the disposition of the file - $disposition = $response->headers->makeDisposition( - ResponseHeaderBag::DISPOSITION_ATTACHMENT, - $filename - ); - - // Set the content disposition - $response->headers->set('Content-Disposition', $disposition); - - return $response; - } - - /** - * This function will kick of the suplied proces with given values. - * - * @Route("/checkin/{code}") - * @Template - */ - public function checkinAction(Session $session, $code = null, Request $request, FlashBagInterface $flash, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - $session->set('code', $code); - $variables['code'] = $code; - - // Oke we want a user so lets check if we have one - if (!$this->getUser()) { - return $this->redirect($this->generateUrl('app_chin_login', ['code'=>$code])); - } - - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - // We want this resource to be a checkin - if ($variables['resource']['type'] != 'checkin') { - switch ($variables['resource']['type']) { - case 'reservation': - return $this->redirect($this->generateUrl('app_chin_reservation', ['code'=>$code])); - break; - case 'clockin': - return $this->redirect($this->generateUrl('app_chin_clockin', ['code'=>$code])); - break; - case 'mailing': - return $this->redirect($this->generateUrl('app_chin_mailing', ['code'=>$code])); - break; - default: - $this->addFlash('warning', 'Could not find a valid type for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - } - - $variables['code'] = $code; - - if ($request->isMethod('POST') && $request->request->get('method') == 'checkin') { - - //update person - $name = $request->request->get('name'); - $email = $request->request->get('email'); - $tel = $request->request->get('telephone'); - - $person = $commonGroundService->getResource($this->getUser()->getPerson()); - - // Wat doet dit? - $user = $commonGroundService->getResourceList(['component' => 'uc', 'type' => 'users'], ['person' => $this->getUser()->getPerson()])['hydra:member']; - $user = $user[0]; - - if (isset($person['emails'][0])) { - //$emailResource = $person['emails'][0]; - //$emailResource['email'] = $email; - // @Hotfix - //$emailResource['@id'] = $commonGroundService->cleanUrl(['component'=>'cc', 'type'=>'emails', 'id'=>$emailResource['id']]); - //$emailResource = $commonGroundService->updateResource($emailResource); - //$person['emails'][0] = 'emails/'.$emailResource['id']; - } else { - $emailObject['email'] = $email; - $emailObject = $commonGroundService->createResource($emailObject, ['component' => 'cc', 'type' => 'emails']); - $person['emails'][0] = 'emails/'.$emailObject['id']; - } - - if (isset($person['telephones'][0])) { - //$telephoneResource = $person['telephones'][0]; - //$telephoneResource['telephone'] = $tel; - // @Hotfix - //$telephoneResource['@id'] = $commonGroundService->cleanUrl(['component'=>'cc', 'type'=>'telephones', 'id'=>$telephoneResource['id']]); - //$telephoneObject = $commonGroundService->updateResource($telephoneResource); - //$person['telephones'][0] = 'telephones/'.$telephoneObject['id']; - } elseif ($tel) { - $telephoneObject['telephone'] = $tel; - $telephoneObject = $commonGroundService->createResource($telephoneObject, ['component' => 'cc', 'type' => 'telephones']); - $person['telephones'][0] = 'telephones/'.$telephoneObject['id']; - } - - // @Hotfix - $person['@id'] = $commonGroundService->cleanUrl(['component'=>'cc', 'type'=>'people', 'id'=>$person['id']]); - //$person = $commonGroundService->updateResource($person); - - // Lets see if there if there is an active checking - $checkIns = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'checkins'], ['person' => $person['@id'], 'node' => 'nodes/'.$variables['resource']['id'], 'order[dateCreated]' => 'desc'])['hydra:member']; - - if ((count($checkIns) > 1) && $checkIns[0]['dateCheckedOut'] == null) { - $hourDiff = round((strtotime('now') - strtotime($checkIns[0]['dateCreated'])) / 3600); - // edit this number to determine how many hours before you are not seens as checked in anymore - $hoursForCheckout = 4; - if ($hourDiff < $hoursForCheckout) { - return $this->redirect($this->generateUrl('app_chin_checkout', ['code'=>$code])); - } - } - - // Create check-in - $checkIn = []; - $checkIn['node'] = 'nodes/'.$variables['resource']['id']; - $checkIn['person'] = $person['@id']; - $checkIn['userUrl'] = $user['@id']; - if ($session->get('checkingProvider')) { - $checkIn['provider'] = $session->get('checkingProvider'); - } else { - $checkIn['provider'] = 'session'; - } - - $checkIn = $commonGroundService->createResource($checkIn, ['component' => 'chin', 'type' => 'checkins']); - - return $this->redirect($this->generateUrl('app_chin_confirmation', ['id'=>$checkIn['id']])); - } - - return $variables; - } - - /** - * @Route("/edit") - * @Template - */ - public function editAction(Session $session, Request $request, CommonGroundService $commonGroundService) - { - $variables['code'] = $session->get('code'); - $nodes = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $variables['code']])['hydra:member']; - $variables['person'] = $commonGroundService->getResource($this->getUser()->getPerson()); - - if (count($nodes) > 0) { - $variables['node'] = $nodes[0]; - } - - if ($request->isMethod('POST')) { - $person = $variables['person']; - - $telephone = $request->get('telephone'); - $email = $request->get('email'); - - $person['givenName'] = $request->get('givenName'); - $person['familyName'] = $request->get('familyName'); - if (isset($telephone)) { - $person['telephones'][0] = []; - $person['telephones'][0]['telephone'] = $telephone; - } - if (isset($email)) { - $person['emails'][0] = []; - $person['emails'][0]['email'] = $email; - } - - $person = $commonGroundService->updateResource($person); - - $backUrl = $session->get('backUrl', false); - if ($backUrl) { - return $this->redirect($backUrl); - } else { - return $this->redirect($this->generateUrl('app_default_index')); - } - } - - return $variables; - } - - /** - * @Route("/reset/{token}") - * @Template - */ - public function resetAction(Session $session, Request $request, CommonGroundService $commonGroundService, ParameterBagInterface $params, $token = null) - { - $variables['code'] = $session->get('code'); - $nodes = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $variables['code']])['hydra:member']; - if ($token) { - $application = $commonGroundService->getResource(['component'=>'wrc', 'type'=>'applications', 'id' => $params->get('app_id')]); - $providers = $commonGroundService->getResourceList(['component' => 'uc', 'type' => 'providers'], ['type' => 'token', 'application' => $params->get('app_id')])['hydra:member']; - $tokens = $commonGroundService->getResourceList(['component' => 'uc', 'type' => 'tokens'], ['token' => $token, 'provider.name' => $providers[0]['name']])['hydra:member']; - if (count($tokens) > 0) { - $variables['token'] = $tokens[0]; - $userUlr = $commonGroundService->cleanUrl(['component'=>'uc', 'type'=>'users', 'id'=>$tokens[0]['user']['id']]); - $variables['selectedUser'] = $userUlr; - } - } - - if (count($nodes) > 0) { - $variables['node'] = $nodes[0]; - } - - if ($request->isMethod('POST') && $request->get('password')) { - $user = $commonGroundService->getResource($request->get('selectedUser')); - $password = $request->get('password'); - - $user['password'] = $password; - - $commonGroundService->updateResource($user); - - $variables['reset'] = true; - } elseif ($request->isMethod('POST')) { - $variables['message'] = true; - $username = $request->get('email'); - $users = $commonGroundService->getResourceList(['component'=>'uc', 'type'=>'users'], ['username'=> $username], true, false, true, false, false); - $users = $users['hydra:member']; - - $application = $commonGroundService->getResource(['component'=>'wrc', 'type'=>'applications', 'id' => $params->get('app_id')]); - $organization = $application['organization']['@id']; - $providers = $commonGroundService->getResourceList(['component' => 'uc', 'type' => 'providers'], ['type' => 'token', 'application' => $params->get('app_id')])['hydra:member']; - - if (count($users) > 0) { - $user = $users[0]; - $person = $commonGroundService->getResource($user['person']); - - $validChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - $code = substr(str_shuffle(str_repeat($validChars, ceil(3 / strlen($validChars)))), 1, 5); - - $token = []; - $token['token'] = $code; - $token['user'] = 'users/'.$user['id']; - $token['provider'] = 'providers/'.$providers[0]['id']; - $token = $commonGroundService->createResource($token, ['component' => 'uc', 'type' => 'tokens']); - - $url = $request->getUri(); - $link = $url.'/'.$token['token']; - - $message = []; - - if ($params->get('app_env') == 'prod') { - $message['service'] = '/services/eb7ffa01-4803-44ce-91dc-d4e3da7917da'; - } else { - $message['service'] = '/services/1541d15b-7de3-4a1a-a437-80079e4a14e0'; - } - $message['status'] = 'queued'; - $message['data'] = ['resource' => $link, 'sender'=> 'no-reply@conduction.nl']; - $message['content'] = $commonGroundService->cleanUrl(['component'=>'wrc', 'type'=>'templates', 'id'=>'60314e20-3760-4c17-9b18-3a99a11cbc5f']); - $message['reciever'] = $user['username']; - $message['sender'] = 'no-reply@conduction.nl'; - - $commonGroundService->createResource($message, ['component'=>'bs', 'type'=>'messages']); - } - } - - return $variables; - } - - /** - * This function will kick of the suplied proces with given values. - * - * @Route("/reservation/{code}") - * @Template - */ - public function reservationAction(Session $session, $code = null, Request $request, FlashBagInterface $flash, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - $session->set('code', $code); - $variables['code'] = $code; - - // Oke we want a user so lets check if we have one - if (!$this->getUser()) { - return $this->redirect($this->generateUrl('app_chin_login', ['code'=>$code])); - } - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - $variables['nodes'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['organization' => $variables['resource']['organization'], 'type' => 'reservation'])['hydra:member']; - - // We want this resource to be a checkin - if ($variables['resource']['type'] != 'reservation') { - switch ($variables['resource']['type']) { - case 'checkin': - return $this->redirect($this->generateUrl('app_chin_checkin', ['code'=>$code])); - break; - case 'mailing': - return $this->redirect($this->generateUrl('app_chin_mailing', ['code'=>$code])); - break; - case 'clockin': - return $this->redirect($this->generateUrl('app_chin_clockin', ['code'=>$code])); - break; - default: - $this->addFlash('warning', 'Could not find a valid type for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - } - - $variables['code'] = $code; - $variables['organization'] = $commonGroundService->getResource($variables['resource']['organization']); - - $calendars = $commonGroundService->getResourceList(['component' => 'arc', 'type' => 'calendars'], ['resource' => $variables['resource']['accommodation']])['hydra:member']; - - if (count($calendars) > 0) { - $variables['calendar'] = $calendars[0]; - } else { - $variables['error'] = 'Something went wrong'; - } - - if ($request->isMethod('POST')) { - $validChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - $name = substr(str_shuffle(str_repeat($validChars, ceil(3 / strlen($validChars)))), 1, 5); - - $amount = $request->get('amount'); - $person = $commonGroundService->getResource($this->getUser()->getPerson()); - - // Create reservation - $reservation = []; - $reservation['name'] = $name; - $reservation['underName'] = $commonGroundService->cleanUrl(['component' => 'cc', 'type' => 'people', 'id' => $person['id']]); - $reservation['numberOfParticipants'] = intval($amount); - $reservation['comment'] = $request->get('comment'); - $organization = $commonGroundService->getResource($variables['resource']['organization']); - $organization = $commonGroundService->cleanUrl(['component' => 'wrc', 'type' => 'organizations', 'id' => $organization['id']]); - $reservation['provider'] = $organization; - //reservation event part - - $date = \DateTime::createFromFormat('Y-m-d H:i', $request->get('date').$request->get('time')); - - $reservation['event']['name'] = $name; - $reservation['event']['startDate'] = $date->format('Y-m-d H:i'); - $reservation['event']['endDate'] = $date->format('Y-m-d H:i'); - $reservation['event']['calendar'] = '/calendars/'.$variables['calendar']['id']; - $reservation = $commonGroundService->createResource($reservation, ['component' => 'arc', 'type' => 'reservations']); - - return $this->redirect($this->generateUrl('app_chin_checkinreservations')); - } - - return $variables; - } - - /** - * This function shows all available locations. - * - * @Route("/login/{code}") - * @Template - */ - public function loginAction(Session $session, $code = null, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - - $session->set('code', $code); - $variables['code'] = $code; - - // If we have a valid user then we do not need to login - if ($this->getUser()) { - $session->set('checkingProvider', 'session'); - - return $this->redirect($this->generateUrl('app_chin_checkin', ['code'=>$code])); - } - - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables['code'] = $code; - - if ($request->isMethod('POST') && $request->request->get('method')) { - $method = $request->request->get('method'); - - switch ($method) { - case 'idin': - return $this->redirect($this->generateUrl('app_user_idin', ['backUrl'=>$this->generateUrl('app_chin_checkin', ['code'=>$code], urlGeneratorInterface::ABSOLUTE_URL)])); - case 'idinLogin': - return $this->redirect($this->generateUrl('app_user_idinlogin', ['backUrl'=>$this->generateUrl('app_chin_checkin', ['code'=>$code], urlGeneratorInterface::ABSOLUTE_URL)])); - case 'facebook': - return $this->redirect($this->generateUrl('app_user_facebook', ['backUrl'=>$this->generateUrl('app_chin_checkin', ['code'=>$code], urlGeneratorInterface::ABSOLUTE_URL)])); - case 'google': - return $this->redirect($this->generateUrl('app_user_gmail', ['backUrl'=>$this->generateUrl('app_chin_checkin', ['code'=>$code], urlGeneratorInterface::ABSOLUTE_URL)])); - case 'acount': - return $this->redirect($this->generateUrl('app_chin_acount', ['code'=>$code])); - } - } - - return $variables; - } - - /** - * This function shows all available locations. - * - * @Route("/acount/{code}") - * @Template - */ - public function acountAction(Session $session, $code = null, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - - $session->set('code', $code); - $variables['code'] = $code; - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables['code'] = $code; - - // Lets handle a post - if ($request->isMethod('POST')) { - $name = $request->request->get('name'); - $username = $request->request->get('email'); - $tel = $request->request->get('telephone'); - $password = $request->request->get('password'); - $crf = $request->request->get('_csrf_token'); - - $users = $commonGroundService->getResourceList(['component'=>'uc', 'type'=>'users'], ['username'=> $username], true, false, true, false, false); - $users = $users['hydra:member']; - - // Exsisting user - if (count($users) > 0) { - $user = $users[0]; - $person = $commonGroundService->getResource($user['person']); - - $credentials = [ - 'username' => $username, - 'password' => $password, - 'csrf_token' => $crf, - ]; - - $user = $commonGroundService->createResource($credentials, ['component'=>'uc', 'type'=>'login'], false, true, false, false); - - // validate user - if (!$user) { - $variables['password_error'] = 'invalid password'; - $variables['user_info']['name'] = $name; - $variables['user_info']['email'] = $username; - $variables['user_info']['telephone'] = $tel; - - return $variables; - } - - // Login the user - $userObject = new CommongroundUser($user['username'], $password, $person['name'], null, $user['roles'], $user['person'], null, 'user'); - - $token = new UsernamePasswordToken($userObject, null, 'main', $userObject->getRoles()); - $this->container->get('security.token_storage')->setToken($token); - $this->container->get('session')->set('_security_main', serialize($token)); - } - // Non-Exsisting user - else { - //create email - $email = []; - $email['name'] = 'Email'; - $email['email'] = $username; - //$email = $commonGroundService->createResource($email, ['component' => 'cc', 'type' => 'emails']); - - $telephone = []; - $telephone['name'] = 'Phone'; - $telephone['telephone'] = $tel; - //$telephone = $commonGroundService->createResource($telephone, ['component' => 'cc', 'type' => 'telephones']); - - //create person - $names = explode(' ', $name); - $person = []; - $person['givenName'] = $names[0]; - if ($names[0] != end($names)) { - $person['familyName'] = end($names); - } - $person['emails'] = [$email]; - if ($tel) { - $person['telephones'] = [$telephone]; - } - - $person = $commonGroundService->createResource($person, ['component' => 'cc', 'type' => 'people']); - - //create user - $application = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'applications', 'id' => $params->get('app_id')]); - $user = []; - $user['username'] = $username; - $user['password'] = $password; - $user['person'] = $person['@id']; - $user['organization'] = $application['organization']['@id']; - $user = $commonGroundService->createResource($user, ['component' => 'uc', 'type' => 'users']); - - $userObject = new CommongroundUser($user['username'], $password, $person['name'], null, $user['roles'], $user['person'], null, 'user'); - - $token = new UsernamePasswordToken($userObject, null, 'main', $userObject->getRoles()); - $this->container->get('security.token_storage')->setToken($token); - $this->container->get('session')->set('_security_main', serialize($token)); - } - - // Lets see if there if there is an active checking - $checkIns = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'checkins'], ['person' => $person['@id'], 'node' => 'nodes/'.$variables['resource']['id'], 'order[dateCreated]' => 'desc'])['hydra:member']; - - if ((count($checkIns) > 1) && $checkIns[0]['dateCheckedOut'] == null) { - $hourDiff = round((strtotime('now') - strtotime($checkIns[0]['dateCreated'])) / 3600); - // edit this number to determine how many hours before you are not seens as checked in anymore - $hoursForCheckout = 4; - if ($hourDiff < $hoursForCheckout) { - return $this->redirect($this->generateUrl('app_chin_checkout', ['code'=>$code])); - } - } - - $checkIn['node'] = 'nodes/'.$variables['resource']['id']; - $checkIn['person'] = $person['@id']; - $checkIn['provider'] = 'email'; - $checkIn['userUrl'] = $user['@id']; - - $checkIn = $commonGroundService->createResource($checkIn, ['component' => 'chin', 'type' => 'checkins']); - - return $this->redirect($this->generateUrl('app_chin_confirmation', ['id'=>$checkIn['id']])); - } - - return $variables; - } - - /** - * This function shows all available locations. - * - * @Route("/confirmation/{id}") - * @Template - */ - public function confirmationAction(Session $session, $id = null, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - // Fallback options of establishing - if (!$id) { - $id = $request->query->get('id'); - } - if (!$id) { - $id = $request->request->get('id'); - } - if (!$id) { - $this->addFlash('warning', 'No checking id supplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - - $variables['checkin'] = $commonGroundService->getResource(['component' => 'chin', 'type' => 'checkins', 'id' => $id]); - - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $variables['checkin']['node']['reference']])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$variables['checkin']['node']['reference']); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - // Lets handle a post - if ($request->isMethod('POST')) { - } - - return $variables; - } - - /** - * This function shows all available locations. - * - * @Route("/authorization/{code}") - * @Template - */ - public function authorizationAction(Session $session, $code = null, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - - $session->set('code', $code); - $variables['code'] = $code; - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - if ($request->isMethod('POST')) { - $node = $request->request->get('node'); - $name = $request->request->get('name'); - - $email = $request->request->get('email'); - $tel = $request->request->get('telephone'); - $name = explode(' ', $name); - - if (count($name) < 2) { - $firstName = $name[0]; - $additionalName = ''; - $lastName = $name[0]; - } elseif (count($name) < 3) { - $firstName = $name[0]; - $additionalName = ''; - $lastName = $name[1]; - } else { - $firstName = $name[0]; - $additionalName = $name[1]; - $lastName = $name[2]; - } - - $emailObject['email'] = $email; - $emailObject = $commonGroundService->createResource($emailObject, ['component' => 'cc', 'type' => 'emails']); - - $telObject['telephone'] = $tel; - $telObject = $commonGroundService->createResource($telObject, ['component' => 'cc', 'type' => 'telephones']); - - $person['givenName'] = $firstName; - $person['additionalName'] = $additionalName; - $person['familyName'] = $lastName; - $person['emails'][0] = $emailObject['@id']; - $person['telephones'][0] = $telObject['@id']; - $person = $commonGroundService->createResource($person, ['component' => 'cc', 'type' => 'people']); - - $application = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'applications', 'id' => $params->get('app_id')]); - $validChars = '0123456789abcdefghijklmnopqrstuvwxyz'; - $password = substr(str_shuffle(str_repeat($validChars, ceil(3 / strlen($validChars)))), 1, 8); - $user = []; - $user['username'] = $email; - $user['password'] = $password; - $user['person'] = $person['@id']; - $user['organization'] = $application['organization']['@id']; - - $user = $commonGroundService->createResource($user, ['component' => 'uc', 'type' => 'users']); - - $checkIn['node'] = $node; - $checkIn['person'] = $person['@id']; - - $checkIn = $commonGroundService->createResource($checkIn, ['component' => 'chin', 'type' => 'checkins']); - - $node = $commonGroundService->getResource($node); - - $session->set('newcheckin', true); - $session->set('person', $person); - - $test = new CommongroundUser($user['username'], $password, $person['name'], null, $user['roles'], $user['person'], null, 'user'); - - $token = new UsernamePasswordToken($test, null, 'main', $test->getRoles()); - $this->container->get('security.token_storage')->setToken($token); - $this->container->get('session')->set('_security_main', serialize($token)); - - if (isset($application['defaultConfiguration']['configuration']['userPage'])) { - return $this->redirect('/'.$application['defaultConfiguration']['configuration']['userPage']); - } else { - return $this->redirect($this->generateUrl('app_default_index')); - } - } - - $variables['code'] = $code; - } - - /** - * This function shows all available locations. - * - * @Route("/checkout/{code}") - * @Template - */ - public function checkoutAction(Session $session, $code = null, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - - $session->set('code', $code); - $variables['code'] = $code; - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables['code'] = $code; - - if ($request->isMethod('POST') && $request->get('confirmation')) { - $person = $commonGroundService->getResource($this->getUser()->getPerson()); - $checkIns = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'checkins'], ['person' => $person['@id'], 'node' => 'nodes/'.$variables['resource']['id'], 'order[dateCreated]' => 'desc'])['hydra:member']; - - $checkIn = $checkIns[0]; - $date = new \DateTime('now', new \DateTimeZone('Europe/Paris')); - $checkIn['dateCheckedOut'] = $date->format('Y-m-d H:i:s'); - $checkIn['node'] = 'nodes/'.$checkIn['node']['id']; - $commonGroundService->updateResource($checkIn); - - $variables['checkout'] = true; - } - - return $variables; - } - - /** - * @Route("/clockin/{code}") - * @Template - */ - public function clockinAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, $code = null) - { - - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - - $session->set('code', $code); - $variables['code'] = $code; - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables['code'] = $code; - - return $variables; - } - - /** - * @Route("/organization") - * @Template - */ - public function organizationAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, $code = null) - { - $variables = []; - - if ($this->getUser()) { - $variables['wrc'] = $commonGroundService->getResource($this->getUser()->getOrganization()); - - $variables['style'] = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'styles', 'id' => $variables['wrc']['style']['id']]); - $variables['favicon'] = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'images', 'id' => $variables['wrc']['style']['favicon']['id']]); - - if (isset($variables['wrc']['contact'])) { - $variables['organization'] = $commonGroundService->getResource($variables['wrc']['contact']); - } - } - - if ($request->isMethod('POST') && $request->get('social')) { - $resource = $request->request->all(); - $organization = []; - $organization['@id'] = $commonGroundService->cleanUrl(['component' => 'cc', 'type' => 'organizations', 'id' => $variables['organization']['id']]); - $organization['id'] = $variables['organization']['id']; - $organization['socials'][0]['name'] = $variables['organization']['name']; - $organization['socials'][0]['description'] = $variables['organization']['name']; - - if (isset($resource['website'])) { - $organization['socials'][0]['website'] = $resource['website']; - } - if (isset($resource['twitter'])) { - $organization['socials'][0]['twitter'] = $resource['twitter']; - } - if (isset($resource['facebook'])) { - $organization['socials'][0]['facebook'] = $resource['facebook']; - } - if (isset($resource['instagram'])) { - $organization['socials'][0]['instagram'] = $resource['instagram']; - } - if (isset($resource['linkedin'])) { - $organization['socials'][0]['linkedin'] = $resource['linkedin']; - } - - $variables['organization'] = $commonGroundService->saveResource($organization, ['component' => 'cc', 'type' => 'organizations']); - } elseif ($request->isMethod('POST') && $request->get('info')) { - $resource = $request->request->all(); - $organization = []; - $organization['@id'] = $commonGroundService->cleanUrl(['component' => 'cc', 'type' => 'organizations', 'id' => $variables['organization']['id']]); - $organization['id'] = $variables['organization']['id']; - - if (isset($resource['name'])) { - $organization['name'] = $resource['name']; - } - if (isset($resource['email'])) { - $organization['emails'][0]['email'] = $resource['email']; - } - if (isset($resource['telephone'])) { - $organization['telephones'][0]['telephone'] = $resource['telephone']; - } - if (isset($resource['street'])) { - $organization['adresses'][0]['street'] = $resource['street']; - } - if (isset($resource['houseNumber'])) { - $organization['adresses'][0]['houseNumber'] = $resource['houseNumber']; - } - if (isset($resource['houseNumberSuffix'])) { - $organization['adresses'][0]['houseNumberSuffix'] = $resource['houseNumberSuffix']; - } - if (isset($resource['postalCode'])) { - $organization['adresses'][0]['postalCode'] = $resource['postalCode']; - } - if (isset($resource['locality'])) { - $organization['adresses'][0]['locality'] = $resource['locality']; - } - - $variables['organization'] = $commonGroundService->saveResource($organization, ['component' => 'cc', 'type' => 'organizations']); - } elseif ($request->isMethod('POST') && $request->get('style')) { - $resource = $request->request->all(); - $style = $variables['style']; - $style['organizations'] = ['/organizations/'.$variables['wrc']['id']]; - $style['favicon'] = '/images/'.$variables['favicon']['id']; - - $favicon = $variables['favicon']; - $favicon['organization'] = '/organizations/'.$variables['wrc']['id']; - $favicon['style'] = '/styles/'.$variables['style']['id']; - - if (isset($_FILES['base64']) && $_FILES['base64']['error'] !== 4) { - $path = $_FILES['base64']['tmp_name']; - $type = filetype($_FILES['base64']['tmp_name']); - $data = file_get_contents($path); - $favicon['base64'] = 'data:image/'.$type.';base64,'.base64_encode($data); - $variables['favicon'] = $commonGroundService->saveResource($favicon, ['component' => 'wrc', 'type' => 'images']); - } - - $variables['style'] = $commonGroundService->saveResource($style, ['component' => 'wrc', 'type' => 'styles']); - } - - return $variables; - } - - /** - * @Route("/cancel/{code}/{reservation}") - * @Template - */ - public function cancelAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, $code = null, $reservation = null) - { - - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - - $session->set('code', $code); - $variables['code'] = $code; - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables['code'] = $code; - $variables['reservation'] = $commonGroundService->getResource(['component' => 'arc', 'type' => 'reservations', 'id' => $reservation]); - - if ($request->isMethod('POST')) { - $reservation = $commonGroundService->getResource(['component' => 'arc', 'type' => 'reservations', 'id' => $request->get('reservationId')]); - - $event = $reservation['event']; - $event['status'] = 'cancelled'; - $event['calendar'] = '/calendars/'.$event['calendar']['id']; - - $commonGroundService->updateResource($event); - $variables['cancelled'] = true; - } - - return $variables; - } - - /** - * @Route("/mailing/{code}") - * @Template - */ - public function mailingAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, $code = null, $reservation = null) - { - - // Fallback options of establishing - if (!$code) { - $code = $request->query->get('code'); - } - if (!$code) { - $code = $request->request->get('code'); - } - if (!$code) { - $code = $session->get('code'); - } - if (!$code) { - $this->addFlash('warning', 'No node reference suplied'); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables = []; - - $session->set('code', $code); - $variables['code'] = $code; - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chin', 'type' => 'nodes'], ['reference' => $code])['hydra:member']; - if (count($variables['resources']) > 0) { - $variables['resource'] = $variables['resources'][0]; - } else { - $this->addFlash('warning', 'Could not find a valid node for reference '.$code); - - return $this->redirect($this->generateUrl('app_default_index')); - } - - $variables['code'] = $code; - - if ($request->isMethod('POST')) { - $user = $commonGroundService->getResourceList(['component' => 'uc', 'type' => 'users'], ['person' => $this->getUser()->getPerson()])['hydra:member']; - $user = $user[0]; - - $person = $commonGroundService->getResource($this->getUser()->getPerson()); - $person['@id'] = $commonGroundService->cleanUrl(['component'=>'cc', 'type'=>'people', 'id'=>$person['id']]); - - $checkIn = []; - $checkIn['node'] = 'nodes/'.$variables['resource']['id']; - $checkIn['person'] = $person['@id']; - $checkIn['userUrl'] = $user['@id']; - if ($session->get('checkingProvider')) { - $checkIn['provider'] = $session->get('checkingProvider'); - } else { - $checkIn['provider'] = 'session'; - } - - $checkIn = $commonGroundService->createResource($checkIn, ['component' => 'chin', 'type' => 'checkins']); - - $variables['subscribed'] = true; - } - - return $variables; - } -} diff --git a/api/src/Controller/ChrcController.php b/api/src/Controller/ChrcController.php deleted file mode 100644 index c16e7516..00000000 --- a/api/src/Controller/ChrcController.php +++ /dev/null @@ -1,403 +0,0 @@ -getVariables(); - - // Lets provide this data to the template - $variables['query'] = $request->query->all(); -// $variables['post'] = $request->request->all(); - - // Lets find an appoptiate slug - $template = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'applications', 'id' => $params->get('app_id').'/new-pitch']); // Lets see if there is a post to procces - - if ($request->isMethod('POST')) { - $resource = $request->request->all(); - - $resource['submitter'] = $variables['user']['@id']; - $date = new DateTime('now'); - - $resource['dateSubmitted'] = date_format($date, 'Y/m/d H:iP'); - - $resource = $commonGroundService->createResource($resource, ['component' => 'chrc', 'type' => 'pitches']); - - $id = $resource['id']; - - return $this->redirectToRoute('app_tender_pitch', ['id' => $id]); - -// if (key_exists('@component', $resource)) { -// // Passing the variables to the resource -// $configuration = $commonGroundService->saveResource($resource, ['component' => $resource['@component'], 'type' => $resource['@type']]); -// } - } - - if ($template && array_key_exists('content', $template)) { - $content = $template['content']; - } - - // Create the template - if ($content) { - $template = $this->get('twig')->createTemplate($content); - $template = $template->render($variables); - } else { - $template = $this->render('404.html.twig', $variables); - - return $template; - } - - return $response = new Response( - $template, - Response::HTTP_OK, - ['content-type' => 'text/html'] - ); - } - - /** - * @Route("/pitches") - * @Template - */ - public function pitchesAction(Session $session, Request $request, ApplicationService $applicationService, CommonGroundService $commonGroundService, ParameterBagInterface $params) - { - $content = false; - $variables = $applicationService->getVariables(); - - // Lets provide this data to the template - $variables['query'] = $request->query->all(); - $variables['post'] = $request->request->all(); - - // Lets find an appoptiate slug - $template = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'applications', 'id' => $params->get('app_id').'/pitches']); // Lets see if there is a post to procces; - - // Get resources - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chrc', 'type' => 'pitches']); - - if ($request->isMethod('POST')) { - if (isset($_POST['filterPitches'])) { - $parameters = $request->request->all(); - - if (empty($parameters['name']) && empty($parameters['keywords']) && empty($parameters['dateSubmitted']) && empty($parameters['minBudget']) && empty($parameters['maxBudget'])) { - unset($parameters); - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chrc', 'type' => 'pitches']); - } else { - if (isset($parameters['dateSubmitted']) && !empty($parameters['dateSubmitted'])) { - $date = $parameters['dateSubmitted']; - - // Because you cant filter for 1 date we have to filter between 2 dates - $date1 = date('Y-m-d', strtotime($date.' - 1 day')); - $date2 = date('Y-m-d', strtotime($date.' + 1 day')); - - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chrc', 'type' => 'pitches'], ['name' => $parameters['name'], 'description' => $parameters['keywords'], 'requiredBudget[between]' => $parameters['minBudget'].'..'.$parameters['maxBudget'], 'created[strictly_after]' => $date1, 'created[strictly_before]' => $date2]); - } else { - $variables['resources'] = $commonGroundService->getResourceList(['component' => 'chrc', 'type' => 'pitches'], ['name' => $parameters['name'], 'description' => $parameters['keywords'], 'requiredBudget[between]' => $parameters['minBudget'].'..'.$parameters['maxBudget']]); - } - - unset($parameters); - } - -// return $this->redirectToRoute('app_tender_pitches'); - } - } - - if ($template && array_key_exists('content', $template)) { - $content = $template['content']; - } - - // Create the template - if ($content) { - $template = $this->get('twig')->createTemplate($content); - $template = $template->render($variables); - } else { - $template = $this->render('404.html.twig', $variables); - - return $template; - } - - return $response = new Response( - $template, - Response::HTTP_OK, - ['content-type' => 'text/html'] - ); - } - - /** - * @Route("/pitches/{id}") - * @Template - */ - public function pitchAction(Session $session, Request $request, ApplicationService $applicationService, CommonGroundService $commonGroundService, ParameterBagInterface $params, $id) - { - $content = false; - $variables = $applicationService->getVariables(); - - // Lets provide this data to the template - $variables['query'] = $request->query->all(); - $variables['post'] = $request->request->all(); - - // Lets find an appoptiate slug - if ($params->get('app_id') == 'be1fd311-525b-4408-beb1-012d27af1ff3') { //stage app - $template = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'applications', 'id' => $params->get('app_id').'/solution']); - } else { - $template = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'applications', 'id' => $params->get('app_id').'/pitch']); - } - - // Get resource - $variables['resource'] = $commonGroundService->getResource(['component' => 'chrc', 'type' => 'pitches', 'id' => $id]); - - if ($request->isMethod('POST')) { - - // Make a review/comment - if (isset($_POST['add_comment'])) { - $resource['author'] = $variables['user']['@id']; - $resource['resource'] = $variables['resource']['@id']; - $resource['review'] = $request->request->get('review'); - $resource['organization'] = $commonGroundService->cleanUrl(['component'=>'wrc', 'type'=>'organizations', 'id'=>'4d1eded3-fbdf-438f-9536-8747dd8ab591']); - - $resource = $commonGroundService->createResource($resource, ['component' => 'rc', 'type' => 'reviews']); - } else { - $resource = $request->request->all(); - - if (array_key_exists('@component', $resource)) { - // Passing the variables to the resource - $configuration = $commonGroundService->saveResource($resource, ['component' => $resource['@component'], 'type' => $resource['@type']]); - } - } - - if (isset($_POST['like'])) { - - // Check if author already liked this resource - $likeOfAuthor = $commonGroundService->getResource(['component'=>'rc', 'type'=>'likes'], ['author'=>$variables['user']['@id']])['hydra:member']; - - if (isset($likeOfAuthor) && !empty($likeOfAuthor)) { - foreach ($likeOfAuthor as $like) { - $like = $commonGroundService->deleteResource($like, 'https://rc.dev.zuid-drecht.nl/likes/'.$like['id']); - } - } else { - $resource['author'] = $variables['user']['@id']; - $resource['resource'] = $variables['resource']['@id']; - $resource['organization'] = $commonGroundService->cleanUrl(['component' => 'wrc', 'type' => 'organizations', 'id' => '4d1eded3-fbdf-438f-9536-8747dd8ab591']); - - $resource = $commonGroundService->createResource($resource, ['component' => 'rc', 'type' => 'likes']); - } - } - - return $this->redirect($this->generateUrl('app_tender_pitch', ['id' => $id])); - } - - // Get all reviews/comments of this resource - $variables['comments'] = $commonGroundService->getResourceList(['component' => 'rc', 'type' => 'reviews'], ['resource' => $variables['resource']['@id']]); - $variables['likes'] = $commonGroundService->getResourceList(['component' => 'rc', 'type' => 'likes'], ['resource' => $variables['resource']['@id']])['hydra:member']; - - if ($template && array_key_exists('content', $template)) { - $content = $template['content']; - } - - // Create the template - if ($content) { - $template = $this->get('twig')->createTemplate($content); - $template = $template->render($variables); - } else { - $template = $this->render('404.html.twig', $variables); - - return $template; - } - - return $response = new Response( - $template, - Response::HTTP_OK, - ['content-type' => 'text/html'] - ); - } - - /** - * @Route("/challenges") - * @Template - */ - public function challengesAction(Session $session, Request $request, ApplicationService $applicationService, CommonGroundService $commonGroundService, ParameterBagInterface $params) - { - $content = false; - $variables = $applicationService->getVariables(); - - // Lets provide this data to the template - $variables['query'] = $request->query->all(); - $variables['post'] = $request->request->all(); - - // Get resource - $variables['resources'] = $commonGroundService->getResource(['component' => 'chrc', 'type' => 'tenders'], $variables['query'])['hydra:member']; - - return $variables; - } - - /** - * @Route("/challenges/{id}") - * @Template - */ - public function challengeAction(Session $session, Request $request, ApplicationService $applicationService, CommonGroundService $commonGroundService, ParameterBagInterface $params, $id) - { -// $content = false; - $variables = []; - - // Lets provide this data to the template - $variables['id'] = $id; - $variables['query'] = $request->query->all(); - $variables['post'] = $request->request->all(); - - // Get resource - $variables['tender'] = $commonGroundService->getResource(['component' => 'chrc', 'type' => 'tenders', 'id' => $id], $variables['query']); - - return $variables; - } - - /** - * @Route("/proposals/{id}") - * @Template - */ - public function proposalAction(Session $session, Request $request, ApplicationService $applicationService, CommonGroundService $commonGroundService, ParameterBagInterface $params, $id) - { - $content = false; - $variables = []; - - // Lets provide this data to the template - $variables['query'] = $request->query->all(); - $variables['post'] = $request->request->all(); - - // Lets find an appoptiate slug - $variables['resource'] = $commonGroundService->getResource(['component' => 'chrc', 'type' => 'proposals', 'id' => $id]); - - // Lets see if there is a post to procces - /* - if ($request->isMethod('POST')) { - $resource = $request->request->all(); - if (array_key_exists('@component', $resource)) { - // Passing the variables to the resource - $configuration = $commonGroundService->saveResource($resource, ['component' => $resource['@component'], 'type' => $resource['@type']]); - } - } - */ - - return $variables; - } - - /** - * @Route("/deals/{id}") - * @Template - */ - public function dealAction(Session $session, Request $request, ApplicationService $applicationService, CommonGroundService $commonGroundService, ParameterBagInterface $params, $id) - { - $content = false; - $variables = $applicationService->getVariables(); - - // Lets provide this data to the template - $variables['query'] = $request->query->all(); - $variables['post'] = $request->request->all(); - - // Lets find an appoptiate slug - $template = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'applications', 'id' => $params->get('app_id').'/deal']); - $variables['resource'] = $commonGroundService->getResource(['component' => 'chrc', 'type' => 'deals', 'id' => $id]); - - if ($template && array_key_exists('content', $template)) { - $content = $template['content']; - } - - // Lets see if there is a post to procces - if ($request->isMethod('POST')) { - $resource = $request->request->all(); - if (array_key_exists('@component', $resource)) { - // Passing the variables to the resource - $configuration = $commonGroundService->saveResource($resource, ['component' => $resource['@component'], 'type' => $resource['@type']]); - } - } - - // Create the template - if ($content) { - $template = $this->get('twig')->createTemplate($content); - $template = $template->render($variables); - } else { - $template = $this->render('404.html.twig', $variables); - - return $template; - } - - return $response = new Response( - $template, - Response::HTTP_OK, - ['content-type' => 'text/html'] - ); - } - - /** - * @Route("/questions/{id}") - * @Template - */ - public function questionAction(Session $session, Request $request, ApplicationService $applicationService, CommonGroundService $commonGroundService, ParameterBagInterface $params, $id) - { - $content = false; - $variables = $applicationService->getVariables(); - - // Lets provide this data to the template - $variables['query'] = $request->query->all(); - $variables['post'] = $request->request->all(); - - // Lets find an appoptiate slug - $template = $commonGroundService->getResource(['component' => 'wrc', 'type' => 'applications', 'id' => $params->get('app_id').'/question']); - $variables['resource'] = $commonGroundService->getResource(['component' => 'chrc', 'type' => 'questions', 'id' => $id]); - - if ($template && array_key_exists('content', $template)) { - $content = $template['content']; - } - - // Lets see if there is a post to procces - if ($request->isMethod('POST')) { - $resource = $request->request->all(); - if (array_key_exists('@component', $resource)) { - // Passing the variables to the resource - $configuration = $commonGroundService->saveResource($resource, ['component' => $resource['@component'], 'type' => $resource['@type']]); - } - } - - // Create the template - if ($content) { - $template = $this->get('twig')->createTemplate($content); - $template = $template->render($variables); - } else { - $template = $this->render('404.html.twig', $variables); - - return $template; - } - - return $response = new Response( - $template, - Response::HTTP_OK, - ['content-type' => 'text/html'] - ); - } -} diff --git a/api/src/Controller/CmcController.php b/api/src/Controller/CmcController.php deleted file mode 100644 index 9d581c36..00000000 --- a/api/src/Controller/CmcController.php +++ /dev/null @@ -1,137 +0,0 @@ -getResourceList(['component' => 'cmc', 'type' => 'contact_moments'], ['receiver' => $this->getUser()->getPerson()])['hydra:member']; - $variables['send'] = $commonGroundService->getResourceList(['component' => 'cmc', 'type' => 'contact_moments'], ['sender' => $this->getUser()->getPerson()])['hydra:member']; - $variables['resources'] = array_merge($variables['reciever'], $variables['send']); - - return $variables; - } - - /** - * @Route("/organisation") - * @Security("is_granted('ROLE_group.admin')") - * @Template - */ - public function organisationAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') - { - $variables = []; - $variables['resources'] = $commonGroundService->getResourceList(['component'=>'brc', 'type'=>'invoices'], ['submitters.brp'=>$variables['user']['@id']])['hydra:member']; - - return $variables; - } - - /** - * This function shows all available processes. - * - * @Route("/") - * @Template - */ - public function indexAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - $variables = $applicationService->getVariables(); - $variables['reciever'] = $commonGroundService->getResourceList(['component' => 'cmc', 'type' => 'contact_moments'], ['receiver' => $this->getUser()->getPerson()])['hydra:member']; - $variables['send'] = $commonGroundService->getResourceList(['component' => 'cmc', 'type' => 'contact_moments'], ['sender' => $this->getUser()->getPerson()])['hydra:member']; - - $variables['resources'] = array_merge($variables['reciever'], $variables['send']); - - return $variables; - } - - /** - * This function will kick of the suplied proces with given values. - * - * @Route("/send") - * @Template - */ - public function sendAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - $variables = $applicationService->getVariables(); - - // We accept any and all ways of pre-filling the form - $variables['resource'] = array_merge($request->query->all(), $request->request->all()); - - // We need to fall back on resources - if (!array_key_exists('resources', $variables['resource'])) { - $variables['resource']['resources'] = []; - } - - // Is a single resource has been passed we need to supply it to the resources array - if (array_key_exists('resource', $variables['resource'])) { - $variables['resource']['resources'][] = $variables['resource']['resource']; - unset($variables['resource']['resource']); - } - - // We need an sender on messages - if (!array_key_exists('sender', $variables['resource']) && $user = $this->getUser()) { - $variables['resource']['sender'] = $user->getPerson(); - } - - // Lets handle a post - if ($request->isMethod('POST')) { - $resource = $request->request->all(); - - if (isset($resource['sender_uri']) && !empty($resource['sender_uri'])) { - $resource['sender'] = $resource['sender_uri']; - } - - if (isset($resource['receiver_uri']) && !empty($resource['receiver_uri'])) { - $resource['receiver'] = $resource['receiver_uri']; - } - - $resource = $commonGroundService->saveResource($resource, ['component' => 'cmc', 'type' => 'contact_moments']); - - // If the contact moment was succesfully created we forward the user - if (array_key_exists('@id', $resource)) { - return $this->redirect($this->generateUrl('app_cmc_index')); - } - } - - return $variables; - } - - /** - * This function will kick of the suplied proces with given values. - * - * @Route("/{id}") - * @Template - */ - public function viewAction(Session $session, $id, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params) - { - $variables = $applicationService->getVariables(); - $variables['resource'] = $commonGroundService->getResourceList(['component' => 'cmc', 'type' => 'contact_moments', 'id' => $id]); - - return $variables; - } -} diff --git a/api/src/Controller/DashboardController.php b/api/src/Controller/DashboardController.php index ab6610f2..40c97020 100644 --- a/api/src/Controller/DashboardController.php +++ b/api/src/Controller/DashboardController.php @@ -40,17 +40,18 @@ public function generalAction(Session $session, Request $request, CommonGroundSe if (count($users) > 0) { $user = $users[0]; + $userGroups = []; foreach ($user['userGroups'] as $userGroup) { if ($userGroup['id'] != 'c3c463b9-8d39-4cc0-b62c-826d8f5b7d8c') { array_push($userGroups, '/groups/'.$userGroup['id']); } } - array_push($userGroups, '/groups/c3c463b9-8d39-4cc0-b62c-826d8f5b7d8c'); $user['userGroups'] = $userGroups; + $user['userGroups'][] = '/groups/c3c463b9-8d39-4cc0-b62c-826d8f5b7d8c'; - $commonGroundService->saveResource($user, ['component' => 'uc', 'type' => 'users']); + $commonGroundService->updateResource($user); } } @@ -132,6 +133,71 @@ public function organizationsAction(Session $session, Request $request, CommonGr { $variables = []; + if ($request->isMethod('POST')) { + + $name = $request->get('name'); + $email = $request->get('email'); + $description = $request->get('description'); + + $cc = []; + $cc['name'] = $name; + $cc['description'] = $description; + $cc['emails'][0]['email'] = $email; + + $cc = $commonGroundService->createResource($cc, ['component' => 'cc', 'type' => 'organizations']); + + $wrc = []; + $wrc['rsin'] = ' '; + $wrc['chamberOfComerce'] = ' '; + $wrc['name'] = $name; + $wrc['description'] = $description; + $wrc['contact'] = $commonGroundService->cleanUrl(['component' => 'cc', 'type' => 'organizations', 'id' => $cc['id']]); + if (isset($_FILES['logo']) && $_FILES['logo']['error'] !== 4) { + $path = $_FILES['logo']['tmp_name']; + $type = filetype($_FILES['logo']['tmp_name']); + $data = file_get_contents($path); + $wrc['style']['name'] = 'style for '.$name; + $wrc['style']['description'] = 'style for '.$name; + $wrc['style']['css'] = ' '; + $wrc['style']['favicon']['name'] = 'logo for '.$name; + $wrc['style']['favicon']['description'] = 'logo for '.$name; + $wrc['style']['favicon']['base64'] = 'data:image/'.$type.';base64,'.base64_encode($data); + } + + $wrc = $commonGroundService->createResource($wrc, ['component' => 'wrc', 'type' => 'organizations']); + + } + + if ($this->getUser()){ + $users = $commonGroundService->getResourceList(['component' => 'uc', 'type' => 'users'],['username' => $this->getUser()->getUsername()])['hydra:member']; + if (count($users) > 0 ) { + $organizations = []; + $user = $users[0]; + foreach ($user['userGroups'] as $group){ + $organization =$commonGroundService->getResource($group['organization']); + if (!in_array($organization, $organizations)){ + $organizations[] = $organization; + } + } + $variables['resources'] = $organizations; + } + } + + return $variables; + } + + /** + * @Route("/organizations/{id}") + * @Template + */ + public function organizationAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') + { + $variables = []; + + if ($request->isMethod('POST')) { + + } + return $variables; } diff --git a/api/src/Controller/DefaultController.php b/api/src/Controller/DefaultController.php index df2c4922..703f7adb 100644 --- a/api/src/Controller/DefaultController.php +++ b/api/src/Controller/DefaultController.php @@ -69,5 +69,59 @@ public function errorAction(Session $session, Request $request, CommonGroundServ return $variables; } + /** + * @Route("/users") + * @Template + */ + public function usersAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') + { + $variables = []; + + return $variables; + } + + /** + * @Route("/developers") + * @Template + */ + public function developersAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') + { + $variables = []; + + return $variables; + } + + /** + * @Route("/terms") + * @Template + */ + public function termsAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') + { + $variables = []; + + return $variables; + } + + /** + * @Route("/privacy") + * @Template + */ + public function privacyAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') + { + $variables = []; + + return $variables; + } + + /** + * @Route("/pricing") + * @Template + */ + public function pricingAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') + { + $variables = []; + + return $variables; + } } diff --git a/api/src/Controller/DocumentationController.php b/api/src/Controller/DocumentationController.php index acfdeed7..fbcd8535 100644 --- a/api/src/Controller/DocumentationController.php +++ b/api/src/Controller/DocumentationController.php @@ -36,6 +36,17 @@ public function indexAction(Session $session, Request $request, CommonGroundServ return $variables; } + /** + * @Route("/glossary") + * @Template + */ + public function glossaryAction(Session $session, Request $request, CommonGroundService $commonGroundService, ApplicationService $applicationService, ParameterBagInterface $params, string $slug = 'home') + { + $variables = []; + + return $variables; + } + /** * @Route("/example") * @Template diff --git a/api/templates/base.html.twig b/api/templates/base.html.twig index 62e645a8..cb1bc2d9 100644 --- a/api/templates/base.html.twig +++ b/api/templates/base.html.twig @@ -47,7 +47,7 @@ {% for message in messages %} {% if message not in flashes %} {% set flashes = flashes|merge([message]) %} -
    +
    diff --git a/api/templates/dashboard/modals/add-organization-modal.html.twig b/api/templates/dashboard/modals/add-organization-modal.html.twig new file mode 100644 index 00000000..6739e642 --- /dev/null +++ b/api/templates/dashboard/modals/add-organization-modal.html.twig @@ -0,0 +1,83 @@ + + + diff --git a/api/templates/dashboard/organizations.html.twig b/api/templates/dashboard/organizations.html.twig index b579e696..c48345a7 100644 --- a/api/templates/dashboard/organizations.html.twig +++ b/api/templates/dashboard/organizations.html.twig @@ -16,15 +16,29 @@
    - -

    - {{ 'organizations'|trans|capitalize }} -

    +
    +
    + + +

    + {{ 'organizations'|trans|capitalize }} +

    + +
    +
    + + + + +
    +
    - {% if groups is defined and groups is not empty %} + {% if resources is defined and resources is not empty %} @@ -32,15 +46,14 @@ - {% for group in groups %} + {% for resource in resources %} - + {% endfor %}
    {{ group.name }}{{ resource.name }}
    {% else %} -

    {{ 'no organizations available'|trans|capitalize }}

    {% endif %} @@ -50,4 +63,8 @@
    + + + {% include '/dashboard/modals/add-organization-modal.html.twig' %} + {% endblock %} diff --git a/api/templates/default/developers.html.twig b/api/templates/default/developers.html.twig new file mode 100644 index 00000000..d04e51a1 --- /dev/null +++ b/api/templates/default/developers.html.twig @@ -0,0 +1,680 @@ +{% extends 'base.html.twig' %} + +{% block content %} +
    + +
    +
    +
    +
    + + +
    + The ID-Vault Online Self Sovereign Identity Wallet +
    + + +

    + Identity Solution for Developers. +

    + + +

    + We created a simple, safe, and easy-to-use platform for managing the complexity of self sovereign identity. +

    + + +

    + + Create an account + +

    + +
    +
    +
    +
    + + +
    + +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + + ... + +
    +
    + + +

    + We start with your needs and deliver a full banking solution. +

    + + +
    + Once you provide us with your companyā€™s basic information, we handle the remainder of the process without questions. +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    + + + + 1 + + +
    +
    + + +
    + +
    +
    + +
    +
    + + +

    + Fill out your intro survey +

    + + +

    + We start with a short 3-step online survey to help us determine the best banking solution for your specific startup. +

    + +
    +
    +
    +
    +
    +
    + + +
    +
    + + + + 2 + + +
    +
    + + +
    + +
    +
    + +
    +
    + + +

    + We build a banking stack. +

    + + +

    + From your information, we generate a banking stack well suited to your companyā€™s personalized needs. +

    + +
    +
    +
    +
    +
    +
    + + +
    +
    + + + + 3 + + +
    +
    + +
    +
    + + +

    + Registration and filings +

    + + +

    + We handle the creation of your actual account including registering with the financial and government agencies. +

    + +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    + + + ... + + + ... + + + ... + +
    + +
    +
    + + +

    + Powerful metrics to better understand your business. +

    + + +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula auctor ornare. Nulla non ullamcorper tellus. Vestibulum pulvinar eros nec tortor maximus, iaculis rutrum nibh mollis. +

    + + +
    +
    + + +
    + + +
    + +
    + + +

    + Real-time data +

    + +
    + + +
    + + +
    + +
    + +

    + FDIC Insured +

    + +
    + +
    +
    + + +
    + + + + + + + +

    + End-to-end encyption +

    + +
    + + +
    + + +
    + +
    + + +

    + REST API enabled +

    + +
    + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    + + + +
    + +
    +
    + + + +
    +
    + +
    +
    + + +

    + Controlled access to data is one of our core values. +

    + + +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula auctor ornare. Nulla non ullamcorper tellus. +

    + + + + View our API + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +

    + Corporate cards available on iOS and Android. +

    + + +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula auctor ornare. Nulla non ullamcorper tellus. Vestibulum pulvinar eros nec tortor maximus, iaculis rutrum nibh mollis. +

    + + + + ... + + + + + ... + + +
    +
    + + +
    + + +
    + +
    + +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    Integrations
    + + +

    + Sync your banking data anywhere. +

    + + +

    + Compliance, financial reviews, tax auditing, and any financial task has never been easier. +

    + +
    +
    +
    +
    + + +
    + +
    + + +

    + Slack +

    + + +

    + Sync your team's work and activity to share automatically in a channel with a simple plugin. +

    + +
    +
    + + +
    + +
    + + +

    + Mailchimp +

    + + +

    + Communicate important messages to your users through Landkit using Mailchimp as the delivery service. +

    + +
    +
    + + +
    + +
    + + +

    + Dropbox +

    + + +

    + Sync any file store to Dropbox for automated sharing with people outside the company. +

    + +
    +
    + + +
    + +
    + + +

    + Google Drive +

    + + +

    + Sync any file store to Google Drive for automated sharing with people outside the company. +

    + +
    +
    + + +
    + +
    + + +

    + Google Ad Manager +

    + + +

    + Easily manage and edit any Adwords campaign inline to improve ROI with constant review. +

    + +
    +
    + + +
    + +
    + + +

    + Atlassian +

    + + +

    + Keep your entire team in sync with development and easily manage tasks, goals, and deadlines. +

    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +

    + Register today. For the identity managment of tommorow. +

    + + +

    + Avoid the nightmare of managing GDPR and a ton of login solutions, use our platform. +

    + +
    + +
    +
    +
    +
    +{% endblock %} diff --git a/api/templates/default/pricing.html.twig b/api/templates/default/pricing.html.twig new file mode 100644 index 00000000..21356f18 --- /dev/null +++ b/api/templates/default/pricing.html.twig @@ -0,0 +1,243 @@ +{% extends 'base.html.twig' %} + +{% block content %} + +
    + + +
    + +
    + + +
    +
    +
    + + +

    + Simple, fair pricing. +

    + + +

    + {{ 'needs text'|capitalize }} +

    + +
    +
    +
    + +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    + + {{ 'free'|trans|capitalize }} + +
    + + +
    + + +
    + +
    + + +

    + OAuth
    + {{ 'authenticate users via oauth'|trans|capitalize }} +

    +
    +
    + + +
    + +
    + + +

    + {{ 'basic data'|trans|capitalize }}
    + {{ 'access to the basic user data'|trans|capitalize }} +

    +
    +
    +
    + +
    +
    + + +
    +
    + + +
    + + {{ 'paid'|trans|capitalize }} + +
    + + +
    + + +
    + +
    + + +

    + {{ 'SAML / Active Directory'|trans }}
    + {{ 'short text'|trans|capitalize }} +

    +
    +
    + + +
    + +
    + + +

    + {{ 'certain claims for data'|trans|capitalize }}
    + {{ 'for example: IDIN, IDeal or phone number'|trans|capitalize }} +

    +
    +
    +
    + +
    + +
    +
    +
    + + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + + + FAQ + + + +

    + Frequently asked questions. +

    + + +

    + Let us help answer the most common questions you might have. +

    + +
    +
    +
    +
    + + +

    + Can I use Landkit for my clients? +

    + + +

    + Absolutely. The Bootstrap Themes license allows you to build a websites for personal use or for a client. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper quam ullamcorper cursus eu in dui. Aliquam cursus accumsan laoreet. +

    + + +

    + Is there a money back guarantee? +

    + + +

    + Yup! Bootstrap Themes come with a satisfaction guarantee. Submit a return and get your money back. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper quam ullamcorper cursus eu in dui. Aliquam cursus accumsan laoreet. +

    + + +

    + Do I get free updates? +

    + + +

    + Yes. We update all of our themes with each Bootstrap update, plus are constantly adding new components, pages, and features to our themes. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper. +

    + +
    +
    + + +

    + Does it work with Rails? React? Laravel? +

    + + +

    + Yes. Landkit has basic CSS/JS files you can include. If you want to enable deeper customization, you can integrate it into your assets pipeline or build processes. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper. +

    + + +

    + Can I use Landkit for my clients? +

    + + +

    + Absolutely. The Bootstrap Themes license allows you to build a websites for personal use or for a client. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper quam ullamcorper cursus eu in dui. Aliquam cursus accumsan laoreet. +

    + + +

    + Is there a money back guarantee? +

    + + +

    + Yup! Bootstrap Themes come with a satisfaction guarantee. Submit a return and get your money back. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in nibh nec erat tincidunt porta. Donec ac mauris ullamcorper quam ullamcorper cursus eu in dui. Aliquam cursus accumsan laoreet. +

    + +
    +
    +
    +
    +{% endblock %} diff --git a/api/templates/default/privacy.html.twig b/api/templates/default/privacy.html.twig new file mode 100644 index 00000000..f2d1e917 --- /dev/null +++ b/api/templates/default/privacy.html.twig @@ -0,0 +1,249 @@ +{% extends 'base.html.twig' %} + +{% block content %} +
    +
    +
    +
    + + +

    + Terms of Service +

    + + +

    + Updated 3/15/2019 +

    + +
    +
    + + + + Print + + +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + +

    + Below are our Terms of Service, which outline a lot of legal goodies, but the bottom line is itā€™s our aim to always take care of both you, as a customer, or as a seller on our platform. +

    + + +

    + Licensing Terms +

    + + +

    + By visiting and/or taking any action on Bootstrap Themes, you confirm that you are in agreement with and bound by the terms outlined below. These terms apply to the website, emails, or any other communication. +

    + + +

    + Here are terms of our Standard License: +

    + + +
    + + + + + + + +

    + The Standard License grants you a non-exclusive right to make use of Theme you have purchased. +

    + +
    +
    + + + + + + + +

    + You are licensed to use the Item to create one End Product for yourself or for one client (a ā€œsingle applicationā€), and the End Product can be distributed for Free. +

    + +
    +
    + + + + + + + +

    + If a Theme contains code, images, or content sourced from elsewhere under a different license, that item retains its original license. The license for the code, images, or content will be noted by the Theme author. You are responsible for adhering to the original license or clearing it with the author of the code, image, or content. +

    + +
    +
    + + + + + + + +

    + This license can be terminated if you breach it and you lose the right to distribute the End Product until the Theme has been fully removed from the End Product. +

    + +
    +
    + + + + + + + +

    + The author of the Theme retains ownership of the Theme, but grants you the license on these terms. This license is between the author of the Theme and you. Be Colossal LLC (Bootstrap Themes) are not a party to this license or the one granting you the license. +

    + +
    + + +

    + If you opt for an Extended License: +

    + + +
    + + + + + + + +

    + You are licensed to use the Item to create one End Product for yourself or for one client (a ā€œsingle applicationā€), and the End Product maybe sold or distributed for free. +

    + +
    + + +

    + Additional Terms +

    + + +

    + By visiting and/or taking any action on Bootstrap Themes, you confirm that you are in agreement with and bound by the terms outlined below. These terms apply to the website, emails, or any other communication. +

    + + +
    + + + + + + + +

    + All payments are processed securely through PayPal or Stripe. Bootstrap Themes does not directly process payments through the website. +

    + +
    +
    + + + + + + + +

    + You have 14 days to evaluate your purchase. If your purchase fails to meet expectations set by the seller, or is critically flawed in some way, contact Bootstrap Themes and we will issue a full refund pending a review. +

    + +
    +
    + + + + + + + +

    + Membership is a benefit for those who follow our terms and policies. We may at any time suspend or terminate your account. +

    + +
    + +
    +
    + + +
    +
    + + +

    + Have a question? +

    + + +

    + Not sure exactly what weā€™re looking for or just want clarification? Weā€™d be happy to chat with you and clear things up for you. Anytime! +

    + + +
    + Call anytime +
    + + +

    + (555) 123-4567 +

    + + +
    + {{ 'email us'|trans|capitalize }} +
    + + +

    + info@conduction.nl +

    + +
    +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    +{% endblock %} diff --git a/api/templates/default/terms.html.twig b/api/templates/default/terms.html.twig new file mode 100644 index 00000000..f2d1e917 --- /dev/null +++ b/api/templates/default/terms.html.twig @@ -0,0 +1,249 @@ +{% extends 'base.html.twig' %} + +{% block content %} +
    +
    +
    +
    + + +

    + Terms of Service +

    + + +

    + Updated 3/15/2019 +

    + +
    +
    + + + + Print + + +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + +

    + Below are our Terms of Service, which outline a lot of legal goodies, but the bottom line is itā€™s our aim to always take care of both you, as a customer, or as a seller on our platform. +

    + + +

    + Licensing Terms +

    + + +

    + By visiting and/or taking any action on Bootstrap Themes, you confirm that you are in agreement with and bound by the terms outlined below. These terms apply to the website, emails, or any other communication. +

    + + +

    + Here are terms of our Standard License: +

    + + +
    + + + + + + + +

    + The Standard License grants you a non-exclusive right to make use of Theme you have purchased. +

    + +
    +
    + + + + + + + +

    + You are licensed to use the Item to create one End Product for yourself or for one client (a ā€œsingle applicationā€), and the End Product can be distributed for Free. +

    + +
    +
    + + + + + + + +

    + If a Theme contains code, images, or content sourced from elsewhere under a different license, that item retains its original license. The license for the code, images, or content will be noted by the Theme author. You are responsible for adhering to the original license or clearing it with the author of the code, image, or content. +

    + +
    +
    + + + + + + + +

    + This license can be terminated if you breach it and you lose the right to distribute the End Product until the Theme has been fully removed from the End Product. +

    + +
    +
    + + + + + + + +

    + The author of the Theme retains ownership of the Theme, but grants you the license on these terms. This license is between the author of the Theme and you. Be Colossal LLC (Bootstrap Themes) are not a party to this license or the one granting you the license. +

    + +
    + + +

    + If you opt for an Extended License: +

    + + +
    + + + + + + + +

    + You are licensed to use the Item to create one End Product for yourself or for one client (a ā€œsingle applicationā€), and the End Product maybe sold or distributed for free. +

    + +
    + + +

    + Additional Terms +

    + + +

    + By visiting and/or taking any action on Bootstrap Themes, you confirm that you are in agreement with and bound by the terms outlined below. These terms apply to the website, emails, or any other communication. +

    + + +
    + + + + + + + +

    + All payments are processed securely through PayPal or Stripe. Bootstrap Themes does not directly process payments through the website. +

    + +
    +
    + + + + + + + +

    + You have 14 days to evaluate your purchase. If your purchase fails to meet expectations set by the seller, or is critically flawed in some way, contact Bootstrap Themes and we will issue a full refund pending a review. +

    + +
    +
    + + + + + + + +

    + Membership is a benefit for those who follow our terms and policies. We may at any time suspend or terminate your account. +

    + +
    + +
    +
    + + +
    +
    + + +

    + Have a question? +

    + + +

    + Not sure exactly what weā€™re looking for or just want clarification? Weā€™d be happy to chat with you and clear things up for you. Anytime! +

    + + +
    + Call anytime +
    + + +

    + (555) 123-4567 +

    + + +
    + {{ 'email us'|trans|capitalize }} +
    + + +

    + info@conduction.nl +

    + +
    +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    +{% endblock %} diff --git a/api/templates/default/users.html.twig b/api/templates/default/users.html.twig new file mode 100644 index 00000000..e390dcdc --- /dev/null +++ b/api/templates/default/users.html.twig @@ -0,0 +1,796 @@ +{% extends 'base.html.twig' %} + +{% block content %} +
    + +
    + + +
    + +
    + + +
    +
    +
    + + +

    + +

    + + +

    + Your data belongs to you, lets take it back. +

    + + + + Create your acount + + +
    +
    +
    + +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + + + + + +
    +
    +
    +
    + + +

    + The hub for your online identity. +

    + + +

    + Landkit is where your team can come together to get stuff done. Chat, files, wikis, documentation, and more. +

    + +
    +
    +
    +
    + + +
    +
    + + + ... + +
    +
    + + +

    + Conversations +

    + + +

    + Communicate with your team in public or private chats with individuals or groups. +

    + +
    +
    + + +
    +
    + + + ... + +
    +
    + + +

    + Unified +

    + + +

    + Keep everything in one place and feel at peace and organized rather than scattered. +

    + +
    +
    + + +
    +
    + +
    +
    + + + ... + +
    +
    + + +

    + Analytics +

    + + +

    + Keep track of what's happening in your company from a centralized dashboard. +

    + +
    +
    + + +
    +
    + + + ... + +
    +
    + + +

    + Permissions +

    + + +

    + Control who has access to which projects and data through our control panel. +

    + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + Unified + + + +

    + Replace your microservices
    + with one simple app. +

    + + +

    + Using our single innovative platform you can remove all your communication dependencies and the messy rat's nest of email, calls, texts, wikis, and apps you currently have. +

    + + +
    +
    +
    + + +
    + +
    + +
    +
    + + + + +
    +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +

    + Unlimited users. One price. +

    + + +

    + We don't charge per seat, just per service. +

    + +
    + + +
    + +
    + +
    +
    + + +
    + + +

    + Guaranteed 100% uptime +

    + + +

    + Our server network never goes down. +

    + +
    + + +
    + +
    + +
    +
    + + +
    + + +

    + Lifetime storage * +

    + + +

    + We store all your data forever. No extra charge. +

    + +
    + + +
    + +
    + +
    +
    + + +
    + + +

    + 256-bit encryption +

    + + +

    + Keep your communication and data safe. +

    + +
    + + +
    + +
    + +
    +
    + +
    +
    + + +

    + * Limited to the life of the company +

    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    + + +

    + "Our team turned to Landkit to solve our communication issues and it has been such a pleasure. Now that we're all on it we can never look back." +

    + + +
    + Casey Fyfe of Airbnb +
    + +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + + + Case Studies + + + +

    + Used by your favorite companies +

    + + +

    + Many of the greatest startups in the world are already using Landkit to help them get work done and solve their communication needs. +

    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    + + +

    + Uses Landkit to keep their remote teams from around the world in sync. +

    + + + Read more + +
    +
    + +
    +
    + + +
    +
    + + +
    + +
    + + +

    + Uses Landkit to document their processes for acquiring shows. +

    + + + Read more + +
    +
    + +
    +
    + + +
    +
    + + +
    + +
    + + + +

    + Uses Landkit to share their brand assets across their teams. +

    + + + Read more + +
    +
    + +
    +
    + + +
    +
    + + +
    + +
    + + + +

    + Uses Landkit to plan their product development with engineering. +

    + + + Read more + +
    +
    + +
    +
    + + +
    +
    + + +
    + +
    + + + +

    + Uses Landkit to share financial projections with their investors. +

    + + + Read more + +
    +
    + +
    +
    + + +
    +
    + + +
    + +
    + + +

    + Uses Landkit to plan their priorities for the company quarterly and annually. +

    + + + Read more + +
    +
    + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + Integrations + + + +

    + Integrated with your favorite platforms +

    + + +

    + Your data should be connected and portable. Landkit connects with other sources to help you get more done. +

    + +
    +
    +
    +
    + + +
    + +
    + + +

    + Slack +

    + + +

    + Sync your team's work and activity to share automatically in a channel with a simple plugin. +

    + +
    +
    + + +
    + +
    + + +

    + Mailchimp +

    + + +

    + Communicate important messages to your users through Landkit using Mailchimp as the delivery service. +

    + +
    +
    + + +
    + +
    + + +

    + Dropbox +

    + + +

    + Sync any file store to Dropbox for automated sharing with people outside the company. +

    + +
    +
    + + +
    + +
    + + +

    + Google Drive +

    + + +

    + Sync any file store to Google Drive for automated sharing with people outside the company. +

    + +
    +
    + + +
    + +
    + + +

    + Google Ad Manager +

    + + +

    + Easily manage and edit any Adwords campaign inline to improve ROI with constant review. +

    + +
    +
    + + +
    + +
    + + +

    + Atlassian +

    + + +

    + Keep your entire team in sync with development and easily manage tasks, goals, and deadlines. +

    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    + ... +
    + + +

    + Schedule a demo with us +

    + + +

    + We can help you solve company communication. +

    + + +
    +
    +
    + + +
    + + +
    + +
    +
    + + +
    + + +
    + +
    +
    +
    +
    + + +
    + + +
    + +
    +
    + + +
    + + +
    + +
    +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +{% endblock %} diff --git a/api/templates/documentation/glossary.html.twig b/api/templates/documentation/glossary.html.twig new file mode 100644 index 00000000..6cdcb673 --- /dev/null +++ b/api/templates/documentation/glossary.html.twig @@ -0,0 +1,103 @@ +{% extends '/documentation/main.html.twig'%} + +{% set currentPage = 'introduction' %} + +{% block documentation %} + + + +

    Glossary

    + + +

    + Feeling a bit lost in all of the technical terms of an online SSI Wallet (or thinking a what?), don't worry we understand that it can al be a bit overwelming. So we set up this glossery to help you allong. +

    + + +

    + Still cant find out what the h*ll where are talking about? Or completly lost in the jungle of technical terms? Don't hesitate to send us a message! +

    + + +
    + + +

    Uitspraken (claim)

    + + +

    Binnen id-vault worden jouw gegevens opgeslagen als claims, een claim is een uitspraak die jij doet. Bijvoorbeeld mijn e-mailadres is john@do.com, deze kunnen claims worden onderschreven door derden. Z’n onderschrijving noemen we een Attest en vormt eigenlijk het bewijs dat jouw uitspraak waar is. In het geval van je e-mailadres zou bijvoorbeeld facebook of gmail kunnen onderschrijven dat dit jouw email address is (ze hebben dit immers getest door je een e-mail te sturen).

    + +

    Doordat andere partijen jouw uitspraken onderschrijven voorzien ze deze van bewijslast, zo weet een webshop zeker dat jouw e mailadres ook echt jouw emailaddres is.

    + + +
    + + +

    Onderschrijving (attest)

    + + +

    Een onderschrijving vormt de bewijslast onder een uitspraak, via contracten kan je als gebruiker applicaties toegang geven tot

    + + +
    + + +

    Contract

    + + +

    Vanuit id-vault kan je jouw gegevens en de bewijslast daarvan ontsluiten voor derden, zo kan je via id-vault inloggen op andere applicaties. Op het moment dat jij jouw gegevens ontsluit voor een andere partij ga je een contract aan met die partij, in dat contract spreek je af welke gegevens je voor welk doel ontsluit. Contracten hebben altijd een eindtijd maar kunnen tussentijds door jou worden opgezegd. Op die manier hou jij zelf controle over wie er toegang heeft tot jouw gegevens.

    + +

    De enige uitzondering hierop zijn dossiers, een dossier kan een juridische blockade geven op het verbreken van een contract omdat de wet verplicht tot langdurige opslag (bijvoorbeeld personeels dossier)

    + + +
    + + +

    Dossier

    + + +

    Een dossier is een zet van data die een organisatie over jouw heeft maar die geen onderdeel vormt van jouw online wallet. Denk hierbij aan een personeelsdossier bij je werkgever of een bestelling bij een webstore.

    + + +
    + + +

    Onderschrijvers (issuer)

    + + +

    Onderschrijvers zijn partijen die jouw uitspraken onderschrijven en daarmee van bewijslast voorzien.

    + +{% endblock %} + +{% block jumpto %} + + +
    + + +
    + Glossary +
    + + + + +
    + +{% endblock %} diff --git a/api/templates/documentation/index.html.twig b/api/templates/documentation/index.html.twig index 776384db..10ba94e9 100644 --- a/api/templates/documentation/index.html.twig +++ b/api/templates/documentation/index.html.twig @@ -9,41 +9,100 @@

    - How to get started with Landkit! + How to get started with ID-Vault!

    - This guide will help you get started with Landkit! All the important stuff ā€“ compiling the source, file structure, build tools, file includes ā€“ is documented here, but should you have any questions, always feel free to reach out to support@goodthemes.co. + ID-Vault is a Self Sovereign Identity (SSI) framework, that means that it aims to make users (self) the ultimate masters (sovereign) of thier data (identity). It does so by providing them a save and reliable wallet to store thire online data. +

    + + + +

    + The ID-Vault framework


    -

    Test

    -

    onder divider

    + +

    + Why ID-Vault? +

    + + +

    Historically seen there have been a lot of digital identity wallet solutions, SSI is in fact a popular theme or trac on many hackathons and ID-Vault it’s is actually a child of the Dutch / EU oddesy program. So why would we need a new solution?

    + +

    + Well actually there are two main reasons +

      +
    • Simplicity
    • +
    • Compliance
    • +
    +

    + +

    Let talk a little bit about simplicity first, most wallet and SSI solution operate on a blockchain premise where users make claims about there identity and external organisation back those claims up by proof. A user can then provide there claim + proof to a third party wich based on there trust in the signing organisation accepts the claim. This concept is called chain of trust. Actually ID-Vault is bassed on the same principle, but with one major difference. We handle all of this blockchain magic on our side. And instead of requiring blockchain knowledge from developers we provide a simple to implement OAuth2 interface. That means that if you as a developer have ever build a Facebook, Google of Github sign-on form you have all the knowledge that you need.

    + +

    The second major difference is compliance, most if not all SSI solutions give full control to users. In fact in most cases the data is stored in a wallet on a mobile device (like a phone) and a user can delete this data at will. That is a nice and idyllic thought but in practice most organizations that you give access to your data are required by law to “hold on to” that data for a given period of time (in europe for example an employer needs to keep employee data in a register for seven years). That dosn’t fly when a user can delete there data at will of simply lose or destroy a device. So in practice organization copy data from a user that logs in with SSI to here own databases. Unfortunately that mean that data moves out of the users control and that a user leads a breadcrumb trail of data with different organizations. In this way a device based wallet leads to less control on your data. How dos ID-Vault solve this? Quite simple actually, first instead of storing the data on a device we store in a secure cloud. Secondly we allow users to set up contracts with organizations that guarantee them access to the users data for a given time. That way the organization is ensurer of legal compliance and no langer needs to store the data locally. Keeping al the users data where it belongs, in your data wallet.

    + + +

    + So I just give you al my data? right…. +

    + +

    Well actually no, with ID-Vault a user NEVER transfers the ownership or right of there data to ID-Vault the data stays yours. You simply use the wallet to store it, and share it. Look to us as service provider, an online storage box of sorts that helps you keep in control.

    + + +

    + But if i’m not paying for it then i am the product right? +

    + +

    Well that part is actually true, but not in a traditional sense of the word. We actually went to great legal lengths to prevent us form owning your data or having any right to it. That means that we can’t sell ot give it to other parties (even if we wanted to,wich obviously we don’t).

    + + +

    + So who pays for al of this? +

    + +

    The organizations that use your data, in the world of modern e-commerce data equals money. That means that you as a user are sitting on a gold mine without the ability to mine it. With ID-Vault you mine it a little bit, organizations pay for accessing your data and that money is then used to keep your data. In a weird way instead of multinationals datamining you, you mine them. Like a modern day data robin hood.

    + + +
    + + +

    + The claim and proof infrastructure +

    {% endblock %} {% block jumpto %} -
  • - New & extended components -
  • -
  • - Dev setup -
  • -
  • - Compiling -
  • -
  • - File structure -
  • -
  • - Gulp file includes -
  • -
  • - Customizing SCSS -
  • + +
    + + +
    + Frequently Asked Questions +
    + + + + +
    {% endblock %} diff --git a/api/templates/documentation/main.html.twig b/api/templates/documentation/main.html.twig index ea403368..c15caec8 100644 --- a/api/templates/documentation/main.html.twig +++ b/api/templates/documentation/main.html.twig @@ -1,9 +1,38 @@ -{% extends 'base.html.twig'%} -{% set noFooter = true %} + + + + + + -{% block content %} + + + + + + + + + + + + + + + + + Landkit + + + + +{% include 'documentation/menu.html.twig' %} + + + -
    -
    -
    -
    - -
    -
    - - -
    - Getting started -
    - - - - - -
    - Section -
    - - - - + +
    +
    +
    +
    -
    +
    +
    + {% include 'documentation/sidenav.html.twig' %}
    - -
    -
    - {% block documentation %} - {% endblock %} +
    +
    -
    -
    -
    + + {% block documentation %} - -
    - Jump to -
    + {% endblock %} - -
      - {% block jumpto %} +
    +
    + + {% block jumpto %} - {% endblock %} - -
    -
    -
    -
    -
    -{% endblock %} + {% endblock %} +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/api/templates/documentation/menu.html.twig b/api/templates/documentation/menu.html.twig new file mode 100644 index 00000000..08666358 --- /dev/null +++ b/api/templates/documentation/menu.html.twig @@ -0,0 +1,135 @@ + + diff --git a/api/templates/documentation/sidenav.html.twig b/api/templates/documentation/sidenav.html.twig new file mode 100644 index 00000000..2d944218 --- /dev/null +++ b/api/templates/documentation/sidenav.html.twig @@ -0,0 +1,58 @@ + + +
    + Getting started +
    + + + + + +
    + Documentation +
    + + + + + + +
    + Legal +
    + + + diff --git a/api/templates/landkit/getstarted-section.html.twig b/api/templates/landkit/getstarted-section.html.twig index 6964f7a9..a2a189c4 100644 --- a/api/templates/landkit/getstarted-section.html.twig +++ b/api/templates/landkit/getstarted-section.html.twig @@ -1,4 +1,4 @@ -
    +
    @@ -6,7 +6,7 @@ -

    +

    {{ 'Get in charge of your online data'|trans|capitalize }}

    diff --git a/api/templates/landkit/menu.html.twig b/api/templates/landkit/menu.html.twig index 84cb8e3e..cb2e1529 100644 --- a/api/templates/landkit/menu.html.twig +++ b/api/templates/landkit/menu.html.twig @@ -24,13 +24,178 @@ diff --git a/api/templates/landkit/registration-section.html.twig b/api/templates/landkit/registration-section.html.twig index 3be40c52..694c80a1 100644 --- a/api/templates/landkit/registration-section.html.twig +++ b/api/templates/landkit/registration-section.html.twig @@ -5,7 +5,7 @@

    {{ 'the best place to'|trans|capitalize}}
    - +

    diff --git a/api/templates/landkit/welcome-section.html.twig b/api/templates/landkit/welcome-section.html.twig index 2818a2dc..dbfa6e08 100644 --- a/api/templates/landkit/welcome-section.html.twig +++ b/api/templates/landkit/welcome-section.html.twig @@ -4,7 +4,7 @@

    - ... + ...
    diff --git a/api/translations/messages.nl.xlf b/api/translations/messages.nl.xlf index 6a1a551b..1307533f 100644 --- a/api/translations/messages.nl.xlf +++ b/api/translations/messages.nl.xlf @@ -133,9 +133,9 @@ claims claims - + no claims available - geen claims beschikbaar + __no claims available add data @@ -185,7 +185,7 @@ no contracts available geen contracten beschikbaar - + general algemeen @@ -221,15 +221,15 @@ basic information basis informatie - + become a developer! word ontwikkelaar! - + Are you an application developer? And are your hands itching to get started with id-vault? Then all you have to do is turn on the developer view, you can do that by using the slider in your personal settings or by pressing this button. Ben je een ontwikkelaar van applicaties? En jeuken je handen om aan de slag te gaan met id-vault? Dan is het enige wat je hoeft te doen de ontwikkelaars weergave aanzetten, dat kan je doen moet het schuifje in je persoonlijke instellingen of door op deze knop te drukken. - + view usage gebruik inzien @@ -861,11 +861,11 @@ organizations organisaties - + applications applicaties - + documentation documentatie @@ -873,15 +873,15 @@ new nieuw - + no organizations available geen organisaties beschikbaar - + no applications available geen applicaties beschikbaar - + developer view ontwikkelaars weergave @@ -1289,7 +1289,7 @@ to change your password om uw wachtwoord te wijzigen - + to login om in te loggen @@ -1705,6 +1705,90 @@ back to safety back to safety + + no organizations + __no organizations + + + development + __development + + + free + gratis + + + email us + mail ons + + + take control + take control + + + take your data + take your data + + + authenticate users via oauth + gebruikers authenticeren via oauth + + + basic data + basis gegevens + + + access to the basic user data + toegang to basis gebruikers gegevens + + + SAML / Active Directory + SAML / Active Directory + + + short text + short text + + + certain claims for data + bepaalde claims voor gegevens + + + for example: IDIN, IDeal or phone number + bijvoorbeeld: IDIN, IDeal of telefoonnummer + + + how does it work + hoe werkt het + + + technics + techniek + + + terminology + terminologie + + + terminology for id-vault + terminologie voor id-vault + + + terms of service + algemene voorwaarden + + + add new + toevoegen + + + add organization + organisatie toevoegen + + + choose logo + kies logo + From 9a23b2a77e4f11ac298ffc6b55070837aa8f1c73 Mon Sep 17 00:00:00 2001 From: Wilco Louwerse Date: Mon, 26 Oct 2020 16:52:12 +0100 Subject: [PATCH 08/10] a few translation fixes --- api/translations/messages.nl.xlf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api/translations/messages.nl.xlf b/api/translations/messages.nl.xlf index 1307533f..99c1d628 100644 --- a/api/translations/messages.nl.xlf +++ b/api/translations/messages.nl.xlf @@ -135,7 +135,7 @@ no claims available - __no claims available + geen claims beschikbaar add data @@ -1567,7 +1567,7 @@ checkins - __checkins + checkins privacy @@ -1707,11 +1707,11 @@ no organizations - __no organizations + geen organisaties development - __development + ontwikkeling free From 9c6524e317a9f62f16774f855effc883a9a02a78 Mon Sep 17 00:00:00 2001 From: Wilco Louwerse Date: Mon, 26 Oct 2020 17:00:27 +0100 Subject: [PATCH 09/10] layout fix --- api/templates/dashboard/claims.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/templates/dashboard/claims.html.twig b/api/templates/dashboard/claims.html.twig index f3071ed1..5451f8d7 100644 --- a/api/templates/dashboard/claims.html.twig +++ b/api/templates/dashboard/claims.html.twig @@ -42,7 +42,7 @@
    -
    +

    From 43cddc369f33327043f1f0c52aec47bb2088d321 Mon Sep 17 00:00:00 2001 From: Wilco Louwerse Date: Mon, 26 Oct 2020 16:01:55 +0000 Subject: [PATCH 10/10] Apply fixes from StyleCI --- api/config/bundles.php | 34 +++++++++---------- api/src/Controller/DashboardController.php | 17 ++++------ api/src/Controller/DefaultController.php | 3 -- .../Controller/DocumentationController.php | 3 -- api/src/Controller/UserController.php | 4 +-- 5 files changed, 25 insertions(+), 36 deletions(-) diff --git a/api/config/bundles.php b/api/config/bundles.php index 778ba88d..852f9e68 100644 --- a/api/config/bundles.php +++ b/api/config/bundles.php @@ -1,22 +1,22 @@ ['all' => true], + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], - Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], - Symfony\Bundle\MercureBundle\MercureBundle::class => ['all' => true], - Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], - Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], - ApiPlatform\Core\Bridge\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], - Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true], - Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], - Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], - Conduction\CommonGroundBundle\CommonGroundBundle::class => ['all' => true], - Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true], - Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['all' => true], - Tbbc\MoneyBundle\TbbcMoneyBundle::class => ['all' => true], - Knp\Bundle\MarkdownBundle\KnpMarkdownBundle::class => ['all' => true], - Endroid\QrCodeBundle\EndroidQrCodeBundle::class => ['all' => true], - Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], - Conduction\LandkitBundle\LandkitBundle::class => ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Symfony\Bundle\MercureBundle\MercureBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + ApiPlatform\Core\Bridge\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], + Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Conduction\CommonGroundBundle\CommonGroundBundle::class => ['all' => true], + Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['all' => true], + Tbbc\MoneyBundle\TbbcMoneyBundle::class => ['all' => true], + Knp\Bundle\MarkdownBundle\KnpMarkdownBundle::class => ['all' => true], + Endroid\QrCodeBundle\EndroidQrCodeBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Conduction\LandkitBundle\LandkitBundle::class => ['all' => true], ]; diff --git a/api/src/Controller/DashboardController.php b/api/src/Controller/DashboardController.php index 40c97020..b71a8f64 100644 --- a/api/src/Controller/DashboardController.php +++ b/api/src/Controller/DashboardController.php @@ -7,7 +7,6 @@ use Conduction\CommonGroundBundle\Service\ApplicationService; //use App\Service\RequestService; use Conduction\CommonGroundBundle\Service\CommonGroundService; -use function GuzzleHttp\Promise\all; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -40,7 +39,6 @@ public function generalAction(Session $session, Request $request, CommonGroundSe if (count($users) > 0) { $user = $users[0]; - $userGroups = []; foreach ($user['userGroups'] as $userGroup) { if ($userGroup['id'] != 'c3c463b9-8d39-4cc0-b62c-826d8f5b7d8c') { @@ -134,7 +132,6 @@ public function organizationsAction(Session $session, Request $request, CommonGr $variables = []; if ($request->isMethod('POST')) { - $name = $request->get('name'); $email = $request->get('email'); $description = $request->get('description'); @@ -165,17 +162,16 @@ public function organizationsAction(Session $session, Request $request, CommonGr } $wrc = $commonGroundService->createResource($wrc, ['component' => 'wrc', 'type' => 'organizations']); - } - if ($this->getUser()){ - $users = $commonGroundService->getResourceList(['component' => 'uc', 'type' => 'users'],['username' => $this->getUser()->getUsername()])['hydra:member']; - if (count($users) > 0 ) { + if ($this->getUser()) { + $users = $commonGroundService->getResourceList(['component' => 'uc', 'type' => 'users'], ['username' => $this->getUser()->getUsername()])['hydra:member']; + if (count($users) > 0) { $organizations = []; $user = $users[0]; - foreach ($user['userGroups'] as $group){ - $organization =$commonGroundService->getResource($group['organization']); - if (!in_array($organization, $organizations)){ + foreach ($user['userGroups'] as $group) { + $organization = $commonGroundService->getResource($group['organization']); + if (!in_array($organization, $organizations)) { $organizations[] = $organization; } } @@ -195,7 +191,6 @@ public function organizationAction(Session $session, Request $request, CommonGro $variables = []; if ($request->isMethod('POST')) { - } return $variables; diff --git a/api/src/Controller/DefaultController.php b/api/src/Controller/DefaultController.php index 703f7adb..5d72af4e 100644 --- a/api/src/Controller/DefaultController.php +++ b/api/src/Controller/DefaultController.php @@ -7,8 +7,6 @@ use Conduction\CommonGroundBundle\Service\ApplicationService; //use App\Service\RequestService; use Conduction\CommonGroundBundle\Service\CommonGroundService; -use function GuzzleHttp\Promise\all; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; @@ -123,5 +121,4 @@ public function pricingAction(Session $session, Request $request, CommonGroundSe return $variables; } - } diff --git a/api/src/Controller/DocumentationController.php b/api/src/Controller/DocumentationController.php index fbcd8535..08f6ce10 100644 --- a/api/src/Controller/DocumentationController.php +++ b/api/src/Controller/DocumentationController.php @@ -7,8 +7,6 @@ use Conduction\CommonGroundBundle\Service\ApplicationService; //use App\Service\RequestService; use Conduction\CommonGroundBundle\Service\CommonGroundService; -use function GuzzleHttp\Promise\all; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; @@ -57,5 +55,4 @@ public function exampleAction(Session $session, Request $request, CommonGroundSe return $variables; } - } diff --git a/api/src/Controller/UserController.php b/api/src/Controller/UserController.php index 39d2b284..bf73327d 100644 --- a/api/src/Controller/UserController.php +++ b/api/src/Controller/UserController.php @@ -19,7 +19,7 @@ /** * Class UserController. * -* @Route("/user") + * @Route("/user") */ class UserController extends AbstractController { @@ -66,10 +66,10 @@ public function login( if ($this->getUser()) { $this->flash->add('success', 'Welcome '.$this->getUser()->getName()); + return $this->redirect($this->generateUrl('app_default_index')); } else { return $this->redirect($this->generateUrl('app_default_index')); - } }