mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-12 11:11:31 +00:00
Build modified streamline images
The official image from streamline does not currently work for the arm64 platform. As a temporary measure, the source code and docker build scripts have been lifted from the official images and are used to build locally. Some additional modifications are made to reduce overall image size, these are documented in docker/README.md
This commit is contained in:
+143
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
namespace Nwidart\Modules\Generators;
|
||||
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Nwidart\Modules\Exceptions\FileAlreadyExistException;
|
||||
|
||||
class FileGenerator extends Generator
|
||||
{
|
||||
/**
|
||||
* The path wil be used.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $path;
|
||||
|
||||
/**
|
||||
* The contens will be used.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $contents;
|
||||
|
||||
/**
|
||||
* The laravel filesystem or null.
|
||||
*
|
||||
* @var \Illuminate\Filesystem\Filesystem|null
|
||||
*/
|
||||
protected $filesystem;
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $overwriteFile;
|
||||
|
||||
/**
|
||||
* The constructor.
|
||||
*
|
||||
* @param $path
|
||||
* @param $contents
|
||||
* @param null $filesystem
|
||||
*/
|
||||
public function __construct($path, $contents, $filesystem = null)
|
||||
{
|
||||
$this->path = $path;
|
||||
$this->contents = $contents;
|
||||
$this->filesystem = $filesystem ?: new Filesystem();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get contents.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getContents()
|
||||
{
|
||||
return $this->contents;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set contents.
|
||||
*
|
||||
* @param mixed $contents
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setContents($contents)
|
||||
{
|
||||
$this->contents = $contents;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get filesystem.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getFilesystem()
|
||||
{
|
||||
return $this->filesystem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set filesystem.
|
||||
*
|
||||
* @param Filesystem $filesystem
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setFilesystem(Filesystem $filesystem)
|
||||
{
|
||||
$this->filesystem = $filesystem;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get path.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getPath()
|
||||
{
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set path.
|
||||
*
|
||||
* @param mixed $path
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setPath($path)
|
||||
{
|
||||
$this->path = $path;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function withFileOverwrite(bool $overwrite): FileGenerator
|
||||
{
|
||||
$this->overwriteFile = $overwrite;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the file.
|
||||
*/
|
||||
public function generate()
|
||||
{
|
||||
$path = $this->getPath();
|
||||
if (!$this->filesystem->exists($path)) {
|
||||
return $this->filesystem->put($path, $this->getContents());
|
||||
}
|
||||
if ($this->overwriteFile === true) {
|
||||
return $this->filesystem->put($path, $this->getContents());
|
||||
}
|
||||
|
||||
throw new FileAlreadyExistException('File already exists!');
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Nwidart\Modules\Generators;
|
||||
|
||||
abstract class Generator
|
||||
{
|
||||
}
|
||||
+602
@@ -0,0 +1,602 @@
|
||||
<?php
|
||||
|
||||
namespace Nwidart\Modules\Generators;
|
||||
|
||||
use Illuminate\Config\Repository as Config;
|
||||
use Illuminate\Console\Command as Console;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\Support\Str;
|
||||
use Nwidart\Modules\Contracts\ActivatorInterface;
|
||||
use Nwidart\Modules\FileRepository;
|
||||
use Nwidart\Modules\Support\Config\GenerateConfigReader;
|
||||
use Nwidart\Modules\Support\Stub;
|
||||
|
||||
class ModuleGenerator extends Generator
|
||||
{
|
||||
/**
|
||||
* The module name will created.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* The laravel config instance.
|
||||
*
|
||||
* @var Config
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* The laravel filesystem instance.
|
||||
*
|
||||
* @var Filesystem
|
||||
*/
|
||||
protected $filesystem;
|
||||
|
||||
/**
|
||||
* The laravel console instance.
|
||||
*
|
||||
* @var Console
|
||||
*/
|
||||
protected $console;
|
||||
|
||||
/**
|
||||
* The laravel component Factory instance.
|
||||
*
|
||||
* @var \Illuminate\Console\View\Components\Factory
|
||||
*/
|
||||
protected $component;
|
||||
|
||||
|
||||
/**
|
||||
* The activator instance
|
||||
*
|
||||
* @var ActivatorInterface
|
||||
*/
|
||||
protected $activator;
|
||||
|
||||
/**
|
||||
* The module instance.
|
||||
*
|
||||
* @var \Nwidart\Modules\Module
|
||||
*/
|
||||
protected $module;
|
||||
|
||||
/**
|
||||
* Force status.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $force = false;
|
||||
|
||||
/**
|
||||
* set default module type.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $type = 'web';
|
||||
|
||||
/**
|
||||
* Enables the module.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $isActive = false;
|
||||
|
||||
/**
|
||||
* The constructor.
|
||||
* @param $name
|
||||
* @param FileRepository $module
|
||||
* @param Config $config
|
||||
* @param Filesystem $filesystem
|
||||
* @param Console $console
|
||||
*/
|
||||
public function __construct(
|
||||
$name,
|
||||
FileRepository $module = null,
|
||||
Config $config = null,
|
||||
Filesystem $filesystem = null,
|
||||
Console $console = null,
|
||||
ActivatorInterface $activator = null
|
||||
) {
|
||||
$this->name = $name;
|
||||
$this->config = $config;
|
||||
$this->filesystem = $filesystem;
|
||||
$this->console = $console;
|
||||
$this->module = $module;
|
||||
$this->activator = $activator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set type.
|
||||
*
|
||||
* @param string $type
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setType($type)
|
||||
{
|
||||
$this->type = $type;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set active flag.
|
||||
*
|
||||
* @param bool $active
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setActive(bool $active)
|
||||
{
|
||||
$this->isActive = $active;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of module will created. By default in studly case.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return Str::studly($this->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the laravel config instance.
|
||||
*
|
||||
* @return Config
|
||||
*/
|
||||
public function getConfig()
|
||||
{
|
||||
return $this->config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the laravel config instance.
|
||||
*
|
||||
* @param Config $config
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setConfig($config)
|
||||
{
|
||||
$this->config = $config;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the modules activator
|
||||
*
|
||||
* @param ActivatorInterface $activator
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setActivator(ActivatorInterface $activator)
|
||||
{
|
||||
$this->activator = $activator;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the laravel filesystem instance.
|
||||
*
|
||||
* @return Filesystem
|
||||
*/
|
||||
public function getFilesystem()
|
||||
{
|
||||
return $this->filesystem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the laravel filesystem instance.
|
||||
*
|
||||
* @param Filesystem $filesystem
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setFilesystem($filesystem)
|
||||
{
|
||||
$this->filesystem = $filesystem;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the laravel console instance.
|
||||
*
|
||||
* @return Console
|
||||
*/
|
||||
public function getConsole()
|
||||
{
|
||||
return $this->console;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the laravel console instance.
|
||||
*
|
||||
* @param Console $console
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setConsole($console)
|
||||
{
|
||||
$this->console = $console;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Console\View\Components\Factory
|
||||
*/
|
||||
public function getComponent(): \Illuminate\Console\View\Components\Factory
|
||||
{
|
||||
return $this->component;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Illuminate\Console\View\Components\Factory $component
|
||||
*/
|
||||
public function setComponent(\Illuminate\Console\View\Components\Factory $component): self
|
||||
{
|
||||
$this->component = $component;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the module instance.
|
||||
*
|
||||
* @return \Nwidart\Modules\Module
|
||||
*/
|
||||
public function getModule()
|
||||
{
|
||||
return $this->module;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the module instance.
|
||||
*
|
||||
* @param mixed $module
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setModule($module)
|
||||
{
|
||||
$this->module = $module;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of folders will created.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getFolders()
|
||||
{
|
||||
return $this->module->config('paths.generator');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of files will created.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getFiles()
|
||||
{
|
||||
return $this->module->config('stubs.files');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set force status.
|
||||
*
|
||||
* @param bool|int $force
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setForce($force)
|
||||
{
|
||||
$this->force = $force;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the module.
|
||||
*/
|
||||
public function generate(): int
|
||||
{
|
||||
$name = $this->getName();
|
||||
|
||||
if ($this->module->has($name)) {
|
||||
if ($this->force) {
|
||||
$this->module->delete($name);
|
||||
} else {
|
||||
$this->component->error("Module [{$name}] already exists!");
|
||||
|
||||
return E_ERROR;
|
||||
}
|
||||
}
|
||||
$this->component->info("Creating module: [$name]");
|
||||
|
||||
$this->generateFolders();
|
||||
|
||||
$this->generateModuleJsonFile();
|
||||
|
||||
if ($this->type !== 'plain') {
|
||||
$this->generateFiles();
|
||||
$this->generateResources();
|
||||
}
|
||||
|
||||
if ($this->type === 'plain') {
|
||||
$this->cleanModuleJsonFile();
|
||||
}
|
||||
|
||||
$this->activator->setActiveByName($name, $this->isActive);
|
||||
|
||||
$this->console->newLine(1);
|
||||
|
||||
$this->component->info("Module [{$name}] created successfully.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the folders.
|
||||
*/
|
||||
public function generateFolders()
|
||||
{
|
||||
foreach ($this->getFolders() as $key => $folder) {
|
||||
$folder = GenerateConfigReader::read($key);
|
||||
|
||||
if ($folder->generate() === false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$path = $this->module->getModulePath($this->getName()) . '/' . $folder->getPath();
|
||||
|
||||
$this->filesystem->makeDirectory($path, 0755, true);
|
||||
if (config('modules.stubs.gitkeep')) {
|
||||
$this->generateGitKeep($path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate git keep to the specified path.
|
||||
*
|
||||
* @param string $path
|
||||
*/
|
||||
public function generateGitKeep($path)
|
||||
{
|
||||
$this->filesystem->put($path . '/.gitkeep', '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the files.
|
||||
*/
|
||||
public function generateFiles()
|
||||
{
|
||||
foreach ($this->getFiles() as $stub => $file) {
|
||||
$path = $this->module->getModulePath($this->getName()) . $file;
|
||||
|
||||
$this->component->task("Generating file {$path}",function () use ($stub, $path) {
|
||||
if (!$this->filesystem->isDirectory($dir = dirname($path))) {
|
||||
$this->filesystem->makeDirectory($dir, 0775, true);
|
||||
}
|
||||
|
||||
$this->filesystem->put($path, $this->getStubContents($stub));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate some resources.
|
||||
*/
|
||||
public function generateResources()
|
||||
{
|
||||
if (GenerateConfigReader::read('seeder')->generate() === true) {
|
||||
$this->console->call('module:make-seed', [
|
||||
'name' => $this->getName(),
|
||||
'module' => $this->getName(),
|
||||
'--master' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
if (GenerateConfigReader::read('provider')->generate() === true) {
|
||||
$this->console->call('module:make-provider', [
|
||||
'name' => $this->getName() . 'ServiceProvider',
|
||||
'module' => $this->getName(),
|
||||
'--master' => true,
|
||||
]);
|
||||
$this->console->call('module:route-provider', [
|
||||
'module' => $this->getName(),
|
||||
]);
|
||||
}
|
||||
|
||||
if (GenerateConfigReader::read('controller')->generate() === true) {
|
||||
$options = $this->type=='api' ? ['--api'=>true] : [];
|
||||
$this->console->call('module:make-controller', [
|
||||
'controller' => $this->getName() . 'Controller',
|
||||
'module' => $this->getName(),
|
||||
]+$options);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the contents of the specified stub file by given stub name.
|
||||
*
|
||||
* @param $stub
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getStubContents($stub)
|
||||
{
|
||||
return (new Stub(
|
||||
'/' . $stub . '.stub',
|
||||
$this->getReplacement($stub)
|
||||
)
|
||||
)->render();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* get the list for the replacements.
|
||||
*/
|
||||
public function getReplacements()
|
||||
{
|
||||
return $this->module->config('stubs.replacements');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get array replacement for the specified stub.
|
||||
*
|
||||
* @param $stub
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getReplacement($stub)
|
||||
{
|
||||
$replacements = $this->module->config('stubs.replacements');
|
||||
|
||||
if (!isset($replacements[$stub])) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$keys = $replacements[$stub];
|
||||
|
||||
$replaces = [];
|
||||
|
||||
if ($stub === 'json' || $stub === 'composer') {
|
||||
if (in_array('PROVIDER_NAMESPACE', $keys, true) === false) {
|
||||
$keys[] = 'PROVIDER_NAMESPACE';
|
||||
}
|
||||
}
|
||||
foreach ($keys as $key) {
|
||||
if (method_exists($this, $method = 'get' . ucfirst(Str::studly(strtolower($key))) . 'Replacement')) {
|
||||
$replaces[$key] = $this->$method();
|
||||
} else {
|
||||
$replaces[$key] = null;
|
||||
}
|
||||
}
|
||||
|
||||
return $replaces;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the module.json file
|
||||
*/
|
||||
private function generateModuleJsonFile()
|
||||
{
|
||||
$path = $this->module->getModulePath($this->getName()) . 'module.json';
|
||||
|
||||
$this->component->task("Generating file $path",function () use ($path) {
|
||||
if (!$this->filesystem->isDirectory($dir = dirname($path))) {
|
||||
$this->filesystem->makeDirectory($dir, 0775, true);
|
||||
}
|
||||
|
||||
$this->filesystem->put($path, $this->getStubContents('json'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the default service provider that was added in the module.json file
|
||||
* This is needed when a --plain module was created
|
||||
*/
|
||||
private function cleanModuleJsonFile()
|
||||
{
|
||||
$path = $this->module->getModulePath($this->getName()) . 'module.json';
|
||||
|
||||
$content = $this->filesystem->get($path);
|
||||
$namespace = $this->getModuleNamespaceReplacement();
|
||||
$studlyName = $this->getStudlyNameReplacement();
|
||||
|
||||
$provider = '"' . $namespace . '\\\\' . $studlyName . '\\\\Providers\\\\' . $studlyName . 'ServiceProvider"';
|
||||
|
||||
$content = str_replace($provider, '', $content);
|
||||
|
||||
$this->filesystem->put($path, $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the module name in lower case.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getLowerNameReplacement()
|
||||
{
|
||||
return strtolower($this->getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the module name in studly case.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getStudlyNameReplacement()
|
||||
{
|
||||
return $this->getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get replacement for $VENDOR$.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getVendorReplacement()
|
||||
{
|
||||
return $this->module->config('composer.vendor');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get replacement for $MODULE_NAMESPACE$.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getModuleNamespaceReplacement()
|
||||
{
|
||||
return str_replace('\\', '\\\\', $this->module->config('namespace'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get replacement for $CONTROLLER_NAMESPACE$.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getControllerNamespaceReplacement(): string
|
||||
{
|
||||
return str_replace('/', '\\', $this->module->config('paths.generator.controller.namespace') ?: $this->module->config('paths.generator.controller.path', 'Controller'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get replacement for $AUTHOR_NAME$.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getAuthorNameReplacement()
|
||||
{
|
||||
return $this->module->config('composer.author.name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get replacement for $AUTHOR_EMAIL$.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getAuthorEmailReplacement()
|
||||
{
|
||||
return $this->module->config('composer.author.email');
|
||||
}
|
||||
|
||||
protected function getProviderNamespaceReplacement(): string
|
||||
{
|
||||
return str_replace('\\', '\\\\', GenerateConfigReader::read('provider')->getNamespace());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user