]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5265 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 29 Apr 2022 14:03:46 +0000 (16:03 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 29 Apr 2022 14:03:46 +0000 (16:03 +0200)
.idea/workspace.xml
app/Models/CubedesignersEmails.php [new file with mode: 0644]
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php

index 67790a5297d6d6a0060b302885cbad68eadef8bb..0b53ab7a479f4ee0e99fcf3f317653e482b2acd5 100644 (file)
     <select />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="5d2ecd5e-a05a-4f96-a195-fa6372618165" name="Default Changelist" comment="wait #5189 @0.25">
-      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Admin/Operations/Tools/GitReposCreate.php" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Admin/Operations/Tools/TextToSpeech.php" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/deployment.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/deployment.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/php.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/php.xml" afterDir="false" />
+    <list default="true" id="5d2ecd5e-a05a-4f96-a195-fa6372618165" name="Default Changelist" comment="wait #5264 @2">
+      <change afterPath="$PROJECT_DIR$/app/Models/CubedesignersEmails.php" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/Http/Controllers/Admin/ToolsController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/Admin/ToolsController.php" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/composer.json" beforeDir="false" afterPath="$PROJECT_DIR$/composer.json" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/composer.lock" beforeDir="false" afterPath="$PROJECT_DIR$/composer.lock" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/resources/views/tools/pdf2svg.blade.php" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/resources/views/tools/sidebar.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/tools/sidebar.blade.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
     <option name="hideEmptyMiddlePackages" value="true" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;WebServerToolWindowFactoryState&quot;: &quot;true&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
-    &quot;ruby.rails.projectView.checked&quot;: &quot;true&quot;,
-    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "WebServerToolWindowFactoryState": "true",
+    "WebServerToolWindowPanel.toolwindow.highlight.mappings": "true",
+    "WebServerToolWindowPanel.toolwindow.highlight.symlinks": "true",
+    "WebServerToolWindowPanel.toolwindow.show.date": "false",
+    "WebServerToolWindowPanel.toolwindow.show.permissions": "false",
+    "WebServerToolWindowPanel.toolwindow.show.size": "false",
+    "nodejs_package_manager_path": "npm",
+    "ruby.rails.projectView.checked": "true",
+    "vue.rearranger.settings.migration": "true"
   }
-}</component>
+}]]></component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
       <recent name="D:\Works\FluidbookToolbox\app\Fields" />
       <workItem from="1650370001187" duration="1140000" />
       <workItem from="1650543593675" duration="5191000" />
       <workItem from="1650692345830" duration="3144000" />
-      <workItem from="1651220888006" duration="594000" />
-    </task>
-    <task id="LOCAL-00220" summary="wait #5049 @0.25">
-      <created>1642764868216</created>
-      <option name="number" value="00220" />
-      <option name="presentableId" value="LOCAL-00220" />
-      <option name="project" value="LOCAL" />
-      <updated>1642764868216</updated>
+      <workItem from="1651220888006" duration="13022000" />
     </task>
     <task id="LOCAL-00221" summary="wip #5045 @0.5">
       <created>1642786391085</created>
       <option name="project" value="LOCAL" />
       <updated>1650371758882</updated>
     </task>
-    <option name="localTasksCounter" value="269" />
+    <task id="LOCAL-00269" summary="wait #5264 @2">
+      <created>1651222636749</created>
+      <option name="number" value="00269" />
+      <option name="presentableId" value="LOCAL-00269" />
+      <option name="project" value="LOCAL" />
+      <updated>1651222636750</updated>
+    </task>
+    <option name="localTasksCounter" value="270" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
     <option name="CHECK_NEW_TODO" value="false" />
     <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
-    <MESSAGE value="wait #5045 @0.5" />
     <MESSAGE value="wip #5041 @3" />
     <MESSAGE value="wip #5041" />
     <MESSAGE value="wip #5041 @0.5" />
     <MESSAGE value="wait #5210 @1" />
     <MESSAGE value="wait #5188 @0.25" />
     <MESSAGE value="wait #5189 @0.25" />
-    <option name="LAST_COMMIT_MESSAGE" value="wait #5189 @0.25" />
+    <MESSAGE value="wait #5264 @2" />
+    <option name="LAST_COMMIT_MESSAGE" value="wait #5264 @2" />
   </component>
   <component name="XSLT-Support.FileAssociations.UIState">
     <expand />
diff --git a/app/Models/CubedesignersEmails.php b/app/Models/CubedesignersEmails.php
new file mode 100644 (file)
index 0000000..d66d6f5
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+
+namespace App\Models;
+
+use Cubist\Backpack\Magic\Fields\Table;
+use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
+use Cubist\Util\Crypt;
+use Cubist\Util\Files\Files;
+use Cubist\Util\Str;
+
+class CubedesignersEmails extends CubistMagicAbstractModel
+{
+    protected $table = 'cubedesigners_emails';
+
+    protected $_options = ['name' => 'cubemails',
+        'singular' => 'paramètre',
+        'plural' => 'paramètres',
+        'oneinstance' => true];
+
+
+    public function setFields()
+    {
+        parent::setFields();
+
+        $this->addField('domains', Table::class, __('Domaines'), ['entity_singular' => __('un domaine'), 'columns' => ['domaine' => __('Domaine')], 'translatable' => false,]);
+        $this->addField('mailboxes', Table::class, __('Boîtes mail'), ['entity_singular' => __('une boîte mail'), 'columns' => ['mailbox' => __('E-mail'), 'password' => __('Mot de passe')], 'translatable' => false, 'hint' => __('Laisser le mot de passe vide pour utiliser celui du compte "Toolbox"')]);
+        $this->addField('aliases', Table::class, __('Redirections'), ['entity_singular' => __('une redirection'), 'columns' => ['from' => __('Alias'), 'dest' => __('Destinations')], 'translatable' => false,]);
+    }
+
+    public function preSave()
+    {
+
+        $maindomain = 'cubedesigners.com';
+
+        $mailboxes = json_decode($this->mailboxes, true);
+        $accounts = [];
+        foreach ($mailboxes as $k => $m) {
+            if (!isset($m['password'])) {
+                $m['password'] = '';
+            }
+            $email = $m['mailbox'] . '@' . $maindomain;
+            $password = $m['password'] = trim($m['password']);
+            if ($m['password'] === '') {
+                $user = User::where('email', $email)->first();
+                if (null === $user) {
+                    $m['password'] = Str::random(12);
+                } else {
+                    $password = '{BLF-CRYPT}' . $user->password;
+                }
+            }
+            if ($m['password'] !== '' && !preg_match('/^\{([A-Z0-9-]+)\}\$\d/', $m['password'])) {
+                $p = $m['password'];
+                $cmd = "export PATH=\$PATH:/usr/bin;echo $(doveadm pw -s SHA512-CRYPT -u $email -p $p 2>/dev/null)";
+                $password = $m['password'] = trim(`$cmd`);
+                if (!$password) {
+                    dd($cmd, $m['password']);
+                }
+            }
+            $accounts[$m['mailbox']] = $password;
+            $mailboxes[$k] = $m;
+        }
+        $this->mailboxes = json_encode($mailboxes);
+
+        $accountFile = [];
+        foreach ($accounts as $account => $password) {
+            $accountFile[] = $account . '@' . $maindomain . '|' . $password;
+        }
+        Files::mkdir(storage_path('emailconfig'));
+        file_put_contents(storage_path('emailconfig/postfix-accounts.cf'), implode("\n", $accountFile));
+        //
+        $domains = json_decode($this->domains, true);
+        $aliases = json_decode($this->aliases, true);
+        $aliasesFile = [];
+
+        foreach ($domains as $d) {
+            $domain = $d['domaine'];
+            if ($domain !== 'cubedesigners.com') {
+                foreach ($accounts as $account => $password) {
+                    $aliasesFile[] = $account . '@' . $domain . ' ' . $account . '@' . $maindomain;
+                }
+            }
+            foreach ($aliases as $a) {
+                $dests = explode(',', $a['dest']);
+                foreach ($dests as $dest) {
+                    $aliasesFile[] = $a['from'] . '@' . $domain . ' ' . trim($dest);
+                }
+            }
+        }
+
+        file_put_contents(storage_path('emailconfig/postfix-virtual.cf'), implode("\n", $aliasesFile));
+    }
+}
index ebbf7e5d6faa8dbd3195881f42e51be9c982e0db..944f4b62d526667f6373fc8ed71bfbc0f76c2c79 100644 (file)
@@ -67,7 +67,7 @@
 @include('tools.sidebar')
 @canany(['users:read','company:read','managerolesandpersmissions'])
     <li class='nav-item nav-dropdown open'><a class='nav-link nav-dropdown-toggle' href='#'><i
-                class='nav-icon la la-group'></i>Clients</a>
+                class='nav-icon la la-group'></i>{{__('Clients')}}</a>
         <ul class='nav-dropdown-items'>
             @can('company:read')
                 <li class='nav-item'><a class='nav-link' href='{{ backpack_url('company') }}'><i
     </li>
 @endcan
 
+@canany(['extranet:manage_team','extranet:manage_emails'])
+    <li class='nav-item nav-dropdown'><a class='nav-link nav-dropdown-toggle' href='#'><i
+                class='nav-icon la la-mug-hot'></i>{{__('Équipe')}}</a>
+        <ul class='nav-dropdown-items'>
+            @can('extranet:manage_emails')
+                <li class="nav-item"><a class="nav-link"
+                                        href='{{ backpack_url('cubemails') }}'><i
+                            class='la la-mail-bulk'></i>
+                        <span>{{__('Emails')}}</span></a>
+                </li>
+            @endcan
+        </ul>
+    </li>
+@endcan
+
 @canany(['maintenance','toolbox-translate:admin'])
     <li class='nav-item nav-dropdown'><a class='nav-link nav-dropdown-toggle' href='#'><i
                 class='nav-icon la la-cogs'></i>{{__('Administration')}}</a>