@saltcorn/server 1.1.3-beta.8 → 1.1.3-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/auth/admin.js +2 -0
- package/auth/resetpw.js +37 -9
- package/auth/roleadmin.js +52 -0
- package/auth/routes.js +9 -2
- package/docs/assets/search.js +1 -1
- package/docs/classes/_saltcorn_common_code.Relation.html +8 -8
- package/docs/classes/_saltcorn_common_code.RelationsFinder.html +5 -5
- package/docs/classes/_saltcorn_data.models.Crash-1.html +18 -18
- package/docs/classes/_saltcorn_data.models.EventLog-1.html +19 -19
- package/docs/classes/_saltcorn_data.models.Field.html +71 -71
- package/docs/classes/_saltcorn_data.models.FieldRepeat-1.html +17 -17
- package/docs/classes/_saltcorn_data.models.File-1.html +48 -48
- package/docs/classes/_saltcorn_data.models.Form-1.html +38 -38
- package/docs/classes/_saltcorn_data.models.Library.html +13 -13
- package/docs/classes/_saltcorn_data.models.Page.html +23 -23
- package/docs/classes/_saltcorn_data.models.PageGroup-1.html +25 -25
- package/docs/classes/_saltcorn_data.models.Plugin.html +25 -25
- package/docs/classes/_saltcorn_data.models.Role.html +9 -9
- package/docs/classes/_saltcorn_data.models.Table-1.html +90 -90
- package/docs/classes/_saltcorn_data.models.TableConstraint-1.html +14 -14
- package/docs/classes/_saltcorn_data.models.Trigger.html +34 -34
- package/docs/classes/_saltcorn_data.models.User-1.html +63 -48
- package/docs/classes/_saltcorn_data.models.View-1.html +51 -51
- package/docs/classes/_saltcorn_data.models.Workflow-1.html +17 -17
- package/docs/classes/_saltcorn_data.models.WorkflowRun.html +35 -35
- package/docs/classes/_saltcorn_data.models.WorkflowStep.html +25 -25
- package/docs/classes/_saltcorn_data.models.WorkflowTrace.html +18 -18
- package/docs/classes/_saltcorn_mobile_builder.MobileBuilder.html +36 -43
- package/docs/enums/_saltcorn_common_code.RelationType.html +7 -7
- package/docs/enums/_saltcorn_common_code.ViewDisplayType.html +4 -4
- package/docs/functions/_saltcorn_admin_models.backup.create_backup.html +1 -1
- package/docs/functions/_saltcorn_admin_models.backup.create_csv_from_rows.html +1 -1
- package/docs/functions/_saltcorn_admin_models.backup.restore.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.add_to_menu.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.can_install_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.fetch_available_packs.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.fetch_pack_by_name.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.install_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.library_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.model_instance_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.model_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.page_group_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.page_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.plugin_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.role_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.table_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.trigger_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.uninstall_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.view_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.copy_tenant_template.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.create_tenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.deleteTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.domain_sanitize.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.eachTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.getAllTenantRows.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.getAllTenants.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.insertTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.switchToTenant.html +1 -1
- package/docs/functions/_saltcorn_common_code.buildTableCaches.html +1 -1
- package/docs/functions/_saltcorn_common_code.parseLegacyRelation.html +1 -1
- package/docs/functions/_saltcorn_common_code.parseRelationPath.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.check_email_mask.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.deleteConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.getAllConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.getConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.get_base_url.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.get_latest_npm_version.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.remove_from_menu.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.save_menu_items.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.setConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.discover_tables.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.discoverable_tables.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.findType.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.get_existing_views.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.implement_discovery.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.getMailTransport.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.send_verification_email.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.viewToEmailHtml.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields_stored.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.eval_expression.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.expressionValidator.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.get_async_expression_function.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.get_expression_function.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.jsexprToWhere.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.recalculate_for_stored.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.transform_for_async.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.eachView.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.getStringsForI18n.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.getViews.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.translateLayout.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.traverse.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.traverseSync.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.all_views.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.fill_table_row.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.initial_view.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.random_table.html +1 -1
- package/docs/functions/_saltcorn_db_common.buildInsertBulkSql.html +1 -1
- package/docs/functions/_saltcorn_db_common.buildInsertSql.html +1 -1
- package/docs/functions/_saltcorn_db_common.doCount.html +1 -1
- package/docs/functions/_saltcorn_db_common.doDeleteWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListScTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.do_add_index.html +1 -1
- package/docs/functions/_saltcorn_db_common.do_drop_index.html +1 -1
- package/docs/functions/_saltcorn_db_common.ftsFieldsSqlExpr.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkSelectOptions.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkVal.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.enable_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.getTenantSchema.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.init.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.is_it_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.runWithTenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.orderByIsObject.html +1 -1
- package/docs/functions/_saltcorn_db_common.orderByIsOperator.html +1 -1
- package/docs/functions/_saltcorn_db_common.prefixFieldsInWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.reprAsJson.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.enable_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.getTenantSchema.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.init.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.is_it_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.runWithTenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlBinOp.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlFun.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlsanitize.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlsanitizeAllowDots.html +1 -1
- package/docs/functions/_saltcorn_db_common.subSelectWhere.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidFeatures.html +95 -0
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidPermissions.html +95 -0
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.buildTablesFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyPrepopulatedDb.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyServerFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyShareExtFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copySiteLogo.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyTranslationFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.createSqliteDb.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.decodeProvisioningProfile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.extractDomain.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.generateAndroidVersionCode.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyAndroidManifest.html +6 -6
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyConfigXml.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyGradleConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyInfoPlist.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyXcodeProjectFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepAppIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareAppIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareBuildDir.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareExportOptionsPlist.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashPage.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCapacitorConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCfgFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeDataExtractionRules.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeNetworkSecurityConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePodfile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePrivacyInfo.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundleMobileAppCode.html +2 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundlePackagesAndPlugins.html +2 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyMobileAppDirs.html +74 -0
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyPublicDirs.html +2 -1
- package/docs/functions/_saltcorn_sqlite.add_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite.add_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite.begin.html +1 -1
- package/docs/functions/_saltcorn_sqlite.changeConnection.html +1 -1
- package/docs/functions/_saltcorn_sqlite.close.html +1 -1
- package/docs/functions/_saltcorn_sqlite.commit.html +1 -1
- package/docs/functions/_saltcorn_sqlite.count.html +1 -1
- package/docs/functions/_saltcorn_sqlite.deleteWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite.dropTable.html +1 -1
- package/docs/functions/_saltcorn_sqlite.dropTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_reset_schema.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite.getVersion.html +1 -1
- package/docs/functions/_saltcorn_sqlite.get_db_filepath.html +1 -1
- package/docs/functions/_saltcorn_sqlite.get_sql_logging.html +1 -1
- package/docs/functions/_saltcorn_sqlite.init.html +1 -1
- package/docs/functions/_saltcorn_sqlite.insert.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listScTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.query.html +1 -1
- package/docs/functions/_saltcorn_sqlite.rollback.html +1 -1
- package/docs/functions/_saltcorn_sqlite.select.html +1 -1
- package/docs/functions/_saltcorn_sqlite.selectMaybeOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite.selectOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite.set_sql_logging.html +1 -1
- package/docs/functions/_saltcorn_sqlite.slugify.html +1 -1
- package/docs/functions/_saltcorn_sqlite.sql_log.html +1 -1
- package/docs/functions/_saltcorn_sqlite.update.html +1 -1
- package/docs/functions/_saltcorn_sqlite.updateWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.add_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.add_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.count.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.deleteWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_reset_schema.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.init.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.insert.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.insertRows.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listScTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.query.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.select.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.selectMaybeOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.selectOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.setConnectionObject.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.tableExists.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.time.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.update.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_field.instanceOfField.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_page.instanceOfPage.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_view.instanceOfView.html +1 -1
- package/docs/functions/_saltcorn_types.Types.base_types.instanceOWithHtmlFile.html +2 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfErrorMsg.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfSuccessMsg.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfType.html +1 -1
- package/docs/functions/_saltcorn_types.generators.generateBool.html +1 -1
- package/docs/functions/_saltcorn_types.generators.generateString.html +1 -1
- package/docs/functions/_saltcorn_types.generators.num_between.html +1 -1
- package/docs/functions/_saltcorn_types.generators.oneOf.html +1 -1
- package/docs/interfaces/_saltcorn_mobile_builder.common_build_utils.ScCapacitorConfig.html +13 -11
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractField.html +14 -14
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractFieldRepeat.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_form.AbstractForm.html +26 -26
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_page.AbstractPage.html +7 -7
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_role.AbstractRole.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_table.AbstractTable.html +7 -7
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_trigger.AbstractTrigger.html +16 -16
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_view.AbstractView.html +10 -10
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_workflow.AbstractWorkflow.html +13 -13
- package/docs/modules/_saltcorn_admin_models.backup.html +1 -1
- package/docs/modules/_saltcorn_admin_models.html +1 -1
- package/docs/modules/_saltcorn_admin_models.pack.html +1 -1
- package/docs/modules/_saltcorn_admin_models.tenant.html +1 -1
- package/docs/modules/_saltcorn_common_code.html +1 -1
- package/docs/modules/_saltcorn_data.html +3 -3
- package/docs/modules/_saltcorn_data.models.Crash.html +2 -2
- package/docs/modules/_saltcorn_data.models.EventLog.html +2 -2
- package/docs/modules/_saltcorn_data.models.FieldRepeat.html +2 -2
- package/docs/modules/_saltcorn_data.models.File.html +2 -2
- package/docs/modules/_saltcorn_data.models.Form.html +2 -2
- package/docs/modules/_saltcorn_data.models.PageGroup.html +2 -2
- package/docs/modules/_saltcorn_data.models.Table.html +2 -2
- package/docs/modules/_saltcorn_data.models.TableConstraint.html +2 -2
- package/docs/modules/_saltcorn_data.models.User.html +2 -2
- package/docs/modules/_saltcorn_data.models.View.html +2 -2
- package/docs/modules/_saltcorn_data.models.Workflow.html +2 -2
- package/docs/modules/_saltcorn_data.models.config.html +1 -1
- package/docs/modules/_saltcorn_data.models.discovery.html +1 -1
- package/docs/modules/_saltcorn_data.models.email.html +1 -1
- package/docs/modules/_saltcorn_data.models.expression.html +1 -1
- package/docs/modules/_saltcorn_data.models.html +1 -1
- package/docs/modules/_saltcorn_data.models.layout.html +1 -1
- package/docs/modules/_saltcorn_data.models.random.html +1 -1
- package/docs/modules/_saltcorn_data.models.scheduler.html +1 -1
- package/docs/modules/_saltcorn_data.plugin_helper.html +1 -1
- package/docs/modules/_saltcorn_data.utils.html +1 -1
- package/docs/modules/_saltcorn_db_common.html +2 -2
- package/docs/modules/_saltcorn_db_common.multi_tenant.html +1 -1
- package/docs/modules/_saltcorn_db_common.single_tenant.html +1 -1
- package/docs/modules/_saltcorn_markup.html +2 -2
- package/docs/modules/_saltcorn_mobile_builder.common_build_utils.html +6 -2
- package/docs/modules/_saltcorn_mobile_builder.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.package_bundle_utils.html +3 -1
- package/docs/modules/_saltcorn_sqlite.html +1 -1
- package/docs/modules/_saltcorn_sqlite_mobile.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_field.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_form.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_library.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_page.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_plugin.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_role.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_table.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_trigger.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_view.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_workflow.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.html +1 -1
- package/docs/modules/_saltcorn_types.Types.base_types.html +3 -1
- package/docs/modules/_saltcorn_types.Types.common_types.html +1 -1
- package/docs/modules/_saltcorn_types.Types.html +1 -1
- package/docs/modules/_saltcorn_types.generators.html +1 -1
- package/docs/modules/_saltcorn_types.html +1 -1
- package/docs/types/_saltcorn_data.models.Crash.CrashCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.EventLog.EventLogCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.FieldRepeat.FieldRepeatCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.File.FileCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.Form.AdditionalButton.html +1 -1
- package/docs/types/_saltcorn_data.models.Form.FormCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.PageGroup.ScreenInfoParams.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.ChildRelations.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.ParentRelations.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.RelationData.html +1 -1
- package/docs/types/_saltcorn_data.models.TableConstraint.TableConstraintCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.User.UserCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.View.FindViewsPred.html +1 -1
- package/docs/types/_saltcorn_data.models.Workflow.WorkflowCfg.html +1 -1
- package/docs/types/_saltcorn_db_common.AggregationOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.CoordOpts.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinField.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinFields.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.JsonPath.html +1 -1
- package/docs/types/_saltcorn_db_common.JsonPathElem.html +1 -1
- package/docs/types/_saltcorn_db_common.Operator.html +1 -1
- package/docs/types/_saltcorn_db_common.PrimaryKeyValue.html +1 -1
- package/docs/types/_saltcorn_db_common.Row.html +1 -1
- package/docs/types/_saltcorn_db_common.SelectOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.SqlAndValues.html +1 -1
- package/docs/types/_saltcorn_db_common.SubselectOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.Value.html +1 -1
- package/docs/types/_saltcorn_db_common.Where.html +1 -1
- package/docs/types/_saltcorn_mobile_builder.IosCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.FieldCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.InputType.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_form.AdditionalButton.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PageCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PagePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RoleCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RolePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TableCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TablePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.ConfigWorkflowStep.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.RunResult.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Action.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.AuthenticationMethod.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.CapacitorPlugin.html +110 -0
- package/docs/types/_saltcorn_types.Types.base_types.CodePagePack.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Column.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ConnectedObjects.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.CopilotSkill.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldLike.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldView.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Header.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.JoinFieldOption.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Layout.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.MobileConfig.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ModelPattern.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Pack.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Plugin.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginFunction.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginLayout.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginRoute.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginSourceType.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginType.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrap.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrapArg.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RelationOption.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Req.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Res.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RouteAction.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RunExtra.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableProvider.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableQuery.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Tablely.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ViewTemplate.html +2 -1
- package/docs/types/_saltcorn_types.Types.common_types.ErrorMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.GenObj.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ReqRes.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ResultMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.SuccessMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.Type.html +1 -1
- package/docs/variables/_saltcorn_data.db.html +1 -1
- package/docs/variables/_saltcorn_data.migrations.html +1 -1
- package/docs/variables/_saltcorn_data.models.config.available_languages.html +1 -1
- package/docs/variables/_saltcorn_data.models.config.configTypes.html +1 -1
- package/docs/variables/_saltcorn_data.models.scheduler.runScheduler.html +1 -1
- package/docs/variables/_saltcorn_data.plugin_helper.run_action_column.html +1 -1
- package/docs/variables/_saltcorn_data.utils.NotAuthorized.html +1 -1
- package/docs/variables/_saltcorn_data.utils.sleep.html +1 -1
- package/docs/variables/_saltcorn_db_common.multi_tenant.tenantNamespace.html +1 -1
- package/locales/ar.json +22 -3
- package/locales/de.json +66 -45
- package/locales/en.json +14 -1
- package/locales/es.json +20 -1
- package/locales/fr.json +22 -3
- package/locales/hi.json +21 -2
- package/locales/pl.json +109 -80
- package/locales/pt.json +23 -4
- package/locales/ru.json +21 -2
- package/locales/si.json +23 -4
- package/locales/uk.json +23 -4
- package/locales/zh.json +20 -1
- package/markup/admin.js +13 -1
- package/package.json +9 -9
- package/public/saltcorn-common.js +57 -23
- package/routes/actions.js +5 -4
- package/routes/admin.js +45 -21
- package/routes/common_lists.js +29 -11
- package/routes/delete.js +1 -0
- package/routes/fields.js +2 -0
- package/routes/infoarch.js +1 -0
- package/routes/menu.js +1 -0
- package/routes/page_groupedit.js +1 -0
- package/routes/plugins.js +2 -0
- package/routes/registry.js +11 -7
- package/routes/scapi.js +39 -3
- package/routes/tables.js +1 -14
- package/routes/utils.js +2 -1
- package/tests/auth.test.js +41 -9
|
@@ -597,6 +597,7 @@ function get_form_record(e_in, select_labels) {
|
|
|
597
597
|
$(e_in).prop("data-join-values", {});
|
|
598
598
|
const keyVals = {};
|
|
599
599
|
for (const { ref, target, refTable } of joinFields) {
|
|
600
|
+
if (!rec[ref]) continue;
|
|
600
601
|
keyVals[ref] = rec[ref];
|
|
601
602
|
$.ajax(`/api/${refTable}?id=${rec[ref]}`, {
|
|
602
603
|
success: (val) => {
|
|
@@ -913,6 +914,29 @@ function doMobileTransforms() {
|
|
|
913
914
|
);
|
|
914
915
|
}
|
|
915
916
|
|
|
917
|
+
function validate_expression_elem(target) {
|
|
918
|
+
const next = target.next();
|
|
919
|
+
if (next.hasClass("expr-error")) next.remove();
|
|
920
|
+
const val = target.val();
|
|
921
|
+
if (target.hasClass("validate-expression-conditional")) {
|
|
922
|
+
const box = target
|
|
923
|
+
.closest(".form-namespace")
|
|
924
|
+
.find(`[name="${target.attr("name")}_formula"]`);
|
|
925
|
+
if (!box.prop("checked")) return;
|
|
926
|
+
}
|
|
927
|
+
if (!val) return;
|
|
928
|
+
try {
|
|
929
|
+
const AsyncFunction = Object.getPrototypeOf(
|
|
930
|
+
async function () {}
|
|
931
|
+
).constructor;
|
|
932
|
+
AsyncFunction("return " + val);
|
|
933
|
+
} catch (error) {
|
|
934
|
+
target.after(`<small class="text-danger font-monospace d-block expr-error">
|
|
935
|
+
${error.message}
|
|
936
|
+
</small>`);
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
|
|
916
940
|
function initialize_page() {
|
|
917
941
|
if (window._sc_locale && window.dayjs) dayjs.locale(window._sc_locale);
|
|
918
942
|
const isNode = getIsNode();
|
|
@@ -942,28 +966,6 @@ function initialize_page() {
|
|
|
942
966
|
validate_identifier_elem(target);
|
|
943
967
|
});
|
|
944
968
|
|
|
945
|
-
const validate_expression_elem = (target) => {
|
|
946
|
-
const next = target.next();
|
|
947
|
-
if (next.hasClass("expr-error")) next.remove();
|
|
948
|
-
const val = target.val();
|
|
949
|
-
if (target.hasClass("validate-expression-conditional")) {
|
|
950
|
-
const box = target
|
|
951
|
-
.closest(".form-namespace")
|
|
952
|
-
.find(`[name="${target.attr("name")}_formula"]`);
|
|
953
|
-
if (!box.prop("checked")) return;
|
|
954
|
-
}
|
|
955
|
-
if (!val) return;
|
|
956
|
-
try {
|
|
957
|
-
const AsyncFunction = Object.getPrototypeOf(
|
|
958
|
-
async function () {}
|
|
959
|
-
).constructor;
|
|
960
|
-
AsyncFunction("return " + val);
|
|
961
|
-
} catch (error) {
|
|
962
|
-
target.after(`<small class="text-danger font-monospace d-block expr-error">
|
|
963
|
-
${error.message}
|
|
964
|
-
</small>`);
|
|
965
|
-
}
|
|
966
|
-
};
|
|
967
969
|
$(".validate-expression").bind("input", function (e) {
|
|
968
970
|
const target = $(e.target);
|
|
969
971
|
validate_expression_elem(target);
|
|
@@ -1193,6 +1195,7 @@ function initialize_page() {
|
|
|
1193
1195
|
if (_sc_lightmode === "dark") cmOpts.theme = "blackboard";
|
|
1194
1196
|
const cm = CodeMirror.fromTextArea(el, cmOpts);
|
|
1195
1197
|
$(el).addClass("codemirror-enabled");
|
|
1198
|
+
if ($(el).hasClass("enlarge-in-card")) enlarge_in_code($(el), cm);
|
|
1196
1199
|
cm.on(
|
|
1197
1200
|
"change",
|
|
1198
1201
|
$.debounce(
|
|
@@ -1295,6 +1298,22 @@ function initialize_page() {
|
|
|
1295
1298
|
|
|
1296
1299
|
$(initialize_page);
|
|
1297
1300
|
|
|
1301
|
+
function enlarge_in_code($textarea, cm) {
|
|
1302
|
+
const $card = $textarea.closest("div.card");
|
|
1303
|
+
if (!$card.length) return;
|
|
1304
|
+
const cardTop = $card.position().top;
|
|
1305
|
+
const cardHeight = $card.height();
|
|
1306
|
+
const vh = $(window).height();
|
|
1307
|
+
const cmHeight = cm.getWrapperElement().offsetHeight;
|
|
1308
|
+
const newCardHeight = vh - cardTop - 35;
|
|
1309
|
+
if (newCardHeight > cardHeight) {
|
|
1310
|
+
const extending = newCardHeight - cardHeight;
|
|
1311
|
+
cm.setSize("100%", `${cmHeight + extending}px`);
|
|
1312
|
+
cm.refresh();
|
|
1313
|
+
$card.css("min-height", newCardHeight + "px");
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1298
1317
|
function cancel_inline_edit(e, opts1) {
|
|
1299
1318
|
var opts = JSON.parse(decodeURIComponent(opts1 || "") || "{}");
|
|
1300
1319
|
var form = $(e.target).closest("form");
|
|
@@ -1563,7 +1582,7 @@ function notifyAlert(note, spin) {
|
|
|
1563
1582
|
type = "info";
|
|
1564
1583
|
txt = JSON.stringify(note, null, 2);
|
|
1565
1584
|
}
|
|
1566
|
-
|
|
1585
|
+
|
|
1567
1586
|
const { id, html } = buildToast(txt, type, spin, note.toast_title);
|
|
1568
1587
|
let $modal = $("#scmodal");
|
|
1569
1588
|
if ($modal.length && $modal.hasClass("show"))
|
|
@@ -1750,6 +1769,21 @@ async function common_done(res, viewnameOrElem0, isWeb = true) {
|
|
|
1750
1769
|
}
|
|
1751
1770
|
}
|
|
1752
1771
|
|
|
1772
|
+
function editAllowedAuthByRole(id, event) {
|
|
1773
|
+
ajax_post_json(
|
|
1774
|
+
`/roleadmin/setrole_allowed_auth_methods/${id}`,
|
|
1775
|
+
{
|
|
1776
|
+
enabled: event.target.checked,
|
|
1777
|
+
method: event.target.value,
|
|
1778
|
+
},
|
|
1779
|
+
{
|
|
1780
|
+
complete() {
|
|
1781
|
+
location.reload();
|
|
1782
|
+
},
|
|
1783
|
+
}
|
|
1784
|
+
);
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1753
1787
|
function reloadEmbeddedEditOwnViews(form, id) {
|
|
1754
1788
|
form.find("div[sc-load-on-assign-id]").each(function () {
|
|
1755
1789
|
const $e = $(this);
|
package/routes/actions.js
CHANGED
|
@@ -1526,13 +1526,13 @@ router.get(
|
|
|
1526
1526
|
|
|
1527
1527
|
const wfTable = mkTable(
|
|
1528
1528
|
[
|
|
1529
|
-
{ label: "Trigger", key: (run) => trNames[run.trigger_id] },
|
|
1530
|
-
{ label: "Started", key: (run) => localeDateTime(run.started_at) },
|
|
1529
|
+
{ label: req.__("Trigger"), key: (run) => trNames[run.trigger_id] },
|
|
1530
|
+
{ label: req.__("Started"), key: (run) => localeDateTime(run.started_at) },
|
|
1531
1531
|
{
|
|
1532
|
-
label: "Updated",
|
|
1532
|
+
label: req.__("Updated"),
|
|
1533
1533
|
key: (run) => localeDateTime(run.status_updated_at),
|
|
1534
1534
|
},
|
|
1535
|
-
{ label: "Status", key: "status" },
|
|
1535
|
+
{ label: req.__("Status"), key: "status" },
|
|
1536
1536
|
{
|
|
1537
1537
|
label: "",
|
|
1538
1538
|
key: (run) => {
|
|
@@ -1743,6 +1743,7 @@ router.get(
|
|
|
1743
1743
|
const title = run.wait_info.output ? "Workflow output" : "Fill form";
|
|
1744
1744
|
res.sendWrap(title, renderForm(form, req.csrfToken()));
|
|
1745
1745
|
} catch (e) {
|
|
1746
|
+
console.error(e);
|
|
1746
1747
|
await run.markAsError(e, step, req.user);
|
|
1747
1748
|
const title = req.__("Error running workflow");
|
|
1748
1749
|
res.sendWrap(title, renderForm(e.message, req.csrfToken()));
|
package/routes/admin.js
CHANGED
|
@@ -307,7 +307,12 @@ router.get(
|
|
|
307
307
|
.replace(/^(\.\.(\/|\\|$))+/, "");
|
|
308
308
|
const fullpath = path.join(location, "help", safeFile);
|
|
309
309
|
if (fs.existsSync(fullpath)) {
|
|
310
|
-
const { markup } = await get_help_markup(
|
|
310
|
+
const { markup } = await get_help_markup(
|
|
311
|
+
fullpath,
|
|
312
|
+
req.query,
|
|
313
|
+
req,
|
|
314
|
+
true
|
|
315
|
+
);
|
|
311
316
|
|
|
312
317
|
res.sendWrap(`Help: ${topic}`, { above: [markup] });
|
|
313
318
|
} else {
|
|
@@ -753,11 +758,13 @@ router.post(
|
|
|
753
758
|
);
|
|
754
759
|
}
|
|
755
760
|
res.redirect(
|
|
756
|
-
type
|
|
757
|
-
? `/
|
|
758
|
-
:
|
|
759
|
-
?
|
|
760
|
-
:
|
|
761
|
+
type == "codepage"
|
|
762
|
+
? `/admin/edit-codepage/${name}`
|
|
763
|
+
: type === "trigger"
|
|
764
|
+
? `/actions`
|
|
765
|
+
: /^[a-z]+$/g.test(type)
|
|
766
|
+
? `/${type}edit`
|
|
767
|
+
: "/"
|
|
761
768
|
);
|
|
762
769
|
})
|
|
763
770
|
);
|
|
@@ -1140,6 +1147,7 @@ router.post(
|
|
|
1140
1147
|
else
|
|
1141
1148
|
req.flash("success", req.__("No changes detected, snapshot skipped"));
|
|
1142
1149
|
} catch (e) {
|
|
1150
|
+
console.error(e);
|
|
1143
1151
|
req.flash("error", e.message);
|
|
1144
1152
|
}
|
|
1145
1153
|
res.json({ reload_page: true });
|
|
@@ -1636,6 +1644,7 @@ const doInstall = async (req, res, version, deepClean, runPull) => {
|
|
|
1636
1644
|
try {
|
|
1637
1645
|
await cleanNodeModules();
|
|
1638
1646
|
} catch (e) {
|
|
1647
|
+
console.error(e);
|
|
1639
1648
|
res_write(req.__("Error cleaning node_modules: %s\n", e.message));
|
|
1640
1649
|
}
|
|
1641
1650
|
}
|
|
@@ -1896,6 +1905,7 @@ router.post(
|
|
|
1896
1905
|
notify: "Certificate added, please restart server",
|
|
1897
1906
|
});
|
|
1898
1907
|
} catch (e) {
|
|
1908
|
+
console.error(e);
|
|
1899
1909
|
res.json({ error: e.message });
|
|
1900
1910
|
}
|
|
1901
1911
|
} else {
|
|
@@ -1983,6 +1993,7 @@ router.post(
|
|
|
1983
1993
|
);
|
|
1984
1994
|
res.redirect("/useradmin/ssl");
|
|
1985
1995
|
} catch (e) {
|
|
1996
|
+
console.error(e);
|
|
1986
1997
|
req.flash("error", e.message);
|
|
1987
1998
|
res.redirect("/useradmin/ssl");
|
|
1988
1999
|
}
|
|
@@ -4098,15 +4109,6 @@ router.get(
|
|
|
4098
4109
|
values: { code: existing },
|
|
4099
4110
|
noSubmitButton: true,
|
|
4100
4111
|
labelCols: 0,
|
|
4101
|
-
additionalButtons: [
|
|
4102
|
-
{
|
|
4103
|
-
label: req.__("Delete code page"),
|
|
4104
|
-
class: "btn btn-outline-danger btn-sm",
|
|
4105
|
-
onclick: `if(confirm('Are you sure you would like to delete this code page?'))ajax_post('/admin/delete-codepage/${encodeURIComponent(
|
|
4106
|
-
name
|
|
4107
|
-
)}')`,
|
|
4108
|
-
},
|
|
4109
|
-
],
|
|
4110
4112
|
fields: [
|
|
4111
4113
|
{
|
|
4112
4114
|
name: "code",
|
|
@@ -4123,7 +4125,7 @@ router.get(
|
|
|
4123
4125
|
),
|
|
4124
4126
|
input_type: "code",
|
|
4125
4127
|
attributes: { mode: "text/javascript" },
|
|
4126
|
-
class: "validate-statements",
|
|
4128
|
+
class: "validate-statements enlarge-in-card",
|
|
4127
4129
|
validator(s) {
|
|
4128
4130
|
try {
|
|
4129
4131
|
let AsyncFunction = Object.getPrototypeOf(
|
|
@@ -4143,7 +4145,8 @@ router.get(
|
|
|
4143
4145
|
{}
|
|
4144
4146
|
);
|
|
4145
4147
|
const tags = await Tag.find();
|
|
4146
|
-
const tagMarkup =
|
|
4148
|
+
const tagMarkup = span(
|
|
4149
|
+
{ class: "ms-1" },
|
|
4147
4150
|
"Tags:",
|
|
4148
4151
|
(function_code_pages_tags[name] || []).map((tagnm) =>
|
|
4149
4152
|
span(
|
|
@@ -4205,7 +4208,28 @@ router.get(
|
|
|
4205
4208
|
contents: {
|
|
4206
4209
|
type: "card",
|
|
4207
4210
|
title: req.__(`%s code page`, name),
|
|
4208
|
-
contents: [
|
|
4211
|
+
contents: [
|
|
4212
|
+
renderForm(form, req.csrfToken()),
|
|
4213
|
+
a(
|
|
4214
|
+
{
|
|
4215
|
+
href: `javascript:if(confirm('Are you sure you would like to delete this code page?'))ajax_post('/admin/delete-codepage/${encodeURIComponent(
|
|
4216
|
+
name
|
|
4217
|
+
)}')`,
|
|
4218
|
+
class: "me-1 text-danger",
|
|
4219
|
+
},
|
|
4220
|
+
req.__("Delete code page")
|
|
4221
|
+
),
|
|
4222
|
+
" | ",
|
|
4223
|
+
a(
|
|
4224
|
+
{
|
|
4225
|
+
href: `javascript:ajax_modal('/admin/snapshot-restore/codepage/${name}')`,
|
|
4226
|
+
class: "ms-1 me-1",
|
|
4227
|
+
},
|
|
4228
|
+
req.__("Restore")
|
|
4229
|
+
),
|
|
4230
|
+
" | ",
|
|
4231
|
+
tagMarkup,
|
|
4232
|
+
],
|
|
4209
4233
|
},
|
|
4210
4234
|
});
|
|
4211
4235
|
})
|
|
@@ -4223,9 +4247,9 @@ router.post(
|
|
|
4223
4247
|
...code_pages,
|
|
4224
4248
|
[name]: code,
|
|
4225
4249
|
});
|
|
4226
|
-
await getState().refresh_codepages();
|
|
4227
|
-
|
|
4228
|
-
res.json({ success: true });
|
|
4250
|
+
const err = await getState().refresh_codepages();
|
|
4251
|
+
if (err) res.json({ success: false, error: `Error evaluating code pages: ${err}` });
|
|
4252
|
+
else res.json({ success: true });
|
|
4229
4253
|
})
|
|
4230
4254
|
);
|
|
4231
4255
|
router.post(
|
package/routes/common_lists.js
CHANGED
|
@@ -93,7 +93,8 @@ const tablesList = async (
|
|
|
93
93
|
{
|
|
94
94
|
label: tagsDropdown(
|
|
95
95
|
tags,
|
|
96
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
96
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
97
|
+
req
|
|
97
98
|
),
|
|
98
99
|
key: (r) => tagBadges(r),
|
|
99
100
|
},
|
|
@@ -240,7 +241,7 @@ const tagBadge = (tag, type) =>
|
|
|
240
241
|
tag.name
|
|
241
242
|
);
|
|
242
243
|
|
|
243
|
-
const tagsDropdown = (tags, altHeader) =>
|
|
244
|
+
const tagsDropdown = (tags, altHeader, req) =>
|
|
244
245
|
div(
|
|
245
246
|
{ class: "dropdown" },
|
|
246
247
|
div(
|
|
@@ -253,7 +254,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
253
254
|
"aria-haspopup": "true",
|
|
254
255
|
"aria-expanded": "false",
|
|
255
256
|
},
|
|
256
|
-
altHeader || "Tags",
|
|
257
|
+
altHeader || req.__("Tags"),
|
|
257
258
|
i({ class: "ms-1 fas fa-caret-down" })
|
|
258
259
|
),
|
|
259
260
|
div(
|
|
@@ -267,7 +268,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
267
268
|
// TODO check url why view for page, what do we need for page group
|
|
268
269
|
href: `javascript:unset_state_field('_tag', this)`,
|
|
269
270
|
},
|
|
270
|
-
"All tags"
|
|
271
|
+
req.__("All tags")
|
|
271
272
|
),
|
|
272
273
|
tags.map((tag) =>
|
|
273
274
|
a(
|
|
@@ -285,7 +286,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
285
286
|
// TODO check url why view for page, what do we need for page group
|
|
286
287
|
href: `tag`,
|
|
287
288
|
},
|
|
288
|
-
"Manage tags..."
|
|
289
|
+
req.__("Manage tags...")
|
|
289
290
|
)
|
|
290
291
|
)
|
|
291
292
|
);
|
|
@@ -314,7 +315,7 @@ const mkAddBtn = (tags, entityType, id, req, myTagIds, on_done_redirect_str) =>
|
|
|
314
315
|
post_dropdown_item(
|
|
315
316
|
`/tag-entries/add-tag-entity/${encodeURIComponent(
|
|
316
317
|
t.name
|
|
317
|
-
)}/${entityType}/${id}${on_done_redirect_str||""}`,
|
|
318
|
+
)}/${entityType}/${id}${on_done_redirect_str || ""}`,
|
|
318
319
|
t.name,
|
|
319
320
|
req
|
|
320
321
|
)
|
|
@@ -345,7 +346,14 @@ const viewsList = async (
|
|
|
345
346
|
const tagBadges = (view) => {
|
|
346
347
|
const myTags = tag_entries.filter((te) => te.view_id === view.id);
|
|
347
348
|
const myTagIds = new Set(myTags.map((t) => t.tag_id));
|
|
348
|
-
const addBtn = mkAddBtn(
|
|
349
|
+
const addBtn = mkAddBtn(
|
|
350
|
+
tags,
|
|
351
|
+
"views",
|
|
352
|
+
view.id,
|
|
353
|
+
req,
|
|
354
|
+
myTagIds,
|
|
355
|
+
on_done_redirect_str
|
|
356
|
+
);
|
|
349
357
|
return (
|
|
350
358
|
myTags.map((te) => tagBadge(tagsById[te.tag_id], "views")).join(nbsp) +
|
|
351
359
|
addBtn
|
|
@@ -380,7 +388,8 @@ const viewsList = async (
|
|
|
380
388
|
{
|
|
381
389
|
label: tagsDropdown(
|
|
382
390
|
tags,
|
|
383
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
391
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
392
|
+
req
|
|
384
393
|
),
|
|
385
394
|
key: (r) => tagBadges(r),
|
|
386
395
|
},
|
|
@@ -585,7 +594,8 @@ const getPageList = async (
|
|
|
585
594
|
{
|
|
586
595
|
label: tagsDropdown(
|
|
587
596
|
tags,
|
|
588
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
597
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
598
|
+
req
|
|
589
599
|
),
|
|
590
600
|
key: (r) => tagBadges(r),
|
|
591
601
|
},
|
|
@@ -709,7 +719,14 @@ const getTriggerList = async (
|
|
|
709
719
|
const myTagIds = new Set(myTags.map((t) => t.tag_id));
|
|
710
720
|
return (
|
|
711
721
|
myTags.map((te) => tagBadge(tagsById[te.tag_id], "triggers")).join(nbsp) +
|
|
712
|
-
mkAddBtn(
|
|
722
|
+
mkAddBtn(
|
|
723
|
+
tags,
|
|
724
|
+
"triggers",
|
|
725
|
+
trigger.id,
|
|
726
|
+
req,
|
|
727
|
+
myTagIds,
|
|
728
|
+
on_done_redirect_str
|
|
729
|
+
)
|
|
713
730
|
);
|
|
714
731
|
};
|
|
715
732
|
return mkTable(
|
|
@@ -729,7 +746,8 @@ const getTriggerList = async (
|
|
|
729
746
|
{
|
|
730
747
|
label: tagsDropdown(
|
|
731
748
|
tags,
|
|
732
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
749
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
750
|
+
req
|
|
733
751
|
),
|
|
734
752
|
key: (r) => tagBadges(r),
|
|
735
753
|
},
|
package/routes/delete.js
CHANGED
package/routes/fields.js
CHANGED
|
@@ -322,6 +322,7 @@ const fieldFlow = (req) =>
|
|
|
322
322
|
}
|
|
323
323
|
);
|
|
324
324
|
} catch (e) {
|
|
325
|
+
console.error(e);
|
|
325
326
|
return {
|
|
326
327
|
redirect: `/table/${context.table_id}`,
|
|
327
328
|
flash: ["error", e.message],
|
|
@@ -340,6 +341,7 @@ const fieldFlow = (req) =>
|
|
|
340
341
|
}
|
|
341
342
|
);
|
|
342
343
|
} catch (e) {
|
|
344
|
+
console.error(e);
|
|
343
345
|
return {
|
|
344
346
|
redirect: `/table/${context.table_id}`,
|
|
345
347
|
flash: ["error", e.message],
|
package/routes/infoarch.js
CHANGED
package/routes/menu.js
CHANGED
package/routes/page_groupedit.js
CHANGED
package/routes/plugins.js
CHANGED
|
@@ -1489,6 +1489,7 @@ router.post(
|
|
|
1489
1489
|
for (const msg of msgs) req.flash("warning", msg);
|
|
1490
1490
|
res.redirect(`/plugins`);
|
|
1491
1491
|
} catch (e) {
|
|
1492
|
+
console.error(e);
|
|
1492
1493
|
req.flash("error", `${e.message}`);
|
|
1493
1494
|
const form = pluginForm(req, plugin);
|
|
1494
1495
|
res.sendWrap(req.__(`Edit Module`), renderForm(form, req.csrfToken()));
|
|
@@ -1595,6 +1596,7 @@ router.post(
|
|
|
1595
1596
|
req.__
|
|
1596
1597
|
);
|
|
1597
1598
|
} catch (e) {
|
|
1599
|
+
console.error(e);
|
|
1598
1600
|
req.flash(
|
|
1599
1601
|
"error",
|
|
1600
1602
|
e.message || req.__("Error installing module %s", plugin.name)
|
package/routes/registry.js
CHANGED
|
@@ -145,6 +145,7 @@ router.get(
|
|
|
145
145
|
name: "regval",
|
|
146
146
|
label: "",
|
|
147
147
|
input_type: "code",
|
|
148
|
+
class: "enlarge-in-card",
|
|
148
149
|
attributes: { mode: "application/json" },
|
|
149
150
|
},
|
|
150
151
|
],
|
|
@@ -319,13 +320,16 @@ router.get(
|
|
|
319
320
|
),
|
|
320
321
|
},
|
|
321
322
|
{
|
|
322
|
-
type: "
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
:
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
323
|
+
type: "container",
|
|
324
|
+
contents: {
|
|
325
|
+
type: "card",
|
|
326
|
+
title: cfg_link
|
|
327
|
+
? `Registry editor: ${cfg_link}`
|
|
328
|
+
: ename && etype
|
|
329
|
+
? `Registry editor: ${ename} ${etype}`
|
|
330
|
+
: "Registry editor",
|
|
331
|
+
contents: edContents,
|
|
332
|
+
},
|
|
329
333
|
},
|
|
330
334
|
],
|
|
331
335
|
},
|
package/routes/scapi.js
CHANGED
|
@@ -25,7 +25,13 @@ const {
|
|
|
25
25
|
stateFieldsToWhere,
|
|
26
26
|
readState,
|
|
27
27
|
} = require("@saltcorn/data/plugin-helper");
|
|
28
|
-
const {
|
|
28
|
+
const {
|
|
29
|
+
getState,
|
|
30
|
+
process_send,
|
|
31
|
+
add_tenant,
|
|
32
|
+
} = require("@saltcorn/data/db/state");
|
|
33
|
+
const db = require("@saltcorn/data/db");
|
|
34
|
+
const { loadAllPlugins } = require("../load_plugins");
|
|
29
35
|
|
|
30
36
|
/**
|
|
31
37
|
* @type {object}
|
|
@@ -49,8 +55,8 @@ function accessAllowedRead(req, user) {
|
|
|
49
55
|
req.user && req.user.id
|
|
50
56
|
? req.user.role_id
|
|
51
57
|
: user && user.role_id
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
? user.role_id
|
|
59
|
+
: 100;
|
|
54
60
|
|
|
55
61
|
if (role === 1) return true;
|
|
56
62
|
return false;
|
|
@@ -326,3 +332,33 @@ router.get(
|
|
|
326
332
|
)(req, res, next);
|
|
327
333
|
})
|
|
328
334
|
);
|
|
335
|
+
|
|
336
|
+
router.post(
|
|
337
|
+
"/reload",
|
|
338
|
+
error_catcher(async (req, res, next) => {
|
|
339
|
+
await passport.authenticate(
|
|
340
|
+
"api-bearer",
|
|
341
|
+
{ session: false },
|
|
342
|
+
async function (err, user, info) {
|
|
343
|
+
if (accessAllowedRead(req, user)) {
|
|
344
|
+
const { tenant, new_tenant } = req.body;
|
|
345
|
+
if (new_tenant) {
|
|
346
|
+
add_tenant(new_tenant);
|
|
347
|
+
|
|
348
|
+
await db.runWithTenant(new_tenant, loadAllPlugins);
|
|
349
|
+
|
|
350
|
+
process_send({ createTenant: new_tenant });
|
|
351
|
+
}
|
|
352
|
+
if (tenant) {
|
|
353
|
+
await db.runWithTenant(tenant, async () => {
|
|
354
|
+
await getState().refresh_plugins();
|
|
355
|
+
});
|
|
356
|
+
} else await getState().refresh_plugins();
|
|
357
|
+
res.json({ success: true });
|
|
358
|
+
} else {
|
|
359
|
+
res.status(401).json({ error: req.__("Not authorized") });
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
)(req, res, next);
|
|
363
|
+
})
|
|
364
|
+
);
|
package/routes/tables.js
CHANGED
|
@@ -2219,6 +2219,7 @@ router.post(
|
|
|
2219
2219
|
await table.deleteRows({}, req.user, true);
|
|
2220
2220
|
req.flash("success", req.__("Deleted all rows"));
|
|
2221
2221
|
} catch (e) {
|
|
2222
|
+
console.error(e)
|
|
2222
2223
|
req.flash("error", e.message);
|
|
2223
2224
|
}
|
|
2224
2225
|
|
|
@@ -2475,20 +2476,6 @@ router.post(
|
|
|
2475
2476
|
},
|
|
2476
2477
|
edit.id
|
|
2477
2478
|
);
|
|
2478
|
-
const add_to_menu = async (item) => {
|
|
2479
|
-
const current_menu = getState().getConfigCopy("menu_items", []);
|
|
2480
|
-
const existing = current_menu.findIndex((m) => m.label === item.label);
|
|
2481
|
-
if (existing >= 0) current_menu[existing] = item;
|
|
2482
|
-
else current_menu.push(item);
|
|
2483
|
-
await save_menu_items(current_menu);
|
|
2484
|
-
};
|
|
2485
|
-
|
|
2486
|
-
await add_to_menu({
|
|
2487
|
-
label: table.name,
|
|
2488
|
-
type: "View",
|
|
2489
|
-
min_role: 100,
|
|
2490
|
-
viewname: `List ${table.name}`,
|
|
2491
|
-
});
|
|
2492
2479
|
|
|
2493
2480
|
res.redirect(`/table/${table.id}`);
|
|
2494
2481
|
})
|
package/routes/utils.js
CHANGED
|
@@ -164,7 +164,7 @@ const set_custom_http_headers = (res, req, state) => {
|
|
|
164
164
|
validateHeaderName(k);
|
|
165
165
|
validateHeaderValue(k, val);
|
|
166
166
|
res.header(k, val);
|
|
167
|
-
} catch (e) {
|
|
167
|
+
} catch (e) {
|
|
168
168
|
Crash.create(e, { url: "/", headers: {} });
|
|
169
169
|
}
|
|
170
170
|
}
|
|
@@ -504,6 +504,7 @@ const sendHtmlFile = async (req, res, file) => {
|
|
|
504
504
|
.sendWrap(req.__("An error occurred"), req.__("File not found"));
|
|
505
505
|
}
|
|
506
506
|
} catch (e) {
|
|
507
|
+
console.error(e)
|
|
507
508
|
return res
|
|
508
509
|
.status(404)
|
|
509
510
|
.sendWrap(
|