{"id":20961931,"url":"https://github.com/heimrichhannot/contao-multifileupload","last_synced_at":"2025-10-08T17:50:02.773Z","repository":{"id":62515514,"uuid":"46283631","full_name":"heimrichhannot/contao-multifileupload","owner":"heimrichhannot","description":null,"archived":false,"fork":false,"pushed_at":"2018-05-15T13:35:28.000Z","size":3203,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-20T00:53:19.277Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/heimrichhannot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-16T15:31:55.000Z","updated_at":"2018-05-15T13:35:22.000Z","dependencies_parsed_at":"2022-11-02T13:16:05.898Z","dependency_job_id":null,"html_url":"https://github.com/heimrichhannot/contao-multifileupload","commit_stats":null,"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heimrichhannot%2Fcontao-multifileupload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heimrichhannot%2Fcontao-multifileupload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heimrichhannot%2Fcontao-multifileupload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heimrichhannot%2Fcontao-multifileupload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/heimrichhannot","download_url":"https://codeload.github.com/heimrichhannot/contao-multifileupload/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243358306,"owners_count":20277995,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-19T02:18:49.258Z","updated_at":"2025-10-08T17:50:02.684Z","avatar_url":"https://github.com/heimrichhannot.png","language":"PHP","readme":"# Contao Multi File Upload\n\n![](https://img.shields.io/packagist/v/heimrichhannot/contao-multifileupload.svg)\n![](https://img.shields.io/packagist/l/heimrichhannot/contao-multifileupload.svg)\n![](https://img.shields.io/packagist/dt/heimrichhannot/contao-multifileupload.svg)\n\nContao front end widget that provides [dropzonejs.com](http://www.dropzonejs.com/) functionality to both back and front end.\nThe javascript is written in native javascript and invoked for both jquery and mootools on \"document ready\" and \"ajax complete\".\n\n![alt text](./doc/multifileupload-demo.jpg \"Multifileupload demo within contao backend\")\n\n\n## Features\n\n### Technical instructions\n\nUse the inputType \"multifileupload\" for your field. In the backend, the widget is replaced by a \"fileTree\".\n\n```\n'client_logo' =\u003e array(\n    'label'     =\u003e \u0026$GLOBALS['TL_LANG']['tl_jobmarket_job']['client_logo'],\n    'exclude'   =\u003e true,\n    'inputType' =\u003e TL_MODE == 'BE' ? 'fileTree' : 'multifileupload',\n    'eval'      =\u003e array(\n        'tl_class'      =\u003e 'clr',\n        'extensions'    =\u003e \\Config::get('validImageTypes'),\n        'filesOnly'     =\u003e true,\n        'fieldType'     =\u003e 'radio',\n        'addRemoveLinks' =\u003e true,\n        'minImageWidth'       =\u003e '600px',\n        'minImageHeight'      =\u003e '300px',\n        'maxImageWidth'       =\u003e '1600px',\n        'maxImageHeight'      =\u003e '1200px',\n        'multipleFiles' =\u003e false,\n        'labels'        =\u003e array(\n            'head' =\u003e \u0026$GLOBALS['TL_LANG']['tl_jobmarket_job']['client_logo']['messageText'][0],\n            'body' =\u003e \u0026$GLOBALS['TL_LANG']['tl_jobmarket_job']['client_logo']['messageText'][1],\n        ),\n        'skipDeleteAfterSubmit' =\u003e true\n    ),\n    'upload_path_callback' =\u003e array(array('MyClass', 'getJobUploadPath')),\n    'validate_upload_callback' =\u003e array(array('MyClass', 'validateUpload')),\n    'sql'       =\u003e \"blob NULL\",\n),\n```\n\n### Flow chart\n\nA flowchart with description of the full upload procedure with callback injection can be found here: [Flowchart](./doc/upload-flow-chart.html).\n\n### Eval-Properties\n\nDefined at your field's dca.\n\nName | Default | Description\n---- | ------- | -----------\nfieldType | 'checkbox' | If set to \"checkbox\", multiple files can be uploaded, for single upload set to 'radio'\nextensions | \\Config::get('uploadTypes') | A comma separated list of allowed file types (e.g. \"jpg,png\")\nmaxUploadSize | minimum of $GLOBALS['TL_CONFIG']['maxFileSize'] and php.ini 'upload_max_filesize' | The desired maximum upload size measured in Bytes (e.g. \"100\"), KiB, MiB or GiB (e.g. \"10M\"). Can not exceed $GLOBALS['TL_CONFIG']['maxFileSize'] or php upload_max_filesize value.\nmaxFiles | 10 | The maximum file count per field\nuploadFolder | null | The upload folder as String, e.g. \"files/uploads\", function or array. **(must be declared !!!)**, required to move files to correct destination after submission.\naddRemoveLinks | true | Remove links are added to each of the file avatars in the jquery (caption can be overwritten within language files)\nminImageWidth | 0 | The minimum image width. Set to 0 for no min width image validation. All units from \\Image::getPixelValue() are supported.\nminImageHeight | 0 | The minimum image height. Set to 0 for no min height image validation. All units from \\Image::getPixelValue() are supported.\nmaxImageWidth | 0 | The maximum image width. Set to 0 for no max width image validation. All units from \\Image::getPixelValue() are supported.\nmaxImageHeight | 0 | The maximum image height. Set to 0 for no max image height validation. All units from \\Image::getPixelValue() are supported.\nminImageWidthErrorText | $GLOBALS['TL_LANG']['ERR']['minWidth'] | Custom error message for minimum image width. (arguments provided: 1 - minimum width from config, 2 - current image width)\nminImageHeightErrorText | $GLOBALS['TL_LANG']['ERR']['minHeight'] | Custom error message for minimum image height. (arguments provided: 1 - minimum height from config, 2 - current image height)\nmaxImageWidthErrorText | $GLOBALS['TL_LANG']['ERR']['maxWidth'] | Custom error message for maximum image width. (arguments provided: 1 - maximum width from config, 2 - current image width)\nmaxImageHeightErrorText | $GLOBALS['TL_LANG']['ERR']['maxHeight'] | Custom error message for maximum image height. (arguments provided: 1 - maximum height from config, 2 - current image height)\ncreateImageThumbnails | boolean(true) | Set to false if you dont want to preview thumbnails.\nmimeFolder | system/modules/multifileupload/assets/img/mimetypes/Numix-uTouch | The relative path from contao root to custom mimetype folder, mimetypes.json and images must lie inside. (example: system/modules/multifileupload/assets/img/mimetypes/Numix-uTouch)\nmimeThumbnailsOnly | boolean(false) | Set to true if you want to show mime image thumbnails only, and no image preview at all. (performance improvement)\nthumbnailWidth | 90 | The thumbnail width (in px) of the uploaded file preview within the dropzone preview container.\nthumbnailHeight | 90 | The thumbnail height (in px) of the uploaded file preview within the dropzone preview container.\nlabels | array() | Overwrite the head and body labels within the upload field.\nskipDeleteAfterSubmit | false | Prevent file removal from filesystem.\n\n\n### Field Callbacks\n\nType | Arguments | Expected return value | Description\n---- | ---- | ---- | -----------\nupload_path_callback | $strTarget, \\File $objFile, \\DataContainer $dc | $strTarget | Manipulate the upload path after form submission (run within onsubmit_callback).\nvalidate_upload_callback | \\File $objFile, \\Widget $objWidget | boolean(false) or string with frontend error message | Validate the uploaded file and add an error message if file does not pass validation, otherwise boolean(false) is expected.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheimrichhannot%2Fcontao-multifileupload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fheimrichhannot%2Fcontao-multifileupload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheimrichhannot%2Fcontao-multifileupload/lists"}