├── LICENSE ├── assets ├── images │ ├── ajax-loader.gif │ ├── default_mosaic_image.png │ └── logo_title.png ├── js │ ├── admin.js │ ├── app.js │ ├── base.js │ ├── controllers.json │ ├── controllers │ │ ├── collection_controller.js │ │ ├── confirm_exit_controller.js │ │ ├── edit_controller.js │ │ ├── filter_controller.js │ │ ├── filter_list_controller.js │ │ ├── per_page_controller.js │ │ ├── readmore_controller.js │ │ └── revision_controller.js │ ├── core │ │ ├── config.js │ │ ├── translation.js │ │ └── utils.js │ ├── sidebar.js │ ├── stimulus.js │ └── treeview.js └── scss │ ├── admin-lte-fas.scss │ ├── app.scss │ ├── flashmessage.scss │ ├── layout.scss │ ├── readmore.scss │ ├── styles.scss │ └── tree.scss ├── composer.json └── src ├── Action ├── AppendFormFieldElementAction.php ├── DashboardAction.php ├── GetShortObjectDescriptionAction.php ├── RetrieveAutocompleteItemsAction.php ├── RetrieveFormFieldElementAction.php ├── SearchAction.php └── SetObjectFieldValueAction.php ├── Admin ├── AbstractAdmin.php ├── AbstractAdminExtension.php ├── AccessRegistryInterface.php ├── AdminExtensionInterface.php ├── AdminHelper.php ├── AdminInterface.php ├── AdminTreeInterface.php ├── BreadcrumbsBuilder.php ├── BreadcrumbsBuilderInterface.php ├── Extension │ └── LockExtension.php ├── LifecycleHookProviderInterface.php ├── ParentAdminInterface.php ├── Pool.php └── UrlGeneratorInterface.php ├── ArgumentResolver ├── AdminValueResolver.php ├── CompatibleValueResolverInterface.php └── ProxyQueryResolver.php ├── BCLayer └── BCHelper.php ├── Block ├── AdminListBlockService.php ├── AdminPreviewBlockService.php ├── AdminSearchBlockService.php └── AdminStatsBlockService.php ├── Bridge └── Exporter │ └── AdminExporter.php ├── Builder ├── AbstractFormContractor.php ├── BuilderInterface.php ├── DatagridBuilderInterface.php ├── FormContractorInterface.php ├── ListBuilderInterface.php ├── RouteBuilderInterface.php └── ShowBuilderInterface.php ├── Command ├── ExplainAdminCommand.php ├── GenerateObjectAclCommand.php ├── ListAdminCommand.php ├── QuestionableCommand.php ├── SetupAclCommand.php └── Validators.php ├── Controller └── CRUDController.php ├── Datagrid ├── Datagrid.php ├── DatagridInterface.php ├── DatagridMapper.php ├── ListMapper.php ├── Pager.php ├── PagerInterface.php ├── ProxyQueryInterface.php └── SimplePager.php ├── DependencyInjection ├── AbstractSonataAdminExtension.php ├── Admin │ ├── AbstractTaggedAdmin.php │ └── TaggedAdminInterface.php ├── Compiler │ ├── AddAuditReadersCompilerPass.php │ ├── AddDependencyCallsCompilerPass.php │ ├── AddFilterTypeCompilerPass.php │ ├── AdminAddInitializeCallCompilerPass.php │ ├── AdminMakerCompilerPass.php │ ├── AdminSearchCompilerPass.php │ ├── ExtensionCompilerPass.php │ ├── GlobalVariablesCompilerPass.php │ ├── ModelManagerCompilerPass.php │ ├── ObjectAclManipulatorCompilerPass.php │ └── TwigStringExtensionCompilerPass.php ├── Configuration.php └── SonataAdminExtension.php ├── Event ├── AdminEventExtension.php ├── BatchActionEvent.php ├── ConfigureEvent.php ├── ConfigureMenuEvent.php ├── ConfigureQueryEvent.php └── PersistenceEvent.php ├── EventListener └── ConfigureCRUDControllerListener.php ├── Exception ├── AbstractClassException.php ├── AdminClassNotFoundException.php ├── AdminCodeNotFoundException.php ├── BadRequestParamHttpException.php ├── LockException.php ├── ModelManagerException.php ├── ModelManagerThrowable.php ├── NoValueException.php └── TooManyAdminClassException.php ├── Exporter └── DataSourceInterface.php ├── FieldDescription ├── BaseFieldDescription.php ├── FieldDescriptionCollection.php ├── FieldDescriptionFactoryInterface.php ├── FieldDescriptionInterface.php ├── FieldDescriptionRegistryInterface.php ├── TypeGuesserChain.php └── TypeGuesserInterface.php ├── Filter ├── Filter.php ├── FilterFactory.php ├── FilterFactoryInterface.php ├── FilterInterface.php ├── Model │ └── FilterData.php └── Persister │ ├── FilterPersisterInterface.php │ └── SessionFilterPersister.php ├── Form ├── ChoiceList │ └── ModelChoiceLoader.php ├── DataTransformer │ ├── ArrayToModelTransformer.php │ ├── BackedEnumTransformer.php │ ├── BooleanToStringTransformer.php │ ├── FilterDataTransformer.php │ ├── ModelToIdPropertyTransformer.php │ ├── ModelToIdTransformer.php │ └── ModelsToArrayTransformer.php ├── DataTransformerResolver.php ├── DataTransformerResolverInterface.php ├── EventListener │ └── MergeCollectionListener.php ├── Extension │ ├── ChoiceTypeExtension.php │ └── Field │ │ └── Type │ │ ├── FormTypeFieldExtension.php │ │ └── MopaCompatibilityTypeFieldExtension.php ├── FormErrorIteratorToConstraintViolationList.php ├── FormMapper.php └── Type │ ├── AclMatrixType.php │ ├── AdminType.php │ ├── ChoiceFieldMaskType.php │ ├── CollectionType.php │ ├── Filter │ ├── ChoiceType.php │ ├── DateRangeType.php │ ├── DateTimeRangeType.php │ ├── DateTimeType.php │ ├── DateType.php │ ├── DefaultType.php │ ├── FilterDataType.php │ └── NumberType.php │ ├── ModelAutocompleteType.php │ ├── ModelHiddenType.php │ ├── ModelListType.php │ ├── ModelReferenceType.php │ ├── ModelType.php │ ├── Operator │ ├── ContainsOperatorType.php │ ├── DateOperatorType.php │ ├── DateRangeOperatorType.php │ ├── EqualOperatorType.php │ ├── NumberOperatorType.php │ └── StringOperatorType.php │ └── TemplateType.php ├── Maker └── AdminMaker.php ├── Manipulator ├── ObjectManipulator.php └── ServicesManipulator.php ├── Mapper ├── BaseGroupedMapper.php └── MapperInterface.php ├── Menu ├── Matcher │ └── Voter │ │ ├── ActiveVoter.php │ │ └── AdminVoter.php ├── MenuBuilder.php └── Provider │ └── GroupMenuProvider.php ├── Model ├── AuditManager.php ├── AuditManagerInterface.php ├── AuditReaderInterface.php ├── LockInterface.php ├── ModelManagerInterface.php ├── ProxyResolverInterface.php └── Revision.php ├── Object ├── Metadata.php └── MetadataInterface.php ├── Request ├── AdminFetcher.php └── AdminFetcherInterface.php ├── Resources ├── config │ ├── actions.php │ ├── block.php │ ├── commands.php │ ├── core.php │ ├── event_listener.php │ ├── exporter.php │ ├── form_types.php │ ├── makers.php │ ├── menu.php │ ├── route.php │ ├── routing │ │ └── sonata_admin.xml │ ├── security.php │ └── twig.php ├── meta │ └── LICENSE ├── public │ ├── admin-lte-skins │ │ ├── skin-black-light.min.css │ │ ├── skin-black.min.css │ │ ├── skin-blue-light.min.css │ │ ├── skin-blue.min.css │ │ ├── skin-green-light.min.css │ │ ├── skin-green.min.css │ │ ├── skin-purple-light.min.css │ │ ├── skin-purple.min.css │ │ ├── skin-red-light.min.css │ │ ├── skin-red.min.css │ │ ├── skin-yellow-light.min.css │ │ └── skin-yellow.min.css │ ├── app.css │ ├── app.js │ ├── entrypoints.json │ ├── fonts │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff │ │ ├── fa-solid-900.woff2 │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ ├── glyphicons-halflings-regular.woff2 │ │ ├── source-sans-pro-all-300-italic.woff │ │ ├── source-sans-pro-all-300-normal.woff │ │ ├── source-sans-pro-all-400-italic.woff │ │ ├── source-sans-pro-all-400-normal.woff │ │ ├── source-sans-pro-all-600-italic.woff │ │ ├── source-sans-pro-all-600-normal.woff │ │ ├── source-sans-pro-all-700-normal.woff │ │ ├── source-sans-pro-cyrillic-300-italic.woff2 │ │ ├── source-sans-pro-cyrillic-300-normal.woff2 │ │ ├── source-sans-pro-cyrillic-400-italic.woff2 │ │ ├── source-sans-pro-cyrillic-400-normal.woff2 │ │ ├── source-sans-pro-cyrillic-600-italic.woff2 │ │ ├── source-sans-pro-cyrillic-600-normal.woff2 │ │ ├── source-sans-pro-cyrillic-700-normal.woff2 │ │ ├── source-sans-pro-cyrillic-ext-300-italic.woff2 │ │ ├── source-sans-pro-cyrillic-ext-300-normal.woff2 │ │ ├── source-sans-pro-cyrillic-ext-400-italic.woff2 │ │ ├── source-sans-pro-cyrillic-ext-400-normal.woff2 │ │ ├── source-sans-pro-cyrillic-ext-600-italic.woff2 │ │ ├── source-sans-pro-cyrillic-ext-600-normal.woff2 │ │ ├── source-sans-pro-cyrillic-ext-700-normal.woff2 │ │ ├── source-sans-pro-greek-300-italic.woff2 │ │ ├── source-sans-pro-greek-300-normal.woff2 │ │ ├── source-sans-pro-greek-400-italic.woff2 │ │ ├── source-sans-pro-greek-400-normal.woff2 │ │ ├── source-sans-pro-greek-600-italic.woff2 │ │ ├── source-sans-pro-greek-600-normal.woff2 │ │ ├── source-sans-pro-greek-700-normal.woff2 │ │ ├── source-sans-pro-greek-ext-300-italic.woff2 │ │ ├── source-sans-pro-greek-ext-300-normal.woff2 │ │ ├── source-sans-pro-greek-ext-400-italic.woff2 │ │ ├── source-sans-pro-greek-ext-400-normal.woff2 │ │ ├── source-sans-pro-greek-ext-600-italic.woff2 │ │ ├── source-sans-pro-greek-ext-600-normal.woff2 │ │ ├── source-sans-pro-greek-ext-700-normal.woff2 │ │ ├── source-sans-pro-latin-300-italic.woff2 │ │ ├── source-sans-pro-latin-300-normal.woff2 │ │ ├── source-sans-pro-latin-400-italic.woff2 │ │ ├── source-sans-pro-latin-400-normal.woff2 │ │ ├── source-sans-pro-latin-600-italic.woff2 │ │ ├── source-sans-pro-latin-600-normal.woff2 │ │ ├── source-sans-pro-latin-700-normal.woff2 │ │ ├── source-sans-pro-latin-ext-300-italic.woff2 │ │ ├── source-sans-pro-latin-ext-300-normal.woff2 │ │ ├── source-sans-pro-latin-ext-400-italic.woff2 │ │ ├── source-sans-pro-latin-ext-400-normal.woff2 │ │ ├── source-sans-pro-latin-ext-600-italic.woff2 │ │ ├── source-sans-pro-latin-ext-600-normal.woff2 │ │ ├── source-sans-pro-latin-ext-700-normal.woff2 │ │ ├── source-sans-pro-vietnamese-300-italic.woff2 │ │ ├── source-sans-pro-vietnamese-300-normal.woff2 │ │ ├── source-sans-pro-vietnamese-400-italic.woff2 │ │ ├── source-sans-pro-vietnamese-400-normal.woff2 │ │ ├── source-sans-pro-vietnamese-600-italic.woff2 │ │ ├── source-sans-pro-vietnamese-600-normal.woff2 │ │ └── source-sans-pro-vietnamese-700-normal.woff2 │ ├── images │ │ ├── ajax-loader.gif │ │ ├── blue.png │ │ ├── blue@2x.png │ │ ├── clear.png │ │ ├── default_mosaic_image.png │ │ ├── fa-brands-400.svg │ │ ├── fa-regular-400.svg │ │ ├── fa-solid-900.svg │ │ ├── glyphicons-halflings-regular.svg │ │ ├── loading.gif │ │ └── logo_title.png │ ├── manifest.json │ └── select2-locale │ │ ├── af.js │ │ ├── ar.js │ │ ├── az.js │ │ ├── bg.js │ │ ├── bn.js │ │ ├── bs.js │ │ ├── ca.js │ │ ├── cs.js │ │ ├── da.js │ │ ├── de.js │ │ ├── dsb.js │ │ ├── el.js │ │ ├── en.js │ │ ├── es.js │ │ ├── et.js │ │ ├── eu.js │ │ ├── fa.js │ │ ├── fi.js │ │ ├── fr.js │ │ ├── gl.js │ │ ├── he.js │ │ ├── hi.js │ │ ├── hr.js │ │ ├── hsb.js │ │ ├── hu.js │ │ ├── hy.js │ │ ├── id.js │ │ ├── is.js │ │ ├── it.js │ │ ├── ja.js │ │ ├── ka.js │ │ ├── km.js │ │ ├── ko.js │ │ ├── lt.js │ │ ├── lv.js │ │ ├── mk.js │ │ ├── ms.js │ │ ├── nb.js │ │ ├── ne.js │ │ ├── nl.js │ │ ├── pl.js │ │ ├── ps.js │ │ ├── pt-BR.js │ │ ├── pt.js │ │ ├── ro.js │ │ ├── ru.js │ │ ├── sk.js │ │ ├── sl.js │ │ ├── sq.js │ │ ├── sr-Cyrl.js │ │ ├── sr.js │ │ ├── sv.js │ │ ├── th.js │ │ ├── tk.js │ │ ├── tr.js │ │ ├── uk.js │ │ ├── vi.js │ │ ├── zh-CN.js │ │ └── zh-TW.js ├── skeleton │ ├── Admin.tpl.php │ └── AdminController.tpl.php ├── translations │ ├── SonataAdminBundle.ar.xliff │ ├── SonataAdminBundle.bg.xliff │ ├── SonataAdminBundle.bs.xliff │ ├── SonataAdminBundle.ca.xliff │ ├── SonataAdminBundle.cs.xliff │ ├── SonataAdminBundle.de.xliff │ ├── SonataAdminBundle.en.xliff │ ├── SonataAdminBundle.es.xliff │ ├── SonataAdminBundle.eu.xliff │ ├── SonataAdminBundle.fa.xliff │ ├── SonataAdminBundle.fr.xliff │ ├── SonataAdminBundle.hr.xliff │ ├── SonataAdminBundle.hu.xliff │ ├── SonataAdminBundle.it.xliff │ ├── SonataAdminBundle.ja.xliff │ ├── SonataAdminBundle.lb.xliff │ ├── SonataAdminBundle.lt.xliff │ ├── SonataAdminBundle.lv.xliff │ ├── SonataAdminBundle.nl.xliff │ ├── SonataAdminBundle.no.xliff │ ├── SonataAdminBundle.pl.xliff │ ├── SonataAdminBundle.pt.xliff │ ├── SonataAdminBundle.pt_BR.xliff │ ├── SonataAdminBundle.ro.xliff │ ├── SonataAdminBundle.ru.xliff │ ├── SonataAdminBundle.sk.xliff │ ├── SonataAdminBundle.sl.xliff │ ├── SonataAdminBundle.sr_Cyrl.xliff │ ├── SonataAdminBundle.sr_Latn.xliff │ ├── SonataAdminBundle.sv_SE.xliff │ ├── SonataAdminBundle.tr.xliff │ ├── SonataAdminBundle.uk.xliff │ ├── SonataAdminBundle.zh_CN.xliff │ └── SonataAdminBundle.zh_HK.xliff └── views │ ├── Block │ ├── block_admin_list.html.twig │ ├── block_admin_preview.html.twig │ ├── block_rss_dashboard.html.twig │ ├── block_search_result.html.twig │ └── block_stats.html.twig │ ├── Breadcrumb │ ├── breadcrumb.html.twig │ └── breadcrumb_title.html.twig │ ├── Button │ ├── acl_button.html.twig │ ├── create_button.html.twig │ ├── edit_button.html.twig │ ├── history_button.html.twig │ ├── list_button.html.twig │ └── show_button.html.twig │ ├── CRUD │ ├── Association │ │ ├── edit_many_script.html.twig │ │ ├── edit_many_to_many.html.twig │ │ ├── edit_many_to_one.html.twig │ │ ├── edit_modal.html.twig │ │ ├── edit_one_script.html.twig │ │ ├── edit_one_to_many.html.twig │ │ ├── edit_one_to_many_inline_table.html.twig │ │ ├── edit_one_to_many_inline_tabs.html.twig │ │ ├── edit_one_to_many_sortable_script_table.html.twig │ │ ├── edit_one_to_many_sortable_script_tabs.html.twig │ │ ├── edit_one_to_one.html.twig │ │ ├── list_many_to_many.html.twig │ │ ├── list_many_to_one.html.twig │ │ ├── list_one_to_many.html.twig │ │ ├── list_one_to_one.html.twig │ │ ├── show_many_to_many.html.twig │ │ ├── show_many_to_one.html.twig │ │ ├── show_one_to_many.html.twig │ │ └── show_one_to_one.html.twig │ ├── acl.html.twig │ ├── action.html.twig │ ├── action_buttons.html.twig │ ├── base_acl.html.twig │ ├── base_acl_macro.html.twig │ ├── base_array_macro.html.twig │ ├── base_edit.html.twig │ ├── base_edit_form.html.twig │ ├── base_edit_form_macro.html.twig │ ├── base_history.html.twig │ ├── base_list.html.twig │ ├── base_list_field.html.twig │ ├── base_list_flat_field.html.twig │ ├── base_list_flat_inner_row.html.twig │ ├── base_list_inner_row.html.twig │ ├── base_show.html.twig │ ├── base_show_compare.html.twig │ ├── base_show_field.html.twig │ ├── batch_confirmation.html.twig │ ├── dashboard__action.html.twig │ ├── dashboard__action_create.html.twig │ ├── delete.html.twig │ ├── display_boolean.html.twig │ ├── display_choice.html.twig │ ├── display_currency.html.twig │ ├── display_date.html.twig │ ├── display_datetime.html.twig │ ├── display_email.html.twig │ ├── display_enum.html.twig │ ├── display_html.html.twig │ ├── display_percent.html.twig │ ├── display_time.html.twig │ ├── display_trans.html.twig │ ├── display_url.html.twig │ ├── edit.html.twig │ ├── history.html.twig │ ├── history_revision_timestamp.html.twig │ ├── list.html.twig │ ├── list__action.html.twig │ ├── list__action_delete.html.twig │ ├── list__action_edit.html.twig │ ├── list__action_history.html.twig │ ├── list__action_show.html.twig │ ├── list__batch.html.twig │ ├── list__select.html.twig │ ├── list_array.html.twig │ ├── list_boolean.html.twig │ ├── list_choice.html.twig │ ├── list_currency.html.twig │ ├── list_date.html.twig │ ├── list_datetime.html.twig │ ├── list_email.html.twig │ ├── list_enum.html.twig │ ├── list_html.html.twig │ ├── list_inner_row.html.twig │ ├── list_outer_rows_list.html.twig │ ├── list_outer_rows_mosaic.html.twig │ ├── list_percent.html.twig │ ├── list_string.html.twig │ ├── list_time.html.twig │ ├── list_trans.html.twig │ ├── list_url.html.twig │ ├── preview.html.twig │ ├── select_subclass.html.twig │ ├── show.html.twig │ ├── show_array.html.twig │ ├── show_boolean.html.twig │ ├── show_choice.html.twig │ ├── show_compare.html.twig │ ├── show_currency.html.twig │ ├── show_date.html.twig │ ├── show_datetime.html.twig │ ├── show_email.html.twig │ ├── show_enum.html.twig │ ├── show_html.html.twig │ ├── show_percent.html.twig │ ├── show_time.html.twig │ ├── show_trans.html.twig │ ├── show_url.html.twig │ └── tree.html.twig │ ├── Core │ ├── add_block.html.twig │ ├── dashboard.html.twig │ ├── search.html.twig │ ├── tab_menu_template.html.twig │ └── user_block.html.twig │ ├── Form │ ├── Type │ │ └── sonata_type_model_autocomplete.html.twig │ ├── filter_admin_fields.html.twig │ └── form_admin_fields.html.twig │ ├── Helper │ ├── render_form_dismissable_errors.html.twig │ └── short-object-description.html.twig │ ├── Menu │ └── sonata_menu.html.twig │ ├── Pager │ ├── base_links.html.twig │ ├── base_results.html.twig │ ├── links.html.twig │ ├── results.html.twig │ └── simple_pager_results.html.twig │ ├── ajax_layout.html.twig │ ├── empty_layout.html.twig │ └── standard_layout.html.twig ├── Route ├── AdminPoolLoader.php ├── DefaultRouteGenerator.php ├── PathInfoBuilder.php ├── RouteCollection.php ├── RouteCollectionInterface.php ├── RouteGeneratorInterface.php ├── RoutesCache.php └── RoutesCacheWarmUp.php ├── Search ├── ChainableFilterInterface.php ├── SearchHandler.php ├── SearchHandlerInterface.php └── SearchableFilterInterface.php ├── Security ├── Acl │ └── Permission │ │ ├── AdminPermissionMap.php │ │ └── MaskBuilder.php └── Handler │ ├── AclSecurityHandler.php │ ├── AclSecurityHandlerInterface.php │ ├── NoopSecurityHandler.php │ ├── RoleSecurityHandler.php │ └── SecurityHandlerInterface.php ├── Show └── ShowMapper.php ├── SonataAdminBundle.php ├── SonataConfiguration.php ├── Templating ├── AbstractTemplateRegistry.php ├── MutableTemplateRegistry.php ├── MutableTemplateRegistryAwareInterface.php ├── MutableTemplateRegistryInterface.php ├── TemplateRegistry.php ├── TemplateRegistryAwareInterface.php └── TemplateRegistryInterface.php ├── Translator ├── BCLabelTranslatorStrategy.php ├── Extractor │ └── AdminExtractor.php ├── FormLabelTranslatorStrategy.php ├── LabelTranslatorStrategyInterface.php ├── NativeLabelTranslatorStrategy.php ├── NoopLabelTranslatorStrategy.php └── UnderscoreLabelTranslatorStrategy.php ├── Twig ├── BreadcrumbsRuntime.php ├── CanonicalizeRuntime.php ├── Extension │ ├── BreadcrumbsExtension.php │ ├── CanonicalizeExtension.php │ ├── GroupExtension.php │ ├── IconExtension.php │ ├── RenderElementExtension.php │ ├── SecurityExtension.php │ ├── SonataAdminExtension.php │ ├── TemplateRegistryExtension.php │ └── XEditableExtension.php ├── GroupRuntime.php ├── IconRuntime.php ├── RenderElementRuntime.php ├── SecurityRuntime.php ├── SonataAdminRuntime.php ├── TemplateRegistryRuntime.php └── XEditableRuntime.php └── Util ├── AdminAclManipulator.php ├── AdminAclManipulatorInterface.php ├── AdminAclUserManagerInterface.php ├── AdminObjectAclData.php ├── AdminObjectAclManipulator.php ├── FormBuilderIterator.php ├── FormViewIterator.php ├── Instantiator.php ├── ObjectAclManipulator.php ├── ObjectAclManipulatorInterface.php ├── ParametersManipulator.php └── TraversableToCollection.php /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2010 Thomas Rabaix 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /assets/images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/assets/images/ajax-loader.gif -------------------------------------------------------------------------------- /assets/images/default_mosaic_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/assets/images/default_mosaic_image.png -------------------------------------------------------------------------------- /assets/images/logo_title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/assets/images/logo_title.png -------------------------------------------------------------------------------- /assets/js/base.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This file is part of the Sonata Project package. 3 | * 4 | * (c) Thomas Rabaix 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | const SonataCore = { 11 | remove_iCheck_in_flashmessage() { 12 | jQuery('.read-more-state').iCheck('destroy'); 13 | }, 14 | addFlashmessageListener() { 15 | document.querySelectorAll('.read-more-state').forEach((element) => { 16 | element.addEventListener('change', (event) => { 17 | const label = document.querySelector(`label[for="${element.id}"]`); 18 | const labelMore = label.querySelector('.more'); 19 | const labelLess = label.querySelector('.less'); 20 | 21 | if (event.target.checked) { 22 | labelMore.classList.add('hide'); 23 | labelLess.classList.remove('hide'); 24 | } else { 25 | labelMore.classList.remove('hide'); 26 | labelLess.classList.add('hide'); 27 | } 28 | }); 29 | }); 30 | }, 31 | }; 32 | 33 | jQuery(() => { 34 | SonataCore.remove_iCheck_in_flashmessage(); 35 | SonataCore.addFlashmessageListener(); 36 | }); 37 | -------------------------------------------------------------------------------- /assets/js/controllers.json: -------------------------------------------------------------------------------- 1 | { 2 | "controllers": [], 3 | "entrypoints": [] 4 | } 5 | -------------------------------------------------------------------------------- /assets/js/controllers/per_page_controller.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This file is part of the Sonata Project package. 3 | * 4 | * (c) Thomas Rabaix 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | import { Controller } from '@hotwired/stimulus'; 11 | 12 | export default class extends Controller { 13 | reload() { 14 | this.submitters.forEach((submitter) => { 15 | submitter.disabled = true; 16 | }); 17 | 18 | window.top.location.href = this.element.options[this.element.selectedIndex].value; 19 | } 20 | 21 | get submitters() { 22 | return document.querySelectorAll('input[type=submit], button[type=submit]'); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /assets/js/controllers/revision_controller.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This file is part of the Sonata Project package. 3 | * 4 | * (c) Thomas Rabaix 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | import { Controller } from '@hotwired/stimulus'; 11 | 12 | export default class extends Controller { 13 | static targets = ['preview']; 14 | 15 | showPreview(event) { 16 | const link = event.currentTarget; 17 | if (!(link instanceof HTMLAnchorElement)) { 18 | return; 19 | } 20 | 21 | const options = { 22 | method: 'GET', 23 | headers: { 24 | 'X-Requested-With': 'XMLHttpRequest', 25 | }, 26 | }; 27 | 28 | this.previewTarget.innerHTML = ''; 29 | fetch(link.href, options) 30 | .then((response) => response.text()) 31 | .then((response) => { 32 | this.previewTarget.innerHTML = response; 33 | }); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /assets/js/core/config.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This file is part of the Sonata Project package. 3 | * 4 | * (c) Thomas Rabaix 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | import { getMetaContent } from './utils'; 11 | 12 | class Config { 13 | params = null; 14 | 15 | param(key) { 16 | if (this.params === null) { 17 | try { 18 | this.params = JSON.parse(getMetaContent('sonata-config')); 19 | } catch (e) { 20 | throw new Error( 21 | `An error has occurred resolving the "sonata-config" meta tag: ${e.message}.` 22 | ); 23 | } 24 | } 25 | 26 | if (key in this.params) { 27 | return this.params[key]; 28 | } 29 | 30 | return null; 31 | } 32 | } 33 | 34 | export default new Config(); 35 | -------------------------------------------------------------------------------- /assets/js/core/translation.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This file is part of the Sonata Project package. 3 | * 4 | * (c) Thomas Rabaix 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | import { getMetaContent } from './utils'; 11 | 12 | class Translation { 13 | messages = null; 14 | 15 | trans(key) { 16 | if (this.messages === null) { 17 | try { 18 | this.messages = JSON.parse(getMetaContent('sonata-translations')); 19 | } catch (e) { 20 | throw new Error( 21 | `An error has occurred resolving the "sonata-translations" meta tag: ${e.message}.` 22 | ); 23 | } 24 | } 25 | 26 | if (key in this.messages) { 27 | return this.messages[key]; 28 | } 29 | 30 | return null; 31 | } 32 | } 33 | 34 | export default new Translation(); 35 | -------------------------------------------------------------------------------- /assets/js/sidebar.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This file is part of the Sonata Project package. 3 | * 4 | * (c) Thomas Rabaix 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | jQuery(() => { 11 | jQuery('.sidebar-toggle').on('click', () => { 12 | if (document.cookie.includes('sonata_sidebar_hide=1')) { 13 | document.cookie = 'sonata_sidebar_hide=0;path=/'; 14 | 15 | return; 16 | } 17 | 18 | document.cookie = 'sonata_sidebar_hide=1;path=/'; 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /assets/js/stimulus.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This file is part of the Sonata Project package. 3 | * 4 | * (c) Thomas Rabaix 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | // eslint-disable-next-line import/no-extraneous-dependencies 11 | import { definitionsFromContext } from '@hotwired/stimulus-webpack-helpers'; 12 | import { startStimulusApp } from '@symfony/stimulus-bridge'; 13 | 14 | // eslint-disable-next-line import/prefer-default-export 15 | export const sonataApplication = startStimulusApp(); 16 | 17 | const definitions = definitionsFromContext( 18 | require.context( 19 | '@symfony/stimulus-bridge/lazy-controller-loader!./controllers', 20 | true, 21 | /\.[jt]sx?$/ 22 | ) 23 | ); 24 | 25 | definitions.forEach((definition) => { 26 | definition.identifier = `sonata-${definition.identifier}`; 27 | }); 28 | 29 | sonataApplication.load(definitions); 30 | -------------------------------------------------------------------------------- /assets/scss/flashmessage.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * This file is part of the Sonata Project package. 3 | * 4 | * (c) Thomas Rabaix 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | .read-more-state { 11 | display: none; 12 | } 13 | 14 | .read-more-target { 15 | display: none; 16 | font-size: 0; 17 | max-height: 0; 18 | opacity: 0; 19 | transition: 0.4s ease; 20 | } 21 | 22 | .read-more-state:checked ~ .read-more-wrap .read-more-target { 23 | display: block; 24 | font-size: inherit; 25 | max-height: 999em; 26 | opacity: 1; 27 | } 28 | 29 | .read-more-trigger { 30 | cursor: pointer; 31 | margin: auto; 32 | } 33 | 34 | .alert .read-more-trigger { 35 | left: calc(50% - 1rem); 36 | position: relative; 37 | } 38 | -------------------------------------------------------------------------------- /assets/scss/readmore.scss: -------------------------------------------------------------------------------- 1 | .sonata-readmore { 2 | display: block; 3 | } 4 | 5 | .sonata-readmore-content { 6 | overflow: hidden; 7 | 8 | &.expanded { 9 | max-height: none !important; 10 | } 11 | 12 | :last-child { 13 | margin-bottom: 0; 14 | } 15 | } 16 | 17 | .sonata-readmore-btn { 18 | padding: 0; 19 | } 20 | 21 | .sonata-readmore-content:not(.truncated, .expanded) { 22 | + .sonata-readmore-btn, 23 | > .sonata-readmore-btn { 24 | display: none; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/Admin/AccessRegistryInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Admin; 15 | 16 | /** 17 | * Tells if the current user has access to a given action. 18 | * 19 | * @author Thomas Rabaix 20 | * 21 | * @phpstan-template T of object 22 | */ 23 | interface AccessRegistryInterface 24 | { 25 | /** 26 | * Hook to handle access authorization. 27 | * 28 | * @phpstan-param T|null $object 29 | */ 30 | public function checkAccess(string $action, ?object $object = null): void; 31 | 32 | /** 33 | * Hook to handle access authorization, without throwing an exception. 34 | * 35 | * @phpstan-param T|null $object 36 | */ 37 | public function hasAccess(string $action, ?object $object = null): bool; 38 | } 39 | -------------------------------------------------------------------------------- /src/Admin/AdminTreeInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Admin; 15 | 16 | /** 17 | * @author Jules Lamur 18 | */ 19 | interface AdminTreeInterface 20 | { 21 | /** 22 | * Returns the root ancestor or itself if not a child. 23 | * 24 | * @return AdminInterface 25 | */ 26 | public function getRootAncestor(): AdminInterface; 27 | 28 | /** 29 | * Returns the depth of the admin. 30 | * e.g. 0 if not a child; 2 if child of a child; etc... 31 | */ 32 | public function getChildDepth(): int; 33 | 34 | /** 35 | * Returns the current leaf child admin instance, 36 | * or null if there's no current child. 37 | * 38 | * @return AdminInterface|null 39 | */ 40 | public function getCurrentLeafChildAdmin(): ?AdminInterface; 41 | } 42 | -------------------------------------------------------------------------------- /src/Admin/BreadcrumbsBuilderInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Admin; 15 | 16 | use Knp\Menu\ItemInterface; 17 | 18 | /** 19 | * Builds a breacrumbs. There is a dependency on the AdminInterface because 20 | * this object holds useful object to deal with this task, but there is 21 | * probably a better design. 22 | * 23 | * @author Grégoire Paris 24 | */ 25 | interface BreadcrumbsBuilderInterface 26 | { 27 | /** 28 | * Get breadcrumbs for $action. 29 | * 30 | * @param AdminInterface $admin 31 | * @param string $action the name of the action we want to get a breadcrumbs for 32 | * 33 | * @return ItemInterface[] the breadcrumbs 34 | */ 35 | public function getBreadcrumbs(AdminInterface $admin, string $action): array; 36 | } 37 | -------------------------------------------------------------------------------- /src/ArgumentResolver/CompatibleValueResolverInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\ArgumentResolver; 15 | 16 | use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface; 17 | use Symfony\Component\HttpKernel\Controller\ValueResolverInterface; 18 | 19 | // TODO: Remove this interface when dropping support of Symfony < 6.2 and replace its usage with ValueResolverInterface 20 | if (interface_exists(ValueResolverInterface::class)) { 21 | /** @internal */ 22 | interface CompatibleValueResolverInterface extends ValueResolverInterface 23 | { 24 | } 25 | } elseif (interface_exists(ArgumentValueResolverInterface::class)) { 26 | /** @internal */ 27 | interface CompatibleValueResolverInterface extends ArgumentValueResolverInterface 28 | { 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/BCLayer/BCHelper.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\BCLayer; 15 | 16 | use Doctrine\Common\Util\ClassUtils; 17 | use Sonata\AdminBundle\Model\ProxyResolverInterface; 18 | 19 | /** 20 | * @internal 21 | */ 22 | final class BCHelper 23 | { 24 | /** 25 | * @return class-string 26 | */ 27 | public static function getClass(object $object): string 28 | { 29 | $classFromDoctrine = ClassUtils::getClass($object); 30 | $class = $object::class; 31 | 32 | if ($class !== $classFromDoctrine) { 33 | @trigger_error(\sprintf( 34 | 'Using proxy class "%s" without a model manager which implements %s is deprecated' 35 | .' since sonata-project/admin-bundle version 4.17 and will not work in 5.0 version.', 36 | $class, 37 | ProxyResolverInterface::class 38 | ), \E_USER_DEPRECATED); 39 | } 40 | 41 | return $classFromDoctrine; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/Builder/BuilderInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Builder; 15 | 16 | use Sonata\AdminBundle\FieldDescription\FieldDescriptionInterface; 17 | 18 | /** 19 | * @author Thomas Rabaix 20 | * 21 | * NEXT_MAJOR: Remove this interface 22 | * 23 | * @deprecated since sonata-project/admin-bundle version 4.1 and will be removed in 5.0. 24 | */ 25 | interface BuilderInterface 26 | { 27 | /** 28 | * Adds missing information to the given field description and the given admin. 29 | * 30 | * @param FieldDescriptionInterface $fieldDescription will be modified 31 | */ 32 | public function fixFieldDescription(FieldDescriptionInterface $fieldDescription): void; 33 | } 34 | -------------------------------------------------------------------------------- /src/Builder/RouteBuilderInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Builder; 15 | 16 | use Sonata\AdminBundle\Admin\AdminInterface; 17 | use Sonata\AdminBundle\Route\RouteCollectionInterface; 18 | 19 | /** 20 | * @author Thomas Rabaix 21 | */ 22 | interface RouteBuilderInterface 23 | { 24 | /** 25 | * @param AdminInterface $admin 26 | */ 27 | public function build(AdminInterface $admin, RouteCollectionInterface $collection): void; 28 | } 29 | -------------------------------------------------------------------------------- /src/Builder/ShowBuilderInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Builder; 15 | 16 | use Sonata\AdminBundle\FieldDescription\FieldDescriptionCollection; 17 | use Sonata\AdminBundle\FieldDescription\FieldDescriptionInterface; 18 | 19 | /** 20 | * NEXT_MAJOR: Avoid extending deprecated BuilderInterface. 21 | * 22 | * @author Thomas Rabaix 23 | */ 24 | interface ShowBuilderInterface extends BuilderInterface 25 | { 26 | /** 27 | * @param array $options 28 | * 29 | * @return FieldDescriptionCollection 30 | */ 31 | public function getBaseList(array $options = []): FieldDescriptionCollection; 32 | 33 | /** 34 | * @param FieldDescriptionCollection $list 35 | */ 36 | public function addField( 37 | FieldDescriptionCollection $list, 38 | ?string $type, 39 | FieldDescriptionInterface $fieldDescription, 40 | ): void; 41 | } 42 | -------------------------------------------------------------------------------- /src/DependencyInjection/Compiler/AdminAddInitializeCallCompilerPass.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\DependencyInjection\Compiler; 15 | 16 | use Sonata\AdminBundle\DependencyInjection\Admin\TaggedAdminInterface; 17 | use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 18 | use Symfony\Component\DependencyInjection\ContainerBuilder; 19 | 20 | /** 21 | * this compiler pass is registered with low priority to make sure it runs after all the other passes 22 | * as we want the "initialize()" calls to come after all the other calls. 23 | * 24 | * @internal 25 | */ 26 | final class AdminAddInitializeCallCompilerPass implements CompilerPassInterface 27 | { 28 | public function process(ContainerBuilder $container): void 29 | { 30 | $admins = $container->findTaggedServiceIds(TaggedAdminInterface::ADMIN_TAG); 31 | foreach (array_keys($admins) as $id) { 32 | $container->getDefinition($id)->addMethodCall('initialize'); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/DependencyInjection/Compiler/GlobalVariablesCompilerPass.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\DependencyInjection\Compiler; 15 | 16 | use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 17 | use Symfony\Component\DependencyInjection\ContainerBuilder; 18 | use Symfony\Component\DependencyInjection\Reference; 19 | 20 | /** 21 | * @internal 22 | * 23 | * @author Thomas Rabaix 24 | */ 25 | final class GlobalVariablesCompilerPass implements CompilerPassInterface 26 | { 27 | public function process(ContainerBuilder $container): void 28 | { 29 | $container->getDefinition('twig') 30 | ->addMethodCall('addGlobal', ['sonata_config', new Reference('sonata.admin.configuration')]); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Event/ConfigureMenuEvent.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Event; 15 | 16 | use Knp\Menu\FactoryInterface; 17 | use Knp\Menu\ItemInterface; 18 | use Symfony\Contracts\EventDispatcher\Event; 19 | 20 | /** 21 | * Menu builder event. Used for extending the menus. 22 | * 23 | * @author Martin Hasoň 24 | */ 25 | final class ConfigureMenuEvent extends Event 26 | { 27 | public const SIDEBAR = 'sonata.admin.event.configure.menu.sidebar'; 28 | 29 | public function __construct( 30 | private FactoryInterface $factory, 31 | private ItemInterface $menu, 32 | ) { 33 | } 34 | 35 | public function getFactory(): FactoryInterface 36 | { 37 | return $this->factory; 38 | } 39 | 40 | public function getMenu(): ItemInterface 41 | { 42 | return $this->menu; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Exception/AbstractClassException.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | /** 17 | * @author Morgan Abraham 18 | */ 19 | final class AbstractClassException extends \InvalidArgumentException 20 | { 21 | /** 22 | * @param class-string $class 23 | */ 24 | public function __construct(string $class) 25 | { 26 | parent::__construct(\sprintf('Cannot initialize abstract class: %s', $class)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Exception/AdminClassNotFoundException.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class AdminClassNotFoundException extends \InvalidArgumentException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /src/Exception/AdminCodeNotFoundException.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class AdminCodeNotFoundException extends \InvalidArgumentException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /src/Exception/BadRequestParamHttpException.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; 17 | 18 | /** 19 | * @author Thomas Rabaix 20 | */ 21 | final class BadRequestParamHttpException extends BadRequestHttpException 22 | { 23 | /** 24 | * @param string|string[] $expectedTypes 25 | */ 26 | public function __construct( 27 | string $name, 28 | $expectedTypes, 29 | mixed $value, 30 | ) { 31 | if (!\is_array($expectedTypes)) { 32 | $expectedTypes = [$expectedTypes]; 33 | } 34 | 35 | $message = \sprintf( 36 | 'Expected request parameter "%s" of type "%s", %s given', 37 | $name, 38 | implode('|', $expectedTypes), 39 | \is_object($value) ? 'instance of "'.$value::class.'"' : '"'.\gettype($value).'"' 40 | ); 41 | 42 | parent::__construct($message); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Exception/LockException.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | /** 17 | * @author Emmanuel Vella 18 | */ 19 | final class LockException extends \Exception 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /src/Exception/ModelManagerException.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class ModelManagerException extends \Exception implements ModelManagerThrowable 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /src/Exception/ModelManagerThrowable.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | interface ModelManagerThrowable extends \Throwable 17 | { 18 | } 19 | -------------------------------------------------------------------------------- /src/Exception/NoValueException.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class NoValueException extends \Exception 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /src/Exception/TooManyAdminClassException.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exception; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class TooManyAdminClassException extends \InvalidArgumentException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /src/Exporter/DataSourceInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Exporter; 15 | 16 | use Sonata\AdminBundle\Datagrid\ProxyQueryInterface; 17 | 18 | interface DataSourceInterface 19 | { 20 | /** 21 | * @param ProxyQueryInterface $query 22 | * @param string[] $fields 23 | * 24 | * @return \Iterator> 25 | */ 26 | public function createIterator(ProxyQueryInterface $query, array $fields): \Iterator; 27 | } 28 | -------------------------------------------------------------------------------- /src/FieldDescription/FieldDescriptionFactoryInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\FieldDescription; 15 | 16 | /** 17 | * @phpstan-import-type FieldDescriptionOptions from FieldDescriptionInterface 18 | */ 19 | interface FieldDescriptionFactoryInterface 20 | { 21 | /** 22 | * @phpstan-param class-string $class 23 | * @phpstan-param FieldDescriptionOptions $options 24 | */ 25 | public function create(string $class, string $name, array $options = []): FieldDescriptionInterface; 26 | } 27 | -------------------------------------------------------------------------------- /src/FieldDescription/TypeGuesserInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\FieldDescription; 15 | 16 | use Symfony\Component\Form\Guess\TypeGuess; 17 | 18 | interface TypeGuesserInterface 19 | { 20 | public function guess(FieldDescriptionInterface $fieldDescription): ?TypeGuess; 21 | } 22 | -------------------------------------------------------------------------------- /src/Filter/FilterFactory.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Filter; 15 | 16 | use Psr\Container\ContainerInterface; 17 | 18 | /** 19 | * @author Thomas Rabaix 20 | */ 21 | final class FilterFactory implements FilterFactoryInterface 22 | { 23 | public function __construct( 24 | private ContainerInterface $container, 25 | ) { 26 | } 27 | 28 | public function create(string $name, string $type, array $options = []): FilterInterface 29 | { 30 | if (!$this->container->has($type)) { 31 | throw new \RuntimeException(\sprintf('No attached service to type named `%s`', $type)); 32 | } 33 | 34 | $filter = $this->container->get($type); 35 | 36 | if (!$filter instanceof FilterInterface) { 37 | throw new \RuntimeException(\sprintf('The service `%s` must implement `FilterInterface`', $type)); 38 | } 39 | 40 | $filter->initialize($name, $options); 41 | 42 | return $filter; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Filter/FilterFactoryInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Filter; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | interface FilterFactoryInterface 20 | { 21 | /** 22 | * @param array $options 23 | * 24 | * @phpstan-param class-string $type 25 | */ 26 | public function create(string $name, string $type, array $options = []): FilterInterface; 27 | } 28 | -------------------------------------------------------------------------------- /src/Form/Type/CollectionType.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Form\Type; 15 | 16 | use Symfony\Component\Form\AbstractType; 17 | use Symfony\Component\Form\Extension\Core\Type\CollectionType as SymfonyCollectionType; 18 | use Symfony\Component\Form\FormTypeInterface; 19 | 20 | /** 21 | * This type wrap native `collection` form type and render `add` and `delete` 22 | * buttons in standard Symfony` collection form type. 23 | * 24 | * @author Andrej Hudec 25 | * 26 | * @psalm-suppress MissingTemplateParam https://github.com/phpstan/phpstan-symfony/issues/320 27 | */ 28 | final class CollectionType extends AbstractType 29 | { 30 | /** 31 | * @phpstan-return class-string 32 | */ 33 | public function getParent(): string 34 | { 35 | return SymfonyCollectionType::class; 36 | } 37 | 38 | public function getBlockPrefix(): string 39 | { 40 | return 'sonata_type_native_collection'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/Mapper/MapperInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Mapper; 15 | 16 | use Sonata\AdminBundle\Admin\AdminInterface; 17 | 18 | /** 19 | * This interface is used to simulate the Form API. 20 | * 21 | * @author Thomas Rabaix 22 | * 23 | * @phpstan-template T of object 24 | */ 25 | interface MapperInterface 26 | { 27 | /** 28 | * @phpstan-return AdminInterface 29 | */ 30 | public function getAdmin(): AdminInterface; 31 | 32 | /** 33 | * @return mixed 34 | */ 35 | public function get(string $key); 36 | 37 | public function has(string $key): bool; 38 | 39 | /** 40 | * @return $this 41 | */ 42 | public function remove(string $key); 43 | 44 | /** 45 | * Returns configured keys. 46 | * 47 | * @return string[] 48 | */ 49 | public function keys(): array; 50 | 51 | /** 52 | * @param string[] $keys 53 | * 54 | * @return $this 55 | */ 56 | public function reorder(array $keys); 57 | } 58 | -------------------------------------------------------------------------------- /src/Menu/Matcher/Voter/ActiveVoter.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Menu\Matcher\Voter; 15 | 16 | use Knp\Menu\ItemInterface; 17 | use Knp\Menu\Matcher\Voter\VoterInterface; 18 | 19 | /** 20 | * Active menu voter bases in extra `active`. 21 | * 22 | * @author Samusev Andrey 23 | */ 24 | final class ActiveVoter implements VoterInterface 25 | { 26 | public function matchItem(ItemInterface $item): ?bool 27 | { 28 | if (false === $item->getExtra('sonata_admin', false)) { 29 | return null; 30 | } 31 | 32 | $active = $item->getExtra('active'); 33 | if (null === $active) { 34 | return null; 35 | } 36 | 37 | return (bool) $active; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/Model/LockInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Model; 15 | 16 | use Sonata\AdminBundle\Exception\LockException; 17 | 18 | /** 19 | * @author Emmanuel Vella 20 | * 21 | * @phpstan-template T of object 22 | * @phpstan-extends ModelManagerInterface 23 | */ 24 | interface LockInterface extends ModelManagerInterface 25 | { 26 | /** 27 | * @return mixed 28 | * 29 | * @phpstan-param T $object 30 | */ 31 | public function getLockVersion(object $object); 32 | 33 | /** 34 | * @throws LockException 35 | * 36 | * @phpstan-param T $object 37 | */ 38 | public function lock(object $object, ?int $expectedVersion): void; 39 | } 40 | -------------------------------------------------------------------------------- /src/Model/ProxyResolverInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Model; 15 | 16 | interface ProxyResolverInterface 17 | { 18 | /** 19 | * Gets the real class name of an object (even if its a proxy). 20 | * 21 | * @phpstan-return class-string 22 | */ 23 | public function getRealClass(object $object): string; 24 | } 25 | -------------------------------------------------------------------------------- /src/Model/Revision.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Model; 15 | 16 | final class Revision 17 | { 18 | public function __construct( 19 | private int|string $id, 20 | private \DateTimeInterface $dateTime, 21 | private ?string $username, 22 | ) { 23 | } 24 | 25 | public function getId(): int|string 26 | { 27 | return $this->id; 28 | } 29 | 30 | public function getRev(): int|string 31 | { 32 | return $this->id; 33 | } 34 | 35 | public function getDateTime(): \DateTimeInterface 36 | { 37 | return $this->dateTime; 38 | } 39 | 40 | public function getTimestamp(): \DateTimeInterface 41 | { 42 | return $this->dateTime; 43 | } 44 | 45 | public function getUsername(): ?string 46 | { 47 | return $this->username; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/Object/MetadataInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Object; 15 | 16 | interface MetadataInterface 17 | { 18 | public function getTitle(): string; 19 | 20 | public function getDescription(): ?string; 21 | 22 | public function getImage(): ?string; 23 | 24 | public function getDomain(): ?string; 25 | 26 | /** 27 | * @return array 28 | */ 29 | public function getOptions(): array; 30 | 31 | /** 32 | * @param string $name 33 | * 34 | * @return mixed 35 | */ 36 | public function getOption($name, mixed $default = null); 37 | } 38 | -------------------------------------------------------------------------------- /src/Request/AdminFetcherInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Request; 15 | 16 | use Sonata\AdminBundle\Admin\AdminInterface; 17 | use Sonata\AdminBundle\Exception\AdminCodeNotFoundException; 18 | use Symfony\Component\HttpFoundation\Request; 19 | 20 | interface AdminFetcherInterface 21 | { 22 | /** 23 | * @throws \InvalidArgumentException if the admin code is not found in the request 24 | * @throws AdminCodeNotFoundException if no admin was found for the admin code provided 25 | * 26 | * @return AdminInterface 27 | */ 28 | public function get(Request $request): AdminInterface; 29 | } 30 | -------------------------------------------------------------------------------- /src/Resources/config/event_listener.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Symfony\Component\DependencyInjection\Loader\Configurator; 15 | 16 | use Sonata\AdminBundle\EventListener\ConfigureCRUDControllerListener; 17 | 18 | return static function (ContainerConfigurator $containerConfigurator): void { 19 | $containerConfigurator->services() 20 | 21 | // @phpstan-ignore-next-line classConstant.internalClass 22 | ->set('sonata.admin.event_listener.configure_crud_controller', ConfigureCRUDControllerListener::class) 23 | ->tag('kernel.event_subscriber'); 24 | }; 25 | -------------------------------------------------------------------------------- /src/Resources/config/exporter.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Symfony\Component\DependencyInjection\Loader\Configurator; 15 | 16 | use Sonata\AdminBundle\Bridge\Exporter\AdminExporter; 17 | 18 | return static function (ContainerConfigurator $containerConfigurator): void { 19 | $containerConfigurator->services() 20 | 21 | ->set('sonata.admin.admin_exporter', AdminExporter::class) 22 | ->args([ 23 | service('sonata.exporter.exporter'), 24 | ]) 25 | 26 | ->alias(AdminExporter::class, 'sonata.admin.admin_exporter'); 27 | }; 28 | -------------------------------------------------------------------------------- /src/Resources/config/makers.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Symfony\Component\DependencyInjection\Loader\Configurator; 15 | 16 | use Sonata\AdminBundle\Maker\AdminMaker; 17 | 18 | return static function (ContainerConfigurator $containerConfigurator): void { 19 | $containerConfigurator->services() 20 | 21 | ->set('sonata.admin.maker', AdminMaker::class) 22 | ->tag('maker.command') 23 | ->args([ 24 | param('kernel.project_dir'), 25 | abstract_arg('available model managers'), 26 | param('sonata.admin.configuration.default_controller'), 27 | ]); 28 | }; 29 | -------------------------------------------------------------------------------- /src/Resources/public/entrypoints.json: -------------------------------------------------------------------------------- 1 | { 2 | "entrypoints": { 3 | "app": { 4 | "css": [ 5 | "./app.css" 6 | ], 7 | "js": [ 8 | "./app.js" 9 | ] 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-brands-400.eot -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-brands-400.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-regular-400.eot -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-regular-400.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-solid-900.eot -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-solid-900.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/Resources/public/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/Resources/public/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-all-300-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-all-300-italic.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-all-300-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-all-300-normal.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-all-400-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-all-400-italic.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-all-400-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-all-400-normal.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-all-600-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-all-600-italic.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-all-600-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-all-600-normal.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-all-700-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-all-700-normal.woff -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-300-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-300-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-300-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-300-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-400-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-400-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-400-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-400-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-600-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-600-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-600-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-600-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-700-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-700-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-ext-300-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-ext-300-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-ext-300-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-ext-300-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-ext-400-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-ext-400-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-ext-400-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-ext-400-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-ext-600-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-ext-600-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-ext-600-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-ext-600-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-cyrillic-ext-700-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-cyrillic-ext-700-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-300-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-300-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-300-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-300-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-400-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-400-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-400-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-400-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-600-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-600-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-600-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-600-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-700-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-700-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-ext-300-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-ext-300-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-ext-300-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-ext-300-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-ext-400-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-ext-400-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-ext-400-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-ext-400-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-ext-600-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-ext-600-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-ext-600-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-ext-600-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-greek-ext-700-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-greek-ext-700-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-300-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-300-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-300-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-300-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-400-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-400-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-400-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-400-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-600-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-600-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-600-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-600-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-700-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-700-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-ext-300-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-ext-300-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-ext-300-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-ext-300-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-ext-400-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-ext-400-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-ext-400-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-ext-400-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-ext-600-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-ext-600-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-ext-600-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-ext-600-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-latin-ext-700-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-latin-ext-700-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-vietnamese-300-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-vietnamese-300-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-vietnamese-300-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-vietnamese-300-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-vietnamese-400-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-vietnamese-400-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-vietnamese-400-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-vietnamese-400-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-vietnamese-600-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-vietnamese-600-italic.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-vietnamese-600-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-vietnamese-600-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/fonts/source-sans-pro-vietnamese-700-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/fonts/source-sans-pro-vietnamese-700-normal.woff2 -------------------------------------------------------------------------------- /src/Resources/public/images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/images/ajax-loader.gif -------------------------------------------------------------------------------- /src/Resources/public/images/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/images/blue.png -------------------------------------------------------------------------------- /src/Resources/public/images/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/images/blue@2x.png -------------------------------------------------------------------------------- /src/Resources/public/images/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/images/clear.png -------------------------------------------------------------------------------- /src/Resources/public/images/default_mosaic_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/images/default_mosaic_image.png -------------------------------------------------------------------------------- /src/Resources/public/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/images/loading.gif -------------------------------------------------------------------------------- /src/Resources/public/images/logo_title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sonata-project/SonataAdminBundle/172160a11985cb809bb551bf284be4bf771cfe73/src/Resources/public/images/logo_title.png -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/af.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/af",[],(function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Verwyders asseblief "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Voer asseblief "+(e.minimum-e.input.length)+" of meer karakters"},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var n="Kies asseblief net "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"},removeAllItems:function(){return"Verwyder alle items"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ar.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ar",[],(function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(n){return"الرجاء حذف "+(n.input.length-n.maximum)+" عناصر"},inputTooShort:function(n){return"الرجاء إضافة "+(n.minimum-n.input.length)+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(n){return"تستطيع إختيار "+n.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"},removeAllItems:function(){return"قم بإزالة كل العناصر"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/az.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/az",[],(function(){return{inputTooLong:function(n){return n.input.length-n.maximum+" simvol silin"},inputTooShort:function(n){return n.minimum-n.input.length+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(n){return"Sadəcə "+n.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"},removeAllItems:function(){return"Bütün elementləri sil"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/bg.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bg",[],(function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u="Моля въведете с "+e+" по-малко символ";return e>1&&(u+="a"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u="Моля въведете още "+e+" символ";return e>1&&(u+="a"),u},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(n){var e="Можете да направите до "+n.maximum+" ";return n.maximum>1?e+="избора":e+="избор",e},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"},removeAllItems:function(){return"Премахнете всички елементи"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/bn.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bn",[],(function(){return{errorLoading:function(){return"ফলাফলগুলি লোড করা যায়নি।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।";return 1!=e&&(u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।"),u},inputTooShort:function(n){return n.minimum-n.input.length+" টি অক্ষর অথবা অধিক অক্ষর লিখুন।"},loadingMore:function(){return"আরো ফলাফল লোড হচ্ছে ..."},maximumSelected:function(n){var e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।";return 1!=n.maximum&&(e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।"),e},noResults:function(){return"কোন ফলাফল পাওয়া যায়নি।"},searching:function(){return"অনুসন্ধান করা হচ্ছে ..."}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/bs.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/bs",[],(function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspijelo."},inputTooLong:function(n){var r=n.input.length-n.maximum;return"Obrišite "+r+" simbol"+e(r,"","a","a")},inputTooShort:function(n){var r=n.minimum-n.input.length;return"Ukucajte bar još "+r+" simbol"+e(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(n){return"Možete izabrati samo "+n.maximum+" stavk"+e(n.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Uklonite sve stavke"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ca.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ca",[],(function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Si us plau, elimina "+n+" car"+(1==n?"àcter":"àcters")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Si us plau, introdueix "+n+" car"+(1==n?"àcter":"àcters")},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var n="Només es pot seleccionar "+e.maximum+" element";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"},removeAllItems:function(){return"Treu tots els elements"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/cs.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/cs",[],(function(){function e(e,n){switch(e){case 2:return n?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadejte o jeden znak méně.":t<=4?"Prosím, zadejte o "+e(t,!0)+" znaky méně.":"Prosím, zadejte o "+t+" znaků méně."},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadejte ještě jeden znak.":t<=4?"Prosím, zadejte ještě další "+e(t,!0)+" znaky.":"Prosím, zadejte ještě dalších "+t+" znaků."},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(n){var t=n.maximum;return 1==t?"Můžete zvolit jen jednu položku.":t<=4?"Můžete zvolit maximálně "+e(t,!1)+" položky.":"Můžete zvolit maximálně "+t+" položek."},noResults:function(){return"Nenalezeny žádné položky."},searching:function(){return"Vyhledávání…"},removeAllItems:function(){return"Odstraňte všechny položky"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/da.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/da",[],(function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){return"Angiv venligst "+(e.input.length-e.maximum)+" tegn mindre"},inputTooShort:function(e){return"Angiv venligst "+(e.minimum-e.input.length)+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var n="Du kan kun vælge "+e.maximum+" emne";return 1!=e.maximum&&(n+="r"),n},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"},removeAllItems:function(){return"Fjern alle elementer"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/de.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/de",[],(function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/dsb.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/dsb",[],(function(){var n=["znamuško","znamušce","znamuška","znamuškow"],e=["zapisk","zapiska","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njejsu se dali zacytaś."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Pšosym lašuj "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Pšosym zapódaj nanejmjenjej "+a+" "+u(a,n)},loadingMore:function(){return"Dalšne wuslědki se zacytaju…"},maximumSelected:function(n){return"Móžoš jano "+n.maximum+" "+u(n.maximum,e)+"wubraś."},noResults:function(){return"Žedne wuslědki namakane"},searching:function(){return"Pyta se…"},removeAllItems:function(){return"Remove all items"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/el.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/el",[],(function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(n){var e=n.input.length-n.maximum,u="Παρακαλώ διαγράψτε "+e+" χαρακτήρ";return 1==e&&(u+="α"),1!=e&&(u+="ες"),u},inputTooShort:function(n){return"Παρακαλώ συμπληρώστε "+(n.minimum-n.input.length)+" ή περισσότερους χαρακτήρες"},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(n){var e="Μπορείτε να επιλέξετε μόνο "+n.maximum+" επιλογ";return 1==n.maximum&&(e+="ή"),1!=n.maximum&&(e+="ές"),e},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"},removeAllItems:function(){return"Καταργήστε όλα τα στοιχεία"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/en.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/en",[],(function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Please delete "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var n="You can only select "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/es.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/es",[],(function(){return{errorLoading:function(){return"No se pudieron cargar los resultados"},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Por favor, elimine "+n+" car"+(1==n?"ácter":"acteres")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Por favor, introduzca "+n+" car"+(1==n?"ácter":"acteres")},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var n="Sólo puede seleccionar "+e.maximum+" elemento";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Eliminar todos los elementos"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/et.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/et",[],(function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+" vähem"},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+" rohkem"},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var n="Saad vaid "+e.maximum+" tulemus";return 1==e.maximum?n+="e":n+="t",n+" valida"},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"},removeAllItems:function(){return"Eemalda kõik esemed"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/eu.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/eu",[],(function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return(n+=1==t?"karaktere bat":t+" karaktere")+" gutxiago"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return(n+=1==t?"karaktere bat":t+" karaktere")+" gehiago"},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return 1===e.maximum?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"},removeAllItems:function(){return"Kendu elementu guztiak"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/fa.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fa",[],(function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(n){return"لطفاً "+(n.input.length-n.maximum)+" کاراکتر را حذف نمایید"},inputTooShort:function(n){return"لطفاً تعداد "+(n.minimum-n.input.length)+" کاراکتر یا بیشتر وارد نمایید"},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(n){return"شما تنها می‌توانید "+n.maximum+" آیتم را انتخاب نمایید"},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."},removeAllItems:function(){return"همه موارد را حذف کنید"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/fi.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fi",[],(function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(n){return"Ole hyvä ja anna "+(n.input.length-n.maximum)+" merkkiä vähemmän"},inputTooShort:function(n){return"Ole hyvä ja anna "+(n.minimum-n.input.length)+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(n){return"Voit valita ainoastaan "+n.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"},removeAllItems:function(){return"Poista kaikki kohteet"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/fr.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/fr",[],(function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Supprimez "+n+" caractère"+(n>1?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/gl.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/gl",[],(function(){return{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?"Elimine un carácter":"Elimine "+n+" caracteres"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?"Engada un carácter":"Engada "+n+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return 1===e.maximum?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Elimina todos os elementos"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/he.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/he",[],(function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(n){var e=n.input.length-n.maximum;return"נא למחוק "+(1===e?"תו אחד":e+" תווים")},inputTooShort:function(n){var e=n.minimum-n.input.length,r="נא להכניס ";return(r+=1===e?"תו אחד":e+" תווים")+" או יותר"},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(n){var e="באפשרותך לבחור עד ";return 1===n.maximum?e+="פריט אחד":e+=n.maximum+" פריטים",e},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"},removeAllItems:function(){return"הסר את כל הפריטים"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/hi.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hi",[],(function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+" अक्षर को हटा दें";return e>1&&(r=e+" अक्षरों को हटा दें "),r},inputTooShort:function(n){return"कृपया "+(n.minimum-n.input.length)+" या अधिक अक्षर दर्ज करें"},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(n){return"आप केवल "+n.maximum+" आइटम का चयन कर सकते हैं"},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."},removeAllItems:function(){return"सभी वस्तुओं को हटा दें"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/hr.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hr",[],(function(){function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+="a"):e+="ova",e}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(e){return"Unesite "+n(e.input.length-e.maximum)},inputTooShort:function(e){return"Unesite još "+n(e.minimum-e.input.length)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(n){return"Maksimalan broj odabranih stavki je "+n.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Ukloni sve stavke"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/hsb.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hsb",[],(function(){var n=["znamješko","znamješce","znamješka","znamješkow"],e=["zapisk","zapiskaj","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njedachu so začitać."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Prošu zhašej "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Prošu zapodaj znajmjeńša "+a+" "+u(a,n)},loadingMore:function(){return"Dalše wuslědki so začitaja…"},maximumSelected:function(n){return"Móžeš jenož "+n.maximum+" "+u(n.maximum,e)+"wubrać"},noResults:function(){return"Žane wuslědki namakane"},searching:function(){return"Pyta so…"},removeAllItems:function(){return"Remove all items"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/hu.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/hu",[],(function(){return{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},inputTooLong:function(e){return"Túl hosszú. "+(e.input.length-e.maximum)+" karakterrel több, mint kellene."},inputTooShort:function(e){return"Túl rövid. Még "+(e.minimum-e.input.length)+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"},removeAllItems:function(){return"Távolítson el minden elemet"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/hy.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hy",[],(function(){return{errorLoading:function(){return"Արդյունքները հնարավոր չէ բեռնել։"},inputTooLong:function(n){return"Խնդրում ենք հեռացնել "+(n.input.length-n.maximum)+" նշան"},inputTooShort:function(n){return"Խնդրում ենք մուտքագրել "+(n.minimum-n.input.length)+" կամ ավել նշաններ"},loadingMore:function(){return"Բեռնվում են նոր արդյունքներ․․․"},maximumSelected:function(n){return"Դուք կարող եք ընտրել առավելագույնը "+n.maximum+" կետ"},noResults:function(){return"Արդյունքներ չեն գտնվել"},searching:function(){return"Որոնում․․․"},removeAllItems:function(){return"Հեռացնել բոլոր տարրերը"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/id.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/id",[],(function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(n){return"Hapuskan "+(n.input.length-n.maximum)+" huruf"},inputTooShort:function(n){return"Masukkan "+(n.minimum-n.input.length)+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(n){return"Anda hanya dapat memilih "+n.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Hapus semua item"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/is.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/is",[],(function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e="Vinsamlegast styttið texta um "+t+" staf";return t<=1?e:e+"i"},inputTooShort:function(n){var t=n.minimum-n.input.length,e="Vinsamlegast skrifið "+t+" staf";return t>1&&(e+="i"),e+" í viðbót"},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(n){return"Þú getur aðeins valið "+n.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"},removeAllItems:function(){return"Fjarlægðu öll atriði"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/it.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/it",[],(function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Per favore cancella "+n+" caratter"+(1!==n?"i":"e")},inputTooShort:function(e){return"Per favore inserisci "+(e.minimum-e.input.length)+" o più caratteri"},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var n="Puoi selezionare solo "+e.maximum+" element";return 1!==e.maximum?n+="i":n+="o",n},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"},removeAllItems:function(){return"Rimuovi tutti gli oggetti"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ja.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ja",[],(function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(n){return n.input.length-n.maximum+" 文字を削除してください"},inputTooShort:function(n){return"少なくとも "+(n.minimum-n.input.length)+" 文字を入力してください"},loadingMore:function(){return"読み込み中…"},maximumSelected:function(n){return n.maximum+" 件しか選択できません"},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"},removeAllItems:function(){return"すべてのアイテムを削除"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ka.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ka",[],(function(){return{errorLoading:function(){return"მონაცემების ჩატვირთვა შეუძლებელია."},inputTooLong:function(n){return"გთხოვთ აკრიფეთ "+(n.input.length-n.maximum)+" სიმბოლოთი ნაკლები"},inputTooShort:function(n){return"გთხოვთ აკრიფეთ "+(n.minimum-n.input.length)+" სიმბოლო ან მეტი"},loadingMore:function(){return"მონაცემების ჩატვირთვა…"},maximumSelected:function(n){return"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს "+n.maximum+" ელემენტი"},noResults:function(){return"რეზულტატი არ მოიძებნა"},searching:function(){return"ძიება…"},removeAllItems:function(){return"ამოიღე ყველა ელემენტი"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/km.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/km",[],(function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(n){return"សូមលុបចេញ "+(n.input.length-n.maximum)+" អក្សរ"},inputTooShort:function(n){return"សូមបញ្ចូល"+(n.minimum-n.input.length)+" អក្សរ រឺ ច្រើនជាងនេះ"},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(n){return"អ្នកអាចជ្រើសរើសបានតែ "+n.maximum+" ជម្រើសប៉ុណ្ណោះ"},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."},removeAllItems:function(){return"លុបធាតុទាំងអស់"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ko.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ko",[],(function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/lt.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/lt",[],(function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum;return"Pašalinkite "+i+" simbol"+n(i,"į","ius","ių")},inputTooShort:function(e){var i=e.minimum-e.input.length;return"Įrašykite dar "+i+" simbol"+n(i,"į","ius","ių")},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(e){return"Jūs galite pasirinkti tik "+e.maximum+" element"+n(e.maximum,"ą","us","ų")},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"},removeAllItems:function(){return"Pašalinti visus elementus"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/lv.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/lv",[],(function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i="Lūdzu ievadiet par "+u;return(i+=" simbol"+e(u,"iem","u","iem"))+" mazāk"},inputTooShort:function(n){var u=n.minimum-n.input.length;return"Lūdzu ievadiet vēl "+u+" simbol"+e(u,"us","u","us")},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(n){return"Jūs varat izvēlēties ne vairāk kā "+n.maximum+" element"+e(n.maximum,"us","u","us")},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"},removeAllItems:function(){return"Noņemt visus vienumus"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/mk.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/mk",[],(function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,"Ве молиме внесете "+n.maximum+" помалку карактер");return 1!==n.maximum&&(e+="и"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,"Ве молиме внесете уште "+n.maximum+" карактер");return 1!==n.maximum&&(e+="и"),e},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(n){var e="Можете да изберете само "+n.maximum+" ставк";return 1===n.maximum?e+="а":e+="и",e},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"},removeAllItems:function(){return"Отстрани ги сите предмети"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ms.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ms",[],(function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(n){return"Sila hapuskan "+(n.input.length-n.maximum)+" aksara"},inputTooShort:function(n){return"Sila masukkan "+(n.minimum-n.input.length)+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(n){return"Anda hanya boleh memilih "+n.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Keluarkan semua item"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/nb.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nb",[],(function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){return"Vennligst fjern "+(e.input.length-e.maximum)+" tegn"},inputTooShort:function(e){return"Vennligst skriv inn "+(e.minimum-e.input.length)+" tegn til"},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"},removeAllItems:function(){return"Fjern alle elementer"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ne.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ne",[],(function(){return{errorLoading:function(){return"नतिजाहरु देखाउन सकिएन।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="कृपया "+e+" अक्षर मेटाउनुहोस्।";return 1!=e&&(u+="कृपया "+e+" अक्षरहरु मेटाउनुहोस्।"),u},inputTooShort:function(n){return"कृपया बाँकी रहेका "+(n.minimum-n.input.length)+" वा अरु धेरै अक्षरहरु भर्नुहोस्।"},loadingMore:function(){return"अरु नतिजाहरु भरिँदैछन् …"},maximumSelected:function(n){var e="तँपाई "+n.maximum+" वस्तु मात्र छान्न पाउँनुहुन्छ।";return 1!=n.maximum&&(e="तँपाई "+n.maximum+" वस्तुहरु मात्र छान्न पाउँनुहुन्छ।"),e},noResults:function(){return"कुनै पनि नतिजा भेटिएन।"},searching:function(){return"खोजि हुँदैछ…"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/nl.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nl",[],(function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){return"Gelieve "+(e.input.length-e.maximum)+" karakters te verwijderen"},inputTooShort:function(e){return"Gelieve "+(e.minimum-e.input.length)+" of meer karakters in te voeren"},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var n="Er "+(1==e.maximum?"kan":"kunnen")+" maar "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n+" worden geselecteerd"},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"},removeAllItems:function(){return"Verwijder alle items"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/pl.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/pl",[],(function(){var n=["znak","znaki","znaków"],e=["element","elementy","elementów"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Usuń "+t+" "+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Podaj przynajmniej "+t+" "+r(t,n)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(n){return"Możesz zaznaczyć tylko "+n.maximum+" "+r(n.maximum,e)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"},removeAllItems:function(){return"Usuń wszystkie przedmioty"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ps.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ps",[],(function(){return{errorLoading:function(){return"پايلي نه سي ترلاسه کېدای"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="د مهربانۍ لمخي "+e+" توری ړنګ کړئ";return 1!=e&&(r=r.replace("توری","توري")),r},inputTooShort:function(n){return"لږ تر لږه "+(n.minimum-n.input.length)+" يا ډېر توري وليکئ"},loadingMore:function(){return"نوري پايلي ترلاسه کيږي..."},maximumSelected:function(n){var e="تاسو يوازي "+n.maximum+" قلم په نښه کولای سی";return 1!=n.maximum&&(e=e.replace("قلم","قلمونه")),e},noResults:function(){return"پايلي و نه موندل سوې"},searching:function(){return"لټول کيږي..."},removeAllItems:function(){return"ټول توکي لرې کړئ"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/pt-BR.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt-BR",[],(function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Apague "+n+" caracter";return 1!=n&&(r+="es"),r},inputTooShort:function(e){return"Digite "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var n="Você só pode selecionar "+e.maximum+" ite";return 1==e.maximum?n+="m":n+="ns",n},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Remover todos os itens"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/pt.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt",[],(function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var r=e.input.length-e.maximum;return"Por favor apague "+r+" "+(1!=r?"caracteres":"caractere")},inputTooShort:function(e){return"Introduza "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){return"Apenas pode seleccionar "+e.maximum+" "+(1!=e.maximum?"itens":"item")},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"},removeAllItems:function(){return"Remover todos os itens"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ro.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ro",[],(function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return 1!==t&&(n+="e"),n},inputTooShort:function(e){return"Vă rugăm să introduceți "+(e.minimum-e.input.length)+" sau mai multe caractere"},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",1!==e.maximum&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"},removeAllItems:function(){return"Eliminați toate elementele"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/ru.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ru",[],(function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Пожалуйста, введите на "+r+" символ";return(u+=n(r,"","a","ов"))+" меньше"},inputTooShort:function(e){var r=e.minimum-e.input.length;return"Пожалуйста, введите ещё хотя бы "+r+" символ"+n(r,"","a","ов")},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(e){return"Вы можете выбрать не более "+e.maximum+" элемент"+n(e.maximum,"","a","ов")},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"},removeAllItems:function(){return"Удалить все элементы"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/sk.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sk",[],(function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{errorLoading:function(){return"Výsledky sa nepodarilo načítať."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadajte o jeden znak menej":t>=2&&t<=4?"Prosím, zadajte o "+e[t](!0)+" znaky menej":"Prosím, zadajte o "+t+" znakov menej"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadajte ešte jeden znak":t<=4?"Prosím, zadajte ešte ďalšie "+e[t](!0)+" znaky":"Prosím, zadajte ešte ďalších "+t+" znakov"},loadingMore:function(){return"Načítanie ďalších výsledkov…"},maximumSelected:function(n){return 1==n.maximum?"Môžete zvoliť len jednu položku":n.maximum>=2&&n.maximum<=4?"Môžete zvoliť najviac "+e[n.maximum](!1)+" položky":"Môžete zvoliť najviac "+n.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"},removeAllItems:function(){return"Odstráňte všetky položky"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/sl.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sl",[],(function(){return{errorLoading:function(){return"Zadetkov iskanja ni bilo mogoče naložiti."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Prosim zbrišite "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Prosim vpišite še "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},loadingMore:function(){return"Nalagam več zadetkov…"},maximumSelected:function(e){var n="Označite lahko največ "+e.maximum+" predmet";return 2==e.maximum?n+="a":1!=e.maximum&&(n+="e"),n},noResults:function(){return"Ni zadetkov."},searching:function(){return"Iščem…"},removeAllItems:function(){return"Odstranite vse elemente"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/sq.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sq",[],(function(){return{errorLoading:function(){return"Rezultatet nuk mund të ngarkoheshin."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Të lutem fshi "+n+" karakter";return 1!=n&&(t+="e"),t},inputTooShort:function(e){return"Të lutem shkruaj "+(e.minimum-e.input.length)+" ose më shumë karaktere"},loadingMore:function(){return"Duke ngarkuar më shumë rezultate…"},maximumSelected:function(e){var n="Mund të zgjedhësh vetëm "+e.maximum+" element";return 1!=e.maximum&&(n+="e"),n},noResults:function(){return"Nuk u gjet asnjë rezultat"},searching:function(){return"Duke kërkuar…"},removeAllItems:function(){return"Hiq të gjitha sendet"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/sr-Cyrl.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr-Cyrl",[],(function(){function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:u}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(e){var r=e.input.length-e.maximum;return"Обришите "+r+" симбол"+n(r,"","а","а")},inputTooShort:function(e){var r=e.minimum-e.input.length;return"Укуцајте бар још "+r+" симбол"+n(r,"","а","а")},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(e){return"Можете изабрати само "+e.maximum+" ставк"+n(e.maximum,"у","е","и")},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"},removeAllItems:function(){return"Уклоните све ставке"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/sr.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr",[],(function(){function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(e){var r=e.input.length-e.maximum;return"Obrišite "+r+" simbol"+n(r,"","a","a")},inputTooShort:function(e){var r=e.minimum-e.input.length;return"Ukucajte bar još "+r+" simbol"+n(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(e){return"Možete izabrati samo "+e.maximum+" stavk"+n(e.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Уклоните све ставке"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/sv.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sv",[],(function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(n){return"Vänligen sudda ut "+(n.input.length-n.maximum)+" tecken"},inputTooShort:function(n){return"Vänligen skriv in "+(n.minimum-n.input.length)+" eller fler tecken"},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(n){return"Du kan max välja "+n.maximum+" element"},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"},removeAllItems:function(){return"Ta bort alla objekt"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/th.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/th",[],(function(){return{errorLoading:function(){return"ไม่สามารถค้นข้อมูลได้"},inputTooLong:function(n){return"โปรดลบออก "+(n.input.length-n.maximum)+" ตัวอักษร"},inputTooShort:function(n){return"โปรดพิมพ์เพิ่มอีก "+(n.minimum-n.input.length)+" ตัวอักษร"},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(n){return"คุณสามารถเลือกได้ไม่เกิน "+n.maximum+" รายการ"},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"},removeAllItems:function(){return"ลบรายการทั้งหมด"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/tk.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/tk",[],(function(){return{errorLoading:function(){return"Netije ýüklenmedi."},inputTooLong:function(e){return e.input.length-e.maximum+" harp bozuň."},inputTooShort:function(e){return"Ýene-de iň az "+(e.minimum-e.input.length)+" harp ýazyň."},loadingMore:function(){return"Köpräk netije görkezilýär…"},maximumSelected:function(e){return"Diňe "+e.maximum+" sanysyny saýlaň."},noResults:function(){return"Netije tapylmady."},searching:function(){return"Gözlenýär…"},removeAllItems:function(){return"Remove all items"}}})),e.define,e.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/tr.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/tr",[],(function(){return{errorLoading:function(){return"Sonuç yüklenemedi"},inputTooLong:function(n){return n.input.length-n.maximum+" karakter daha girmelisiniz"},inputTooShort:function(n){return"En az "+(n.minimum-n.input.length)+" karakter daha girmelisiniz"},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(n){return"Sadece "+n.maximum+" seçim yapabilirsiniz"},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"},removeAllItems:function(){return"Tüm öğeleri kaldır"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/uk.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/uk",[],(function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(e){return"Будь ласка, видаліть "+(e.input.length-e.maximum)+" "+n(e.maximum,"літеру","літери","літер")},inputTooShort:function(n){return"Будь ласка, введіть "+(n.minimum-n.input.length)+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(e){return"Ви можете вибрати лише "+e.maximum+" "+n(e.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"},removeAllItems:function(){return"Видалити всі елементи"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/vi.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/vi",[],(function(){return{inputTooLong:function(n){return"Vui lòng xóa bớt "+(n.input.length-n.maximum)+" ký tự"},inputTooShort:function(n){return"Vui lòng nhập thêm từ "+(n.minimum-n.input.length)+" ký tự trở lên"},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(n){return"Chỉ có thể chọn được "+n.maximum+" lựa chọn"},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"},removeAllItems:function(){return"Xóa tất cả các mục"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/zh-CN.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-CN",[],(function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/public/select2-locale/zh-TW.js: -------------------------------------------------------------------------------- 1 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-TW",[],(function(){return{inputTooLong:function(n){return"請刪掉"+(n.input.length-n.maximum)+"個字元"},inputTooShort:function(n){return"請再輸入"+(n.minimum-n.input.length)+"個字元"},loadingMore:function(){return"載入中…"},maximumSelected:function(n){return"你只能選擇最多"+n.maximum+"項"},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"},removeAllItems:function(){return"刪除所有項目"}}})),n.define,n.require}(); -------------------------------------------------------------------------------- /src/Resources/skeleton/Admin.tpl.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | declare(strict_types=1); 4 | 5 | namespace ; 6 | 7 | use Sonata\AdminBundle\Admin\AbstractAdmin; 8 | use Sonata\AdminBundle\Datagrid\DatagridMapper; 9 | use Sonata\AdminBundle\Datagrid\ListMapper; 10 | use Sonata\AdminBundle\Form\FormMapper; 11 | use Sonata\AdminBundle\Show\ShowMapper; 12 | 13 | final class extends AbstractAdmin 14 | { 15 | 16 | protected function configureDatagridFilters(DatagridMapper $filter): void 17 | { 18 | $filter 19 | ; 20 | } 21 | 22 | protected function configureListFields(ListMapper $list): void 23 | { 24 | $list 25 | ->add(ListMapper::NAME_ACTIONS, null, [ 26 | 'actions' => [ 27 | 'show' => [], 28 | 'edit' => [], 29 | 'delete' => [], 30 | ], 31 | ]); 32 | } 33 | 34 | protected function configureFormFields(FormMapper $form): void 35 | { 36 | $form 37 | ; 38 | } 39 | 40 | protected function configureShowFields(ShowMapper $show): void 41 | { 42 | $show 43 | ; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/Resources/skeleton/AdminController.tpl.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | declare(strict_types=1); 4 | 5 | namespace ; 6 | 7 | use ; 8 | 9 | final class extends 10 | { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/Resources/views/Block/block_rss_dashboard.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends "@SonataBlock/Block/block_core_rss.html.twig" %} 13 | 14 | {% block block %} 15 |
16 |
17 |

{{ settings.title }}

18 |
19 | 20 |
21 | {% for feed in feeds %} 22 | 23 | {{ feed.title }} 24 |
{{ feed.description|raw }}
25 |
26 | {% else %} 27 |
No feeds available.
28 | {% endfor %} 29 |
30 |
31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /src/Resources/views/Block/block_stats.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends sonata_block.templates.block_base %} 13 | 14 | {% set translation_domain = settings.translation_domain ?? admin.translationDomain %} 15 | 16 | {% block block %} 17 | 18 |
19 |
20 |

{{ pager.countResults() }}

21 |

22 | {% if translation_domain %} 23 | {{ settings.text|trans({'%count%': pager.countResults()}, translation_domain) }} 24 | {% else %} 25 | {{ settings.text }} 26 | {% endif %} 27 |

28 |
29 |
30 | {{ settings.icon|parse_icon }} 31 |
32 | 33 | {{ 'stats_view_more'|trans({}, 'SonataAdminBundle') }} 34 | 35 |
36 | {% endblock %} 37 | -------------------------------------------------------------------------------- /src/Resources/views/Breadcrumb/breadcrumb.html.twig: -------------------------------------------------------------------------------- 1 | {% for menu in items %} 2 | {%- set translation_domain = menu.extra('translation_domain', 'messages') -%} 3 | {# We use method accessor instead of ".label" since `menu` implements `ArrayAccess` and could have a property called "label". #} 4 | {%- set label = menu.getLabel() -%} 5 | {%- if translation_domain is not same as(false) -%} 6 | {%- set label = label|trans(menu.extra('translation_params', {}), translation_domain) -%} 7 | {%- endif -%} 8 | 9 | {% if not loop.last %} 10 |
  • 11 | {% if menu.uri is not empty %} 12 | 13 | {% if menu.extra('safe_label', true) %} 14 | {{- label|raw -}} 15 | {% else %} 16 | {{- label|u.truncate(100, '...') -}} 17 | {% endif %} 18 | 19 | {% else %} 20 | {{ label|u.truncate(100, '...') }} 21 | {% endif %} 22 |
  • 23 | {% else %} 24 |
  • {{ label|u.truncate(100, '...') }}
  • 25 | {% endif %} 26 | {% endfor %} 27 | -------------------------------------------------------------------------------- /src/Resources/views/Breadcrumb/breadcrumb_title.html.twig: -------------------------------------------------------------------------------- 1 | {% for menu in items %} 2 | {% if not loop.first %} 3 | {% if loop.index != 2 %} 4 | > 5 | {% endif %} 6 | 7 | {%- set translation_domain = menu.extra('translation_domain', 'messages') -%} 8 | {# We use method accessor instead of ".label" since `menu` implements `ArrayAccess` and could have a property called "label". #} 9 | {%- set label = menu.getLabel() -%} 10 | {%- if translation_domain is not same as(false) -%} 11 | {%- set label = label|trans(menu.extra('translation_params', {}), translation_domain) -%} 12 | {%- endif -%} 13 | 14 | {{ label }} 15 | {% endif %} 16 | {% endfor %} 17 | -------------------------------------------------------------------------------- /src/Resources/views/Button/acl_button.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if admin.isAclEnabled() 13 | and object is not null 14 | and admin.id(object) is not null 15 | and admin.hasAccess('acl', object) 16 | and admin.hasRoute('acl') 17 | %} 18 |
  • 19 | 20 | 21 | {{ 'link_action_acl'|trans({}, 'SonataAdminBundle') }} 22 | 23 |
  • 24 | {% endif %} 25 | -------------------------------------------------------------------------------- /src/Resources/views/Button/create_button.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if admin.hasAccess('create') and admin.hasRoute('create') %} 13 | {% if admin.subClasses is empty %} 14 |
  • 15 | 16 | 17 | {{ 'link_action_create'|trans({}, 'SonataAdminBundle') }} 18 | 19 |
  • 20 | {% else %} 21 | {% for subclass in admin.subclasses|keys %} 22 |
  • 23 | 24 | 25 | {{ 'link_action_create'|trans({}, 'SonataAdminBundle') }} {{ subclass|trans({}, admin.translationdomain) }} 26 | 27 |
  • 28 | {% endfor %} 29 | {% endif %} 30 | {% endif %} 31 | -------------------------------------------------------------------------------- /src/Resources/views/Button/edit_button.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if object is not null 13 | and admin.id(object) is not null 14 | and admin.hasAccess('edit', object) 15 | and admin.hasRoute('edit') 16 | %} 17 |
  • 18 | 19 | 20 | {{ 'link_action_edit'|trans({}, 'SonataAdminBundle') }} 21 | 22 |
  • 23 | {% endif %} 24 | -------------------------------------------------------------------------------- /src/Resources/views/Button/history_button.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if object is not null 13 | and admin.id(object) is not null 14 | and admin.hasAccess('history', object) 15 | and admin.hasRoute('history') 16 | %} 17 |
  • 18 | 19 | 20 | {{ 'link_action_history'|trans({}, 'SonataAdminBundle') }} 21 | 22 |
  • 23 | {% endif %} 24 | -------------------------------------------------------------------------------- /src/Resources/views/Button/list_button.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if admin.hasAccess('list') and admin.hasRoute('list') %} 13 |
  • 14 | 15 | 16 | {{ 'link_action_list'|trans({}, 'SonataAdminBundle') }} 17 | 18 |
  • 19 | {% endif %} 20 | -------------------------------------------------------------------------------- /src/Resources/views/Button/show_button.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if object is not null 13 | and admin.id(object) is not null 14 | and admin.hasAccess('show', object) 15 | and admin.show|length > 0 16 | and admin.hasRoute('show') 17 | %} 18 |
  • 19 | 20 | 21 | {{ 'link_action_show'|trans({}, 'SonataAdminBundle') }} 22 | 23 |
  • 24 | {% endif %} 25 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/Association/edit_modal.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | 24 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/Association/list_one_to_one.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | {% if value %} 16 | {% set route_name = field_description.option('route').name|default(sonata_config.getOption('default_admin_route')) %} 17 | {% set route_parameters = field_description.option('route').parameters|default([]) %} 18 | 19 | {% if field_description.hasAssociationAdmin 20 | and field_description.associationadmin.id(value) is not null 21 | and field_description.associationadmin.hasRoute(route_name) 22 | and field_description.associationadmin.hasAccess(route_name, value) 23 | %} 24 | 25 | {{ value|render_relation_element(field_description) }} 26 | 27 | {% else %} 28 | {{ value|render_relation_element(field_description) }} 29 | {% endif %} 30 | {% endif %} 31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/Association/show_many_to_one.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {% if value %} 16 | {% set route_name = field_description.option('route').name|default(sonata_config.getOption('default_admin_route')) %} 17 | {% set route_parameters = field_description.option('route').parameters|default([]) %} 18 | 19 | {% if field_description.hasAssociationAdmin 20 | and field_description.associationadmin.hasRoute(route_name) 21 | and field_description.associationadmin.hasAccess(route_name, value) %} 22 | 23 | {{ value|render_relation_element(field_description) }} 24 | 25 | {% else %} 26 | {{ value|render_relation_element(field_description) }} 27 | {% endif %} 28 | {% endif %} 29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/Association/show_one_to_one.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {% if value %} 16 | {% set route_name = field_description.option('route').name|default(sonata_config.getOption('default_admin_route')) %} 17 | {% set route_parameters = field_description.option('route').parameters|default([]) %} 18 | 19 | {% if field_description.hasAssociationAdmin 20 | and field_description.associationadmin.id(value) is not null 21 | and field_description.associationadmin.hasRoute(route_name) 22 | and field_description.associationadmin.hasAccess(route_name, value) 23 | %} 24 | 25 | {{ value|render_relation_element(field_description) }} 26 | 27 | {% else %} 28 | {{ value|render_relation_element(field_description) }} 29 | {% endif %} 30 | {% endif %} 31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/acl.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_acl.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/action.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends base_template %} 13 | 14 | {%- block actions -%} 15 | {% include '@SonataAdmin/CRUD/action_buttons.html.twig' %} 16 | {%- endblock -%} 17 | 18 | {%- block tab_menu -%} 19 | {% if action is defined %} 20 | {{ knp_menu_render(admin.sidemenu(action), { 21 | 'currentClass': 'active', 22 | 'template': get_global_template('tab_menu_template') 23 | }, 'twig') }} 24 | {% endif %} 25 | {%- endblock -%} 26 | 27 | {% block content %} 28 | 29 | Redefine the content block in your action template 30 | 31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/action_buttons.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | {% for item in admin.getActionButtons(action, (object is defined) ? object : null ) %} 12 | {% if item.template is defined %} 13 | {%- include item.template -%} 14 | {% endif %} 15 | {% endfor %} 16 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/base_acl.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends base_template %} 13 | 14 | {%- block actions -%} 15 | {% include '@SonataAdmin/CRUD/action_buttons.html.twig' %} 16 | {%- endblock -%} 17 | 18 | {% import '@SonataAdmin/CRUD/base_acl_macro.html.twig' as acl %} 19 | 20 | {% block form %} 21 | {% block form_acl_roles %} 22 | {{ acl.render_form(aclRolesForm, permissions, 'td_role', admin, sonata_config, object) }} 23 | {% endblock %} 24 | {% block form_acl_users %} 25 | {{ acl.render_form(aclUsersForm, permissions, 'td_username', admin, sonata_config, object) }} 26 | {% endblock %} 27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/base_list_flat_field.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {# NEXT_MAJOR: Remove this #} 13 | {% deprecated 'The "base_list_flat_field.html.twig" template is deprecated since sonata-project/admin-bundle version 4.3 and will be removed in 5.0.' %} 14 | 15 | 16 | {% set route_name = field_description.option('route').name|default(sonata_config.getOption('default_admin_route')) %} 17 | {% set route_parameters = field_description.option('route').parameters|default([]) %} 18 | 19 | {% if 20 | field_description.option('identifier', false) 21 | and route_name 22 | and admin.hasAccess(route_name, object) 23 | and admin.hasRoute(route_name) 24 | %} 25 | 26 | {%- block field %}{{ value }}{% endblock -%} 27 | 28 | {% else %} 29 | {{ block('field') }} 30 | {% endif %} 31 | 32 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/base_list_inner_row.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% for field_description in admin.list.getElements() %} 13 | {% if field_description.name == constant('Sonata\\AdminBundle\\Datagrid\\ListMapper::NAME_ACTIONS') and app.request.isXmlHttpRequest %} 14 | {# NEXT_MAJOR: Remove this case in version 5 and recommend using the option `ajax_hidden` instead. #} 15 | {# Action buttons disabled in ajax view! #} 16 | {% elseif field_description.getOption('ajax_hidden') == true and app.request.isXmlHttpRequest %} 17 | {# Disable fields with 'ajax_hidden' option set to true #} 18 | {% else %} 19 | {{ object|render_list_element(field_description) }} 20 | {% endif %} 21 | {% endfor %} 22 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/base_show_compare.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show.html.twig' %} 13 | 14 | {%- block show_field -%} 15 | 16 | {% if elements[show_field_name] is defined %} 17 | {{ elements[show_field_name]|render_view_element_compare(object, object_compare) }} 18 | {% endif %} 19 | 20 | {%- endblock -%} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/dashboard__action.html.twig: -------------------------------------------------------------------------------- 1 | 2 | {{ action.icon|parse_icon }} 3 | {% if action.translation_domain is defined and action.translation_domain is same as(false) %} 4 | {{ action.label }} 5 | {% else %} 6 | {{ action.label|trans({}, action.translation_domain|default('SonataAdminBundle')) }} 7 | {% endif %} 8 | 9 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_boolean.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {% if value %} 14 | {% set text = 'label_type_yes'|trans({}, 'SonataAdminBundle') %} 15 | {% else %} 16 | {% set text = 'label_type_no'|trans({}, 'SonataAdminBundle') %} 17 | {% endif %} 18 | 19 | {% if inverse|default(false) ? not value : value %} 20 | {% set class = 'label-success' %} 21 | {% else %} 22 | {% set class = 'label-danger' %} 23 | {% endif %} 24 | 25 | {{ text }} 26 | {% endapply -%} 27 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_currency.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {%- if value is null -%} 14 |   15 | {%- else -%} 16 | {{ currency|default(null) }} {{ value }} 17 | {%- endif -%} 18 | {% endapply -%} 19 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_date.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {%- if value is empty -%} 14 |   15 | {%- else -%} 16 | 19 | {%- endif -%} 20 | {% endapply -%} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_datetime.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {%- if value is empty -%} 14 |   15 | {%- else -%} 16 | 19 | {%- endif -%} 20 | {% endapply -%} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_email.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {%- if value is empty -%} 14 |   15 | {%- elseif as_string|default(false) -%} 16 | {{ value }} 17 | {%- else -%} 18 | {% set parameters = {} %} 19 | 20 | {% if subject|default(null) is not empty %} 21 | {% set parameters = parameters|merge({'subject': subject}) %} 22 | {% endif %} 23 | {% if body|default(null) is not empty %} 24 | {% set parameters = parameters|merge({'body': body}) %} 25 | {% endif %} 26 | 27 | 28 | {{- value -}} 29 | 30 | {%- endif -%} 31 | {% endapply -%} 32 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_enum.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {% if value is null %} 14 |   15 | {% elseif value.trans is defined %} 16 | {# Enum implements TranslatableInterface and therefore has direct control over how it should be displayed. #} 17 | {{ value|trans }} 18 | {% else %} 19 | {% set value = use_value|default(false) ? value.value : value.name %} 20 | 21 | {% if translation_domain|default(null) is null %} 22 | {% set value = value %} 23 | {% else %} 24 | {% set value = value|trans({}, translation_domain) %} 25 | {% endif %} 26 | {{ value }} 27 | {% endif %} 28 | {% endapply -%} 29 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_html.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {%- if value is empty -%} 14 |   15 | {% else %} 16 | {%- if truncate|default(null) -%} 17 | {% set length = truncate.length|default(30) %} 18 | {% set cut = truncate.cut ?? true %} 19 | {% set ellipsis = truncate.ellipsis|default('...') %} 20 | {{ value|striptags|u.truncate(length, ellipsis, cut)|raw }} 21 | {%- else -%} 22 | {%- if strip|default(false) -%} 23 | {% set value = value|striptags %} 24 | {%- endif -%} 25 | {{ value|raw }} 26 | {% endif %} 27 | {% endif %} 28 | {% endapply -%} 29 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_percent.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {%- if value is null -%} 14 |   15 | {%- else -%} 16 | {% set value = value * 100 %} 17 | {{ value }} % 18 | {%- endif -%} 19 | {% endapply -%} 20 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_time.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {%- if value is empty -%} 14 |   15 | {%- else -%} 16 | 19 | {%- endif -%} 20 | {% endapply -%} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/display_trans.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- apply trim|raw %} 13 | {% set value = value_format|default('%s')|format(value)|trans({}, translation_domain|default('messages')) %} 14 | 15 | {% if safe|default(false) %} 16 | {{ value|raw }} 17 | {% else %} 18 | {{ value }} 19 | {% endif %} 20 | {% endapply -%} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/edit.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_edit.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/history.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_history.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/history_revision_timestamp.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {%- include '@SonataAdmin/CRUD/display_datetime.html.twig' with { 13 | value: revision.timestamp, 14 | } only -%} 15 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_list.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list__action.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 |
    16 | {% for actions in field_description.option('actions') %} 17 | {% include actions.template %} 18 | {% endfor %} 19 |
    20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list__action_delete.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if admin.hasAccess('delete', object) and admin.hasRoute('delete') %} 13 | {% set button_content = sonata_config.getOption('list_action_button_content') %} 14 | 19 | {% if button_content == 'icon' or button_content == 'all' %} 20 | 21 | {% endif %} 22 | {% if button_content == 'text' or button_content == 'all' %} 23 | {{ 'action_delete'|trans({}, 'SonataAdminBundle') }} 24 | {% else %} 25 | 26 | {{ 'action_delete'|trans({}, 'SonataAdminBundle') }} 27 | 28 | {% endif %} 29 | 30 | {% endif %} 31 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list__action_edit.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if admin.hasAccess('edit', object) and admin.hasRoute('edit') %} 13 | {% set button_content = sonata_config.getOption('list_action_button_content') %} 14 | 19 | {% if button_content == 'icon' or button_content == 'all' %} 20 | 21 | {% endif %} 22 | {% if button_content == 'text' or button_content == 'all' %} 23 | {{ 'action_edit'|trans({}, 'SonataAdminBundle') }} 24 | {% else %} 25 | 26 | {{ 'action_edit'|trans({}, 'SonataAdminBundle') }} 27 | 28 | {% endif %} 29 | 30 | {% endif %} 31 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list__action_history.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if admin.hasAccess('history', object) and admin.hasRoute('history') %} 13 | {% set button_content = sonata_config.getOption('list_action_button_content') %} 14 | 19 | {% if button_content == 'icon' or button_content == 'all' %} 20 | 21 | {% endif %} 22 | {% if button_content == 'text' or button_content == 'all' %} 23 | {{ 'link_action_history'|trans({}, 'SonataAdminBundle') }} 24 | {% else %} 25 | 26 | {{ 'link_action_history'|trans({}, 'SonataAdminBundle') }} 27 | 28 | {% endif %} 29 | 30 | {% endif %} 31 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list__action_show.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% if admin.hasAccess('show', object) and admin.hasRoute('show') %} 13 | {% set button_content = sonata_config.getOption('list_action_button_content') %} 14 | 19 | {% if button_content == 'icon' or button_content == 'all' %} 20 | 21 | {% endif %} 22 | {% if button_content == 'text' or button_content == 'all' %} 23 | {{ 'action_show'|trans({}, 'SonataAdminBundle') }} 24 | {% else %} 25 | 26 | {{ 'action_show'|trans({}, 'SonataAdminBundle') }} 27 | 28 | {% endif %} 29 | 30 | {% endif %} 31 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list__batch.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list__select.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | 16 | 17 | {{ 'list_select'|trans({}, 'SonataAdminBundle') }} 18 | 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_array.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | {% import '@SonataAdmin/CRUD/base_array_macro.html.twig' as list %} 12 | 13 | {% extends get_admin_template('base_list_field', admin.code) %} 14 | 15 | {% block field %} 16 | {{ list.render_array( 17 | value, 18 | { default_translation_domain : admin.translationDomain, inline: true }|merge(field_description.options) 19 | ) }} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_boolean.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% set is_editable = field_description.option('editable', false) and admin.hasAccess('edit', object) %} 15 | {% set x_editable_type = field_description.type|sonata_xeditable_type %} 16 | 17 | {% block field_span_attributes %} 18 | {% if is_editable and x_editable_type %} 19 | {{ parent() }} 20 | data-source="[{value: 0, text: '{%- trans from 'SonataAdminBundle' %}label_type_no{% endtrans -%}'},{value: 1, text: '{%- trans from 'SonataAdminBundle' %}label_type_yes{% endtrans -%}'}]" 21 | {% endif %} 22 | {% endblock %} 23 | 24 | {% block field %} 25 | {%- include '@SonataAdmin/CRUD/display_boolean.html.twig' with { 26 | value: value, 27 | inverse: field_description.option('inverse'), 28 | } only -%} 29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_currency.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_currency.html.twig' with { 16 | value: value, 17 | currency: field_description.option('currency'), 18 | } only -%} 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_date.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_date.html.twig' with { 16 | value: value, 17 | format: field_description.option('format'), 18 | timezone: field_description.option('timezone'), 19 | } only -%} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_datetime.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_datetime.html.twig' with { 16 | value: value, 17 | format: field_description.option('format'), 18 | timezone: field_description.option('timezone'), 19 | } only -%} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_email.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | {% include '@SonataAdmin/CRUD/display_email.html.twig' with { 16 | value: value, 17 | as_string: field_description.option('as_string'), 18 | subject: field_description.option('subject'), 19 | body: field_description.option('body'), 20 | } only %} 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_enum.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% set is_editable = 15 | field_description.option('editable', false) and 16 | admin.hasAccess('edit', object) 17 | %} 18 | {% set x_editable_type = field_description.type|sonata_xeditable_type %} 19 | 20 | {% block field_span_attributes %} 21 | {% if is_editable and x_editable_type %} 22 | {{ parent() }} 23 | data-source="{{ field_description|sonata_xeditable_choices|json_encode }}" 24 | {% endif %} 25 | {% endblock %} 26 | 27 | {% block field %} 28 | {%- include '@SonataAdmin/CRUD/display_enum.html.twig' with { 29 | value: value, 30 | use_value: field_description.option('use_value', false), 31 | translation_domain: field_description.option('enum_translation_domain', null), 32 | } only -%} 33 | {% endblock %} 34 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_html.html.twig: -------------------------------------------------------------------------------- 1 | {% extends get_admin_template('base_list_field', admin.code) %} 2 | 3 | {% block field %} 4 | {%- include '@SonataAdmin/CRUD/display_html.html.twig' with { 5 | value: value, 6 | truncate: field_description.option('truncate'), 7 | strip: field_description.option('strip'), 8 | } only -%} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_inner_row.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_list_inner_row.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_outer_rows_list.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% for object in admin.datagrid.results %} 13 | 14 | {% include get_admin_template('inner_list_row', admin.code) %} 15 | 16 | {% endfor %} 17 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_percent.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_percent.html.twig' with { value: value } only -%} 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_string.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_time.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_time.html.twig' with { 16 | value: value, 17 | format: field_description.option('format'), 18 | timezone: field_description.option('timezone'), 19 | } only -%} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_trans.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {# NEXT_MAJOR: Remove the fallback on catalogue #} 15 | {% block field %} 16 | {%- include '@SonataAdmin/CRUD/display_trans.html.twig' with { 17 | value: value, 18 | value_format: field_description.option('format'), 19 | translation_domain: field_description.option('value_translation_domain', field_description.option('catalogue', admin.translationDomain)), 20 | safe: field_description.option('safe'), 21 | } only -%} 22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/list_url.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_admin_template('base_list_field', admin.code) %} 13 | 14 | {% block field %} 15 | {%- set route = field_description.option('route') -%} 16 | {%- if route is not null and route.identifier_parameter_name is defined -%} 17 | {%- set newParameters = {(route.identifier_parameter_name):(admin.normalizedidentifier(object))} -%} 18 | {%- set route = route|merge({parameters: route.parameters|default([])|merge(newParameters)}) -%} 19 | {%- endif -%} 20 | 21 | {%- include '@SonataAdmin/CRUD/display_url.html.twig' with { 22 | value: value, 23 | url: field_description.option('url'), 24 | route: route, 25 | hide_protocol: field_description.option('hide_protocol'), 26 | attributes: field_description.option('attributes'), 27 | safe: field_description.option('safe'), 28 | } only -%} 29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_array.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | {% import '@SonataAdmin/CRUD/base_array_macro.html.twig' as show %} 12 | 13 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 14 | 15 | {% block field %} 16 | {{ show.render_array( 17 | value, 18 | { default_translation_domain : admin.translationDomain }|merge(field_description.options) 19 | ) }} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_boolean.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_boolean.html.twig' with { 16 | value: value, 17 | inverse: field_description.option('inverse'), 18 | } only -%} 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_choice.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 12 | 13 | {# NEXT_MAJOR: Remove the fallback on catalogue #} 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_choice.html.twig' with { 16 | value: value, 17 | choices: field_description.option('choices'), 18 | multiple: field_description.option('multiple'), 19 | delimiter: field_description.option('delimiter'), 20 | translation_domain: field_description.option('choice_translation_domain', field_description.option('catalogue')), 21 | safe: field_description.option('safe'), 22 | } only -%} 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_compare.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_compare.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_currency.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_currency.html.twig' with { 16 | value: value, 17 | currency: field_description.option('currency'), 18 | } only -%} 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_date.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_date.html.twig' with { 16 | value: value, 17 | format: field_description.option('format'), 18 | timezone: field_description.option('timezone'), 19 | } only -%} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_datetime.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_datetime.html.twig' with { 16 | value: value, 17 | format: field_description.option('format'), 18 | timezone: field_description.option('timezone'), 19 | } only -%} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_email.html.twig: -------------------------------------------------------------------------------- 1 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 2 | 3 | {% block field %} 4 | {% include '@SonataAdmin/CRUD/display_email.html.twig' with { 5 | value: value, 6 | as_string: field_description.option('as_string'), 7 | subject: field_description.option('subject'), 8 | body: field_description.option('body'), 9 | } only %} 10 | {% endblock %} 11 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_enum.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_enum.html.twig' with { 16 | value: value, 17 | use_value: field_description.option('use_value', false), 18 | translation_domain: field_description.option('enum_translation_domain', null), 19 | } only -%} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_html.html.twig: -------------------------------------------------------------------------------- 1 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 2 | 3 | {% block field %} 4 | {%- include '@SonataAdmin/CRUD/display_html.html.twig' with { 5 | value: value, 6 | truncate: field_description.option('truncate'), 7 | strip: field_description.option('strip'), 8 | } only -%} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_percent.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_percent.html.twig' with { value: value } only -%} 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_time.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_time.html.twig' with { 16 | value: value, 17 | format: field_description.option('format'), 18 | timezone: field_description.option('timezone'), 19 | } only -%} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_trans.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 12 | 13 | {# NEXT_MAJOR: Remove the fallback on catalogue #} 14 | {% block field %} 15 | {%- include '@SonataAdmin/CRUD/display_trans.html.twig' with { 16 | value: value, 17 | value_format: field_description.option('format'), 18 | translation_domain: field_description.option('value_translation_domain', field_description.option('catalogue', admin.translationDomain)), 19 | safe: field_description.option('safe'), 20 | } only -%} 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /src/Resources/views/CRUD/show_url.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/CRUD/base_show_field.html.twig' %} 13 | 14 | {% block field %} 15 | {%- set route = field_description.option('route') -%} 16 | {%- if route is not null and route.identifier_parameter_name is defined -%} 17 | {%- set newParameters = {(route.identifier_parameter_name):(admin.normalizedidentifier(object))} -%} 18 | {%- set route = route|merge({parameters: route.parameters|default([])|merge(newParameters)}) -%} 19 | {%- endif -%} 20 | 21 | {%- include '@SonataAdmin/CRUD/display_url.html.twig' with { 22 | value: value, 23 | url: field_description.option('url'), 24 | route: route, 25 | hide_protocol: field_description.option('hide_protocol'), 26 | attributes: field_description.option('attributes'), 27 | safe: field_description.option('safe'), 28 | } only -%} 29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /src/Resources/views/Core/user_block.html.twig: -------------------------------------------------------------------------------- 1 | {# Customize this value #} 2 | -------------------------------------------------------------------------------- /src/Resources/views/Helper/render_form_dismissable_errors.html.twig: -------------------------------------------------------------------------------- 1 | {% for error in form.vars.errors %} 2 |
    3 | 4 | {{ error.message }} 5 |
    6 | {% endfor %} 7 | -------------------------------------------------------------------------------- /src/Resources/views/Helper/short-object-description.html.twig: -------------------------------------------------------------------------------- 1 | 2 | {% if object and admin.hasRoute('edit') and admin.hasAccess('edit') %} 3 | {{ description }} 4 | {% else %} 5 | {{ description }} 6 | {% endif %} 7 | 8 | -------------------------------------------------------------------------------- /src/Resources/views/Pager/links.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/Pager/base_links.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/Pager/results.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/Pager/base_results.html.twig' %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/Pager/simple_pager_results.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends '@SonataAdmin/Pager/base_results.html.twig' %} 13 | 14 | {% block num_results %} 15 | {% if admin.datagrid.pager.lastPage != admin.datagrid.pager.page %} 16 | {{ 'list_results_count_prefix'|trans({}, 'SonataAdminBundle') }} 17 | {% endif %} 18 | {% trans with {'%count%': admin.datagrid.pager.countResults()} from 'SonataAdminBundle' %}list_results_count{% endtrans %} 19 |  -  20 | {% endblock %} 21 | 22 | {% block num_pages %} 23 | {{ admin.datagrid.pager.page }} 24 | / 25 | {% if admin.datagrid.pager.lastPage != admin.datagrid.pager.page %} 26 | ? 27 | {% else %} 28 | {{ admin.datagrid.pager.lastpage }} 29 | {% endif %} 30 |  -  31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /src/Resources/views/empty_layout.html.twig: -------------------------------------------------------------------------------- 1 | {# 2 | 3 | This file is part of the Sonata package. 4 | 5 | (c) Thomas Rabaix 6 | 7 | For the full copyright and license information, please view the LICENSE 8 | file that was distributed with this source code. 9 | 10 | #} 11 | 12 | {% extends get_global_template('layout') %} 13 | 14 | {% block sonata_header %}{% endblock %} 15 | {% block sonata_left_side %}{% endblock %} 16 | {% block sonata_nav %}{% endblock %} 17 | {% block sonata_breadcrumb %}{% endblock %} 18 | 19 | {% block stylesheets %} 20 | {{ parent() }} 21 | 22 | 28 | {% endblock %} 29 | 30 | {% block sonata_wrapper %} 31 | {% block sonata_page_content %} 32 | {{ parent() }} 33 | {% endblock %} 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /src/Route/RoutesCacheWarmUp.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Route; 15 | 16 | use Sonata\AdminBundle\Admin\Pool; 17 | use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface; 18 | 19 | /** 20 | * @author Thomas Rabaix 21 | */ 22 | final class RoutesCacheWarmUp implements CacheWarmerInterface 23 | { 24 | public function __construct( 25 | private RoutesCache $cache, 26 | private Pool $pool, 27 | ) { 28 | } 29 | 30 | public function isOptional(): bool 31 | { 32 | return true; 33 | } 34 | 35 | /** 36 | * @return string[] 37 | */ 38 | public function warmUp(string $cacheDir, ?string $buildDir = null): array 39 | { 40 | foreach ($this->pool->getAdminServiceCodes() as $code) { 41 | $this->cache->load($this->pool->getInstance($code)); 42 | } 43 | 44 | return []; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/Search/ChainableFilterInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Search; 15 | 16 | use Sonata\AdminBundle\Filter\FilterInterface; 17 | 18 | /** 19 | * @author Javier Spagnoletti 20 | */ 21 | interface ChainableFilterInterface 22 | { 23 | public function setPreviousFilter(FilterInterface $filter): void; 24 | 25 | public function getPreviousFilter(): FilterInterface; 26 | 27 | public function hasPreviousFilter(): bool; 28 | } 29 | -------------------------------------------------------------------------------- /src/Search/SearchHandlerInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Search; 15 | 16 | use Sonata\AdminBundle\Admin\AdminInterface; 17 | use Sonata\AdminBundle\Datagrid\PagerInterface; 18 | use Sonata\AdminBundle\Datagrid\ProxyQueryInterface; 19 | 20 | interface SearchHandlerInterface 21 | { 22 | /** 23 | * @throws \RuntimeException 24 | * 25 | * @phpstan-template T of object 26 | * @phpstan-param AdminInterface $admin 27 | * @phpstan-return PagerInterface>|null 28 | */ 29 | public function search(AdminInterface $admin, string $term, int $page = 0, int $offset = 20): ?PagerInterface; 30 | } 31 | -------------------------------------------------------------------------------- /src/Search/SearchableFilterInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Search; 15 | 16 | use Sonata\AdminBundle\Filter\FilterInterface; 17 | 18 | /** 19 | * @author Thomas Rabaix 20 | */ 21 | interface SearchableFilterInterface extends FilterInterface, ChainableFilterInterface 22 | { 23 | /** 24 | * Return true if the filter should be used in the SearchHandler class. 25 | */ 26 | public function isSearchEnabled(): bool; 27 | } 28 | -------------------------------------------------------------------------------- /src/Security/Acl/Permission/MaskBuilder.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Security\Acl\Permission; 15 | 16 | use Symfony\Component\Security\Acl\Permission\MaskBuilder as BaseMaskBuilder; 17 | 18 | /** 19 | * {@inheritdoc} 20 | * - LIST: the SID is allowed to view a list of the domain objects / fields. 21 | * - EXPORT: the SID is allowed to export the list of the domain objects / fields. 22 | * - HISTORY: the SID is allowed to see the history of edition of a domain objects / fields. 23 | */ 24 | final class MaskBuilder extends BaseMaskBuilder 25 | { 26 | public const MASK_LIST = 4096; // 1 << 12 27 | public const MASK_EXPORT = 8192; // 1 << 13 28 | public const MASK_HISTORY = 16384; // 1 << 14 29 | 30 | public const CODE_LIST = 'L'; 31 | public const CODE_EXPORT = 'E'; 32 | public const CODE_HISTORY = 'H'; 33 | } 34 | -------------------------------------------------------------------------------- /src/Security/Handler/NoopSecurityHandler.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Security\Handler; 15 | 16 | use Sonata\AdminBundle\Admin\AdminInterface; 17 | 18 | /** 19 | * @author Thomas Rabaix 20 | */ 21 | final class NoopSecurityHandler implements SecurityHandlerInterface 22 | { 23 | public function isGranted(AdminInterface $admin, $attributes, ?object $object = null): bool 24 | { 25 | return true; 26 | } 27 | 28 | public function getBaseRole(AdminInterface $admin): string 29 | { 30 | return ''; 31 | } 32 | 33 | public function buildSecurityInformation(AdminInterface $admin): array 34 | { 35 | return []; 36 | } 37 | 38 | public function createObjectSecurity(AdminInterface $admin, object $object): void 39 | { 40 | } 41 | 42 | public function deleteObjectSecurity(AdminInterface $admin, object $object): void 43 | { 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/Templating/MutableTemplateRegistry.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Templating; 15 | 16 | /** 17 | * @author Wojciech Błoszyk 18 | */ 19 | final class MutableTemplateRegistry extends AbstractTemplateRegistry implements MutableTemplateRegistryInterface 20 | { 21 | public function setTemplates(array $templates): void 22 | { 23 | $this->templates = $templates + $this->templates; 24 | } 25 | 26 | public function setTemplate(string $name, string $template): void 27 | { 28 | $this->templates[$name] = $template; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Templating/MutableTemplateRegistryAwareInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Templating; 15 | 16 | /** 17 | * @author Wojciech Błoszyk 18 | */ 19 | interface MutableTemplateRegistryAwareInterface 20 | { 21 | public function getTemplateRegistry(): MutableTemplateRegistryInterface; 22 | 23 | public function setTemplateRegistry(MutableTemplateRegistryInterface $templateRegistry): void; 24 | 25 | public function hasTemplateRegistry(): bool; 26 | 27 | public function setTemplate(string $name, string $template): void; 28 | 29 | /** 30 | * @param array $templates 31 | */ 32 | public function setTemplates(array $templates): void; 33 | } 34 | -------------------------------------------------------------------------------- /src/Templating/MutableTemplateRegistryInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Templating; 15 | 16 | /** 17 | * @author Timo Bakx 18 | */ 19 | interface MutableTemplateRegistryInterface extends TemplateRegistryInterface 20 | { 21 | /** 22 | * @param array $templates 'name' => 'file_path.html.twig' 23 | */ 24 | public function setTemplates(array $templates): void; 25 | 26 | public function setTemplate(string $name, string $template): void; 27 | } 28 | -------------------------------------------------------------------------------- /src/Templating/TemplateRegistry.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Templating; 15 | 16 | /** 17 | * @author Timo Bakx 18 | */ 19 | final class TemplateRegistry extends AbstractTemplateRegistry 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /src/Templating/TemplateRegistryAwareInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Templating; 15 | 16 | /** 17 | * @author Wojciech Błoszyk 18 | */ 19 | interface TemplateRegistryAwareInterface 20 | { 21 | public function getTemplateRegistry(): TemplateRegistryInterface; 22 | 23 | public function hasTemplateRegistry(): bool; 24 | 25 | public function setTemplateRegistry(TemplateRegistryInterface $templateRegistry): void; 26 | } 27 | -------------------------------------------------------------------------------- /src/Translator/BCLabelTranslatorStrategy.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Translator; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | * 19 | * NEXT_MAJOR: Remove this class. 20 | * 21 | * @deprecated since sonata-project/admin-bundle 4.19, will be removed in 5.0. 22 | */ 23 | final class BCLabelTranslatorStrategy implements LabelTranslatorStrategyInterface 24 | { 25 | public function getLabel(string $label, string $context = '', string $type = ''): string 26 | { 27 | @trigger_error(\sprintf( 28 | 'The "%s" class is deprecated since sonata-project/admin-bundle version 4.19 and will be' 29 | .' removed in 5.0 version.', 30 | self::class 31 | ), \E_USER_DEPRECATED); 32 | 33 | if ('breadcrumb' === $context) { 34 | return \sprintf('%s.%s_%s', $context, $type, strtolower($label)); 35 | } 36 | 37 | return ucfirst(strtolower($label)); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/Translator/FormLabelTranslatorStrategy.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Translator; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class FormLabelTranslatorStrategy implements LabelTranslatorStrategyInterface 20 | { 21 | public function getLabel(string $label, string $context = '', string $type = ''): string 22 | { 23 | return ucfirst(strtolower($label)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/Translator/LabelTranslatorStrategyInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Translator; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | interface LabelTranslatorStrategyInterface 20 | { 21 | public function getLabel(string $label, string $context = '', string $type = ''): string; 22 | } 23 | -------------------------------------------------------------------------------- /src/Translator/NativeLabelTranslatorStrategy.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Translator; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class NativeLabelTranslatorStrategy implements LabelTranslatorStrategyInterface 20 | { 21 | public function getLabel(string $label, string $context = '', string $type = ''): string 22 | { 23 | $label = str_replace(['_', '.'], ' ', $label); 24 | $label = strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $label) ?? ''); 25 | 26 | return trim(ucwords(str_replace('_', ' ', $label))); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Translator/NoopLabelTranslatorStrategy.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Translator; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class NoopLabelTranslatorStrategy implements LabelTranslatorStrategyInterface 20 | { 21 | public function getLabel(string $label, string $context = '', string $type = ''): string 22 | { 23 | return $label; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/Translator/UnderscoreLabelTranslatorStrategy.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Translator; 15 | 16 | /** 17 | * @author Thomas Rabaix 18 | */ 19 | final class UnderscoreLabelTranslatorStrategy implements LabelTranslatorStrategyInterface 20 | { 21 | public function getLabel(string $label, string $context = '', string $type = ''): string 22 | { 23 | $label = str_replace('.', '_', $label); 24 | 25 | return \sprintf('%s.%s_%s', $context, $type, strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $label) ?? '')); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Twig/IconRuntime.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Twig; 15 | 16 | use Twig\Extension\RuntimeExtensionInterface; 17 | 18 | final class IconRuntime implements RuntimeExtensionInterface 19 | { 20 | public function parseIcon(string $icon): string 21 | { 22 | if ('' === $icon || str_starts_with($icon, '<')) { 23 | return $icon; 24 | } 25 | 26 | if ( 27 | !str_starts_with($icon, 'fa ') 28 | && !str_starts_with($icon, 'fas ') 29 | && !str_starts_with($icon, 'far ') 30 | && !str_starts_with($icon, 'fab ') 31 | && !str_starts_with($icon, 'fal ') 32 | && !str_starts_with($icon, 'fad ') 33 | ) { 34 | throw new \InvalidArgumentException(\sprintf('The icon format "%s" is not supported.', $icon)); 35 | } 36 | 37 | return \sprintf('', $icon); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/Util/AdminAclUserManagerInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Util; 15 | 16 | use Symfony\Component\Security\Core\User\UserInterface; 17 | 18 | /** 19 | * @author Mathieu Petrini 20 | */ 21 | interface AdminAclUserManagerInterface 22 | { 23 | /** 24 | * Batch configure the ACLs for all objects handled by an Admin. 25 | * 26 | * @return iterable 27 | */ 28 | public function findUsers(): iterable; 29 | } 30 | -------------------------------------------------------------------------------- /src/Util/Instantiator.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Util; 15 | 16 | use Sonata\AdminBundle\Exception\AbstractClassException; 17 | 18 | /** 19 | * @internal 20 | */ 21 | final class Instantiator 22 | { 23 | /** 24 | * @template T of object 25 | * 26 | * @phpstan-param class-string $class 27 | * @phpstan-return T 28 | */ 29 | public static function instantiate(string $class): object 30 | { 31 | $r = new \ReflectionClass($class); 32 | if ($r->isAbstract()) { 33 | throw new AbstractClassException($class); 34 | } 35 | 36 | $constructor = $r->getConstructor(); 37 | 38 | if (null !== $constructor && (!$constructor->isPublic() || $constructor->getNumberOfRequiredParameters() > 0)) { 39 | return $r->newInstanceWithoutConstructor(); 40 | } 41 | 42 | return new $class(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Util/ObjectAclManipulatorInterface.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Util; 15 | 16 | use Sonata\AdminBundle\Admin\AdminInterface; 17 | use Sonata\AdminBundle\Exception\ModelManagerThrowable; 18 | use Symfony\Component\Console\Output\OutputInterface; 19 | use Symfony\Component\Security\Acl\Domain\UserSecurityIdentity; 20 | 21 | /** 22 | * @author Thomas Rabaix 23 | */ 24 | interface ObjectAclManipulatorInterface 25 | { 26 | /** 27 | * Batch configure the ACLs for all objects handled by an Admin. 28 | * 29 | * @param AdminInterface $admin 30 | * 31 | * @throws ModelManagerThrowable 32 | */ 33 | public function batchConfigureAcls( 34 | OutputInterface $output, 35 | AdminInterface $admin, 36 | ?UserSecurityIdentity $securityIdentity = null, 37 | ): void; 38 | } 39 | -------------------------------------------------------------------------------- /src/Util/ParametersManipulator.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * For the full copyright and license information, please view the LICENSE 11 | * file that was distributed with this source code. 12 | */ 13 | 14 | namespace Sonata\AdminBundle\Util; 15 | 16 | /** 17 | * @author Willem Verspyck 18 | */ 19 | final class ParametersManipulator 20 | { 21 | /** 22 | * Merge parameters, but replace them when it's a subarray. 23 | * 24 | * @param mixed[] $parameters 25 | * @param mixed[] $newParameters 26 | * 27 | * @return mixed[] 28 | */ 29 | public static function merge(array $parameters, array $newParameters): array 30 | { 31 | foreach (array_intersect_key($parameters, $newParameters) as $key => $parameter) { 32 | if (\is_array($parameter) && \is_array($newParameters[$key])) { 33 | $parameters[$key] = array_replace($parameter, $newParameters[$key]); 34 | } else { 35 | $parameters[$key] = $newParameters[$key]; 36 | } 37 | } 38 | 39 | return array_merge($parameters, array_diff_key($newParameters, $parameters)); 40 | } 41 | } 42 | --------------------------------------------------------------------------------