app=$app;
if($intern) {
return;
}
$this->app->ActionHandlerInit($this);
// ab hier alle Action Handler definieren die das Modul hat
$this->app->ActionHandler("create", "VersandartenCreate");
$this->app->ActionHandler("edit", "VersandartenEdit");
$this->app->ActionHandler("list", "VersandartenList");
$this->app->ActionHandler("delete", "VersandartenDelete");
$this->app->ActionHandler("copy", 'VersandartenCopy');
$this->app->ActionHandler('createShipment', 'CreateShipment');
$this->app->ActionHandlerListen($app);
}
public function Install(): void
{
$this->app->erp->GetVersandartAuftrag();
}
/** @noinspection PhpUnused */
public function VersandartenCopy():void
{
$id = (int)$this->app->Secure->GetGET('id');
$id = $this->app->DB->Select("SELECT `id` FROM `versandarten` WHERE `id` = $id LIMIT 1");
if(!$id) {
$this->app->Location->execute('index.php?module=versandarten&action=list');
}
$newId = $this->app->DB->MysqlCopyRow('versandarten', 'id', $id);
if($newId) {
$this->app->DB->Update(
"UPDATE `versandarten` set `aktiv` = 0, `ausprojekt` = 0 WHERE `id` = $newId LIMIT 1"
);
}
$this->app->Location->execute('index.php?module=versandarten&action=edit&id='.$newId);
}
/** @noinspection PhpUnused */
public function VersandartenList(): void
{
$this->app->erp->MenuEintrag('index.php?module=versandarten&action=create','Neue Versandart anlegen');
$this->app->erp->MenuEintrag('index.php?module=versandarten&action=list','Übersicht');
$this->app->YUI->TableSearch('TAB1','versandarten_list', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','versandarten_list.tpl');
}
public static function TableSearch(Application $app, string $name, array $erlaubtevars): array
{
// in dieses switch alle lokalen Tabellen (diese Live Tabellen mit Suche etc.) für dieses Modul
switch($name) {
case 'versandarten_list':
$allowed['versandarten'] = array('list');
$allowed['einstellungen'] = array('category');
$isSettingAction = $app->Secure->GetGET('module') === 'einstellungen'
|| $app->Secure->GetGET('smodule') === 'einstellungen';
if($isSettingAction) {
$maxrows = 10;
}
$heading = array('Bezeichnung', 'Typ','Modul', 'Projekt', 'Menü');
$width = array('39%', '20%', '20%','20%','5%');
$findcols = array('v.bezeichnung', 'v.type','v.modul', "if(v.projekt, (SELECT `abkuerzung` FROM `projekt` WHERE `id` = v.projekt), '')",'v.id');
$searchsql = array('v.bezeichnung', 'v.type','v.modul', 'v.projekt');
$defaultorder = 1;
$defaultorderdesc = 0;
$menu = "
";
$where = " v.id > 0 ";
$sql = "SELECT SQL_CALC_FOUND_ROWS v.id, if(v.aktiv, v.bezeichnung, CONCAT('',v.bezeichnung,'')),
if(v.aktiv, v.type, CONCAT('',v.type,'')),
if(v.aktiv, v.modul, CONCAT('',v.modul,'')),
if(v.projekt, (SELECT `abkuerzung` FROM `projekt` WHERE `id` = v.projekt), ''), v.id
FROM `versandarten` AS `v`";
$count = "SELECT count(v.id) FROM `versandarten` AS `v` WHERE $where";
break;
}
$erg = [];
foreach($erlaubtevars as $k => $v) {
if(isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
/** @noinspection PhpUnused */
public function VersandartenEdit(): void
{
$id = (int)$this->app->Secure->GetGET('id');
$submit = $this->app->Secure->GetPOST('speichern');
if (!$id)
return;
$this->app->erp->MenuEintrag('index.php?module=versandarten&action=edit&id='.$id,'Details');
$this->app->erp->MenuEintrag('index.php?module=versandarten&action=list','Zurück zur Übersicht');
$error = [];
if($submit != '') { // handle form submit
$form = $this->GetInput();
$obj = $this->loadModule($form['modul'], $id);
/* if ($obj === null)
$error[] = sprintf('Versandart "%s" existiert nicht.', $form['selmodul']); */
if(trim($form['bezeichnung']) == '')
$error[] = 'Bitte eine Bezeichnung angeben!';
if(trim($form['type']) == '')
$error[] = 'Bitte einen Typ angeben!';
$projektId = 0;
if(!empty($form['projekt'])){
$projektId = $this->app->DB->Select(
"SELECT `id` FROM `projekt` WHERE `abkuerzung` = '{$form['projekt']}' LIMIT 1"
);
}
if ($this->app->DB->Select(
"SELECT `id` FROM `versandarten` WHERE `type` = '{$form['type']}' AND `id` <> $id LIMIT 1"
))
$error[] = 'Typ ist bereits für eine andere Versandart vergeben';
if ($obj !== null) {
foreach ($obj->AdditionalSettings() as $k => $v) {
$form[$k] = $this->app->Secure->GetPOST($k);
}
$error = array_merge($error, $obj->ValidateSettings($form));
foreach ($obj->AdditionalSettings() as $k => $v) {
$json[$k] = $form[$k];
}
}
$json = json_encode($json ?? null);
foreach ($error as $e) {
$this->app->Tpl->addMessage('error', $e);
}
if (empty($error)) {
$this->app->DB->Update(
"UPDATE `versandarten`
SET `bezeichnung`='{$form['bezeichnung']}', `type` ='{$form['type']}',
`projekt`=$projektId, `aktiv`={$form['aktiv']}, `modul`='{$form['modul']}',
`export_drucker` = {$form['export_drucker']},
`paketmarke_drucker` = {$form['paketmarke_drucker']},
`ausprojekt` = {$form['ausprojekt']}, `versandmail` = {$form['versandmail']},
`geschaeftsbrief_vorlage` = {$form['geschaeftsbrief_vorlage']},
`keinportocheck`={$form['keinportocheck']},
einstellungen_json='$json'
WHERE `id` = $id LIMIT 1"
);
$this->app->Tpl->Set('MESSAGE', '');
$this->app->Tpl->addMessage('success', "Die Daten wurden erfolgreich gespeichert!");
}
}
$daten = $this->app->DB->SelectRow("SELECT * FROM `versandarten` WHERE `id` = $id LIMIT 1");
if (empty($daten))
$this->app->Location->execute('index.php?module=versandarten&action=list');
$this->app->erp->Headlines('', $daten['bezeichnung']);
$this->app->Tpl->Set('AKTMODUL', $daten['modul']);
$obj = $this->loadModule($daten['modul'], $daten['id']);
if (empty($error) || !isset($form)) { //overwrite form data from database if no validation error is present
$form = json_decode($daten['einstellungen_json'],true);
$form['bezeichnung'] = $daten['bezeichnung'];
$form['type'] = $daten['type'];
$form['projekt'] = $this->app->erp->Projektdaten($daten['projekt'], 'abkuerzung');
$form['aktiv'] = $daten['aktiv'];
$form['keinportocheck'] = $daten['keinportocheck'];
$form['modul'] = $daten['modul'];
$form['export_drucker'] = $daten['export_drucker'];
$form['paketmarke_drucker'] = $daten['paketmarke_drucker'];
}
$obj?->RenderAdditionalSettings('MODULESETTINGS', $form);
$this->app->Tpl->addSelect('EXPORT_DRUCKER', 'export_drucker', 'export_drucker',
$this->getPrinterByModule($obj, false), $form['export_drucker']);
$this->app->Tpl->addSelect('PAKETMARKE_DRUCKER', 'paketmarke_drucker', 'paketmarke_drucker',
$this->getPrinterByModule($obj), $form['paketmarke_drucker']);
$this->app->YUI->HideFormular('versandmail', array('0'=>'versandbetreff','1'=>'dummy'));
$this->app->Tpl->addSelect('SELVERSANDMAIL', 'versandmail', 'versandmail', [
0 => 'Standardverhalten',
-1 => 'Keine Versandmail',
1 => 'Eigene Textvorlage'
], $daten['versandmail']);
$geschaeftsbrief_vorlagen = $this->app->DB->SelectPairs(
"SELECT gv.id, CONCAT_WS(' - ', gv.subjekt, p.abkuerzung) as val
FROM `geschaeftsbrief_vorlagen` AS `gv`
LEFT JOIN `projekt` AS `p` ON gv.projekt = p.id
ORDER by gv.subjekt"
);
$this->app->Tpl->addSelect('SELGESCHAEFTSBRIEF_VORLAGE', 'geschaeftsbrief_vorlage',
'geschaeftsbrief_vorlage', $geschaeftsbrief_vorlagen, $daten['geschaeftsbrief_vorlage']);
$this->app->Tpl->addSelect('SELMODUL', 'modul', 'modul',
$this->VersandartenSelModul(true), $form['modul']);
$this->app->Tpl->Set('BEZEICHNUNG', $form['bezeichnung']);
$this->app->Tpl->Set('TYPE', $form['type']);
$this->app->Tpl->Set('PROJEKT', $form['projekt']);
$this->app->YUI->AutoComplete('projekt', 'projektname', 1);
if($form['aktiv']) $this->app->Tpl->Set('AKTIV', 'checked');
if($form['keinportocheck']) $this->app->Tpl->Set('KEINPORTOCHECK', 'checked');
if ($obj->Beta ?? false)
$this->app->Tpl->addMessage('warning','Dieses Modul ist noch im Beta Stadium');
$this->app->Tpl->Parse('PAGE', 'versandarten_edit.tpl');
}
protected function getPrinterByModule(?Versanddienstleister $obj, bool $includeLabelPrinter = true): array
{
$printer = $this->app->erp->GetDrucker();
if ($includeLabelPrinter && $obj?->isEtikettenDrucker()) {
$labelPrinter = $this->app->erp->GetEtikettendrucker();
$printer = array_merge($printer ?? [], $labelPrinter ?? []);
}
natcasesort($printer);
return $printer;
}
/**
* @param string $shippingModule
*
* @return array
*/
protected function getVuePrinterOptions(string $shippingModule = ''): array
{
try{
$obj = $this->loadModule($shippingModule);
return VueUtil::keyValueArrayToVueOptions($this->getPrinterByModule($obj));
}
catch(Exception) {
return [];
}
}
public function getVueExportPrinterOptions(): array
{
$printer = $this->app->erp->GetDrucker();
try{
return VueUtil::keyValueArrayToVueOptions($printer ?? []);
}
catch(Exception) {
return [];
}
}
public function getVueProjects(): array
{
$projects = array_merge(
[ 0 => '', ],
$this->app->DB->SelectPairs(
"SELECT p.id, p.abkuerzung
FROM `projekt` AS `p`
WHERE p.geloescht = 0 {$this->app->erp->ProjektRechte()}
ORDER BY p.abkuerzung"
)
);
try{
return VueUtil::keyValueArrayToVueOptions($projects);
}
catch(Exception) {
return [];
}
}
/**
* @var string $shippingModule
* @var string $shippingModuleName
* @var null|array $requiredForSubmit
*
* @return JsonResponse
*/
public function getStep2Page(string $shippingModule, string $shippingModuleName, ?array $requiredForSubmit = null): JsonResponse
{
if($requiredForSubmit === null) {
$requiredForSubmit = $this->app->Secure->POST;
$requiredForSubmit['step'] = 2;
}
$page = [
'type' => 'form',
'submitType' => 'submit',
'icon'=> 'password-icon',
'headline' => $shippingModuleName,
'subHeadline' => 'Welche Drucker möchtest Du nutzen?',
'submitUrl' => 'index.php?module=versandarten&action=create&cmd=saveAssistant&shippingmodule='.
$shippingModule,
'form' => $this->getFeatureForm($shippingModule),
'ctaButtons' => [
[
'title' => 'Weiter',
'type' => 'submit',
'action' => 'submit',
],
]
];
return new JsonResponse(
[
'page' => $page,
'dataRequiredForSubmit' => $requiredForSubmit,
]
);
}
public function getFeatureForm(string $shippingModule): array
{
return [
[
'id' => 0,
'name' => 'projectGroup',
'inputs' => [
[
'label' => 'Projekt Filter',
'type' => 'select',
'name' => 'projekt',
'validation' => false,
'options' => $this->getVueProjects(),
],
],
],
[
'id' => 1,
'name' => 'printerGroup',
'inputs' => [
[
'label' => 'Drucker',
'type' => 'select',
'name' => 'paketmarke_drucker',
'validation' => false,
'options' => $this->getVuePrinterOptions($shippingModule),
],
],
],
[
'id' => 2,
'name' => 'exportprinterGroup',
'inputs' => [
[
'label' => 'Export-Drucker',
'type' => 'select',
'name' => 'export_drucker',
'validation' => false,
'options' => $this->getVueExportPrinterOptions(),
],
],
],
];
}
/** @noinspection PhpUnused */
public function VersandartenDelete(): void
{
$id = (int)$this->app->Secure->GetGET('id');
$this->app->DB->Delete("DELETE FROM `versandarten` WHERE `id` = $id LIMIT 1");
$msg = $this->app->erp->base64_url_encode("Die Versandart wurde gelöscht!
");
$this->app->Location->execute("index.php?module=versandarten&action=list&msg=$msg");
}
public function getApps(): ?array
{
$module = [];
$modularr = $this->VersandartenSelModul();
foreach($modularr as $k => $v) {
$module['installiert'][$k] = [
'md5'=>md5($v),
'Bezeichnung'=>$v,
'key'=> $k,
'Icon'=>'Icons_dunkel_9.gif'
];
}
if(!empty($module['installiert']) && count($module['installiert']) > 0) {
$sort = null;
foreach($module['installiert'] as $k => $v) {
$sort[$k] = $v['Bezeichnung'];
}
array_multisort($sort, SORT_ASC, $module['installiert']);
}
return $module;
}
public function getVueShippingMethodSuccessPage(int $shippingMethodId): JsonResponse
{
$successpage = [
'type' => 'defaultPage',
'icon' => 'add-person-icon',
'headline'=> 'Versandart angelegt',
'subHeadline'=> 'Die Versandart wurde angelegt',
'ctaButtons' => [
[
'title' => 'Klasse',
'action' => 'close',
'link' => 'index.php?module=versandarten&action=edit&id='.$shippingMethodId
]
]
];
return new JsonResponse(
['page'=>$successpage]
);
}
/**
* @return JsonResponse
*/
public function HandleGetAssistantAjaxAction(): JsonResponse
{
$module = $this->app->Secure->GetPOST('shippingmodule');
$obj = $this->loadModule($module);
if($obj === null || !method_exists($obj, 'getCreateForm')) {
return new JsonResponse(['location' => 'index.php?module=versandarten&action=create&auswahl='.$module]);
}
$form = $obj->getCreateForm();
if(!empty($form)) {
$form[(count($form)) - 1]['link'] = [
'link' => 'index.php?module=versandarten&action=create&auswahl=' . $module,
'title' => 'Expertenmodus',
];
}
$name = ucfirst(substr($module, 13));
if(method_exists($obj, 'GetBezeichnung')){
$name = $obj->GetBezeichnung();
}
$page = [
'type' => 'form',
'dataRequiredForSubmit' =>
[
'shippingmodule' => $module,
'id' => 'NEW',
],
'submitType' => 'submit',
'icon'=> 'password-icon',
'headline' => $name,
'subHeadline' => method_exists($obj, 'getClickByClickHeadline')
?$obj->getClickByClickHeadline():'Bitte Zugangsdaten eingeben',
'submitUrl' => 'index.php?module=versandarten&action=create&cmd=saveAssistant&shippingmodule='.$module,
'form' => $form,
'ctaButtons' => [
[
'title' => 'Weiter',
'type' => 'submit',
'action' => 'submit',
],
]
];
$ret = [
'pages'=>
[
$page
],
];
return new JsonResponse($ret);
}
/**
* @return JsonResponse
*/
public function HandleSaveAssistantAjaxAction(): JsonResponse
{
$data = ['error' => 'Unknown error'];
$shippingMethodId = $this->app->Secure->GetPOST('id','','',true);
$step = (int)$this->app->Secure->GetPOST('step');
$shippingModule = $this->app->Secure->GetGET('shippingmodule');
if(empty($shippingModule)) {
$shippingModule = $this->app->Secure->GetPOST('shippingmodule');
}
if($shippingMethodId === 'NEW') {
$postData = $this->app->Secure->POST;
/** @var Versanddienstleister $obj */
$obj = $this->loadModule($shippingModule);
if($obj !== null && method_exists($obj, 'AuthByAssistent')){
$json = $obj->AuthByAssistent();
if($json instanceof JsonResponse){
return $json;
}
}
if($obj !== null && method_exists($obj, 'updatePostDataForAssistent')) {
$postData = $obj->updatePostDataForAssistent($postData);
}
if($step < 2) {
$shippingModuleName = $shippingModule;
if(str_starts_with($shippingModuleName, 'versandarten_')) {
$shippingModuleName = substr($shippingModuleName, 13);
}
$shippingModuleName = str_replace('_', ' ', ucfirst($shippingModuleName));
if($obj !== null && method_exists($obj, 'GetBezeichnung')) {
$shippingModuleName = $obj->GetBezeichnung();
}
$postData['step'] = 2;
return $this->getStep2Page($shippingModule, $shippingModuleName, $postData);
}
$printer = (int)$this->app->Secure->GetPOST('paketmarke_drucker');
$exportPrinter = (int)$this->app->Secure->GetPOST('export_drucker');
$projektId = (int)$this->app->Secure->GetPOST('projekt');
$createShippingResult = $this->createShippingMethodFromModuleName($shippingModule);
if(!empty($createShippingResult['id'])) {
$shippingMethodId = $createShippingResult['id'];
if(method_exists($obj, 'getStructureDataForClickByClickSave')) {
$structureData = $obj->getStructureDataForClickByClickSave();
if(!empty($structureData)) {
$this->saveCreateData($shippingMethodId, $structureData);
}
}
$this->saveCreateData($shippingMethodId, $postData);
$this->app->DB->UpdateArr(
'versandarten',
$shippingMethodId,
'id',
[
'paketmarke_drucker' => $printer,
'export_drucker' => $exportPrinter,
'projekt' => $projektId,
], true
);
}
elseif(!empty($createShippingResult['error'])) {
return new JsonResponse($createShippingResult, Response::HTTP_BAD_REQUEST);
}
}
if((int)$shippingMethodId > 0) {
return $this->getVueShippingMethodSuccessPage((int)$shippingMethodId);
}
return new JsonResponse($data, Response::HTTP_BAD_REQUEST);
}
/**
* @param int $shippingMethodId
* @param null|array $post
*/
public function saveCreateData(int $shippingMethodId, ?array $post = null): void
{
$shippingMethod = $this->app->DB->SelectRow(
sprintf('SELECT * FROM `versandarten` WHERE `id` = %d', $shippingMethodId)
);
/** @var Versanddienstleister $obj */
$obj = $this->loadModule($shippingMethod['modul'], $shippingMethodId);
if($obj === null) {
return;
}
$form = $obj->getCreateForm();
$data = json_decode($shippingMethod['einstellungen_json'], true);
if(empty($data) || !is_array($data)) {
$data = [];
}
if($post === null) {
try {
$vueFields = VueUtil::getInputNamesFromVuePages($form);
}
catch(Exception) {
$vueFields = [];
}
foreach($vueFields as $input) {
$post[$input] = !isset($this->app->Secure->POST[$input])
?null:$this->app->Secure->POST[$input];
}
}
if(empty($post)) {
return;
}
foreach($post as $key => $value) {
$data[$key] = $value;
}
$this->app->DB->Update(
sprintf(
"UPDATE `versandarten` SET `einstellungen_json` = '%s' WHERE `id` = %d",
$this->app->DB->real_escape_string(json_encode($data)), $shippingMethodId
)
);
}
/**
* @param string $shippingMethodModule
*
* @return array
*/
public function createShippingMethodFromModuleName(string $shippingMethodModule): array
{
$obj = $this->loadModule($shippingMethodModule);
if ($obj === null)
return ['success' => false, 'error' => 'Modul nicht vorhanden'];
$name = $obj->name ?? ucfirst($shippingMethodModule);
$type = $shippingMethodModule;
$i = 1;
$originalName = $name;
while(
$this->app->DB->Select(
sprintf(
"SELECT `id` FROM `versandarten` WHERE `type` = '%s' OR `bezeichnung` = '%s' LIMIT 1",
$this->app->DB->real_escape_string($type), $this->app->DB->real_escape_string($name)
)
)
) {
$i++;
$type = $shippingMethodModule.'_'.$i;
$name = $originalName.' '.$i;
}
$versandmail = 0;
if($shippingMethodModule === 'versandarten_selbstabholer'){
$versandmail = 1;
}
$this->app->DB->Insert(
"INSERT INTO `versandarten`
(`bezeichnung`, `type`,`aktiv`, `geloescht`, `modul`,`ausprojekt`, `versandmail`, `einstellungen_json`)
VALUES ('$name','$type','1','0','$shippingMethodModule','0', $versandmail,'')"
);
$id = $this->app->DB->GetInsertID();
$this->app->erp->RunHook('versandarten_create', 1, $id);
return ['id'=>$id];
}
/**
* @return JsonResponse|void
* @noinspection PhpUnused
*/
public function VersandartenCreate()
{
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'getAssistant') {
return $this->HandleGetAssistantAjaxAction();
}
if($cmd === 'saveAssistant') {
return $this->HandleSaveAssistantAjaxAction();
}
$modulelist = $this->VersandartenSelModul(true);
$auswahlmodul = $this->app->Secure->GetGET('auswahl');
if($auswahlmodul && isset($modulelist[$auswahlmodul])) {
$ret = $this->createShippingMethodFromModuleName($auswahlmodul);
if(!empty($ret['id'])) {
$this->app->Location->execute('index.php?module=versandarten&action=edit&id='.$ret['id']);
}
$this->app->Location->execute('index.php?module=versandarten&action=create');
}
/** @var Appstore $appstore */
$appstore = $this->app->loadModule('appstore');
$modulelist = $this->GetApps();
$appstore->AddModuleHtml(
$modulelist, '', 'index.php?module=versandarten&action=create&get='
);
$this->app->ModuleScriptCache->IncludeWidgetNew('ClickByClickAssistant');
$this->app->Tpl->Parse('PAGE', 'versandarten_neu.tpl');
}
/**
* @return array
*/
public function GetInput(): array
{
$input = [];
$input['bezeichnung'] = $this->app->Secure->GetPOST('bezeichnung');
$input['type'] = $this->app->Secure->GetPOST('type');
$input['projekt'] = $this->app->Secure->GetPOST('projekt');
$input['modul'] = $this->app->Secure->GetPOST('modul');
$input['aktiv'] = (int)$this->app->Secure->GetPOST('aktiv');
$input['keinportocheck'] = (int)$this->app->Secure->GetPOST('keinportocheck');
$input['ausprojekt'] = (int)$this->app->Secure->GetPOST('ausprojekt');
$input['export_drucker'] = (int)$this->app->Secure->GetPOST('export_drucker');
$input['paketmarke_drucker'] = (int)$this->app->Secure->GetPOST('paketmarke_drucker');
$input['geschaeftsbrief_vorlage'] = (int)$this->app->Secure->GetPOST('geschaeftsbrief_vorlage');
$input['versandmail'] = (int)$this->app->Secure->GetPOST('versandmail');
return $input;
}
/**
* @param string $module
* @param int $moduleId
*
* @return ?Versanddienstleister
*/
public function loadModule(string $module, int $moduleId = 0) : ?Versanddienstleister
{
if(str_starts_with($module, 'versandarten_')) {
$module = substr($module, 13);
}
if(empty($module)) {
return null;
}
if(str_contains($module, '.') || str_contains($module, '/') || str_contains($module, '\\')) {
return null;
}
$path = dirname(__DIR__).'/lib/versandarten/'.$module.'.php';
if(!is_file($path)) {
return null;
}
include_once $path ;
$classname = 'Versandart_'.$module;
if(!class_exists($classname)) {
return null;
}
return new $classname($this->app, $moduleId);
}
/**
* Retrieve all Versandarten from lib/versandarten/
* @return array
*/
function VersandartenSelModul(bool $addEmpty = false) : array
{
$result = [];
if ($addEmpty)
$result[''] = '';
$pfad = dirname(__DIR__).'/lib/versandarten';
if(!is_dir($pfad))
return $result;
$handle = opendir($pfad);
$files = [];
if($handle) {
while (($file = readdir($handle)) !== false) {
$files[] = $file;
}
}
closedir($handle);
foreach($files as $file) {
if(str_starts_with($file, '.') || !str_ends_with($file, '.php') || !is_file($pfad.'/'.$file)
|| str_ends_with($file, '.src.php'))
continue;
$modul = str_replace('.php','',$file);
if(str_ends_with($modul, '_custom')
&& !$this->app->DB->Select(
"SELECT `id` FROM `versandarten` WHERE `modul` = '".$this->app->DB->real_escape_string($modul)."' LIMIT 1"
)
)
continue;
if($modul == '' || $modul=='rocketshipit')
continue;
$obj = $this->loadModule($modul);
if ($obj === null)
continue;
$result[$modul] = $obj->name ?? ucfirst($modul);
unset($obj);
}
return $result;
}
}