├── .gitignore ├── src ├── RKN_Logo_D_weiss.png ├── RKN_Logo_D_weiss-150px.png ├── config.sample ├── styles.css ├── KUWDaten.php ├── export-xlsx.php ├── select-cal-grouptypes.php └── index.php ├── nbproject ├── project.properties └── project.xml ├── composer.json ├── README.md ├── LICENSE └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /nbproject/private/ 2 | /src/config.php 3 | /vendor 4 | /src/cache/kuwDaten 5 | /src/cache/kuwgroups 6 | -------------------------------------------------------------------------------- /src/RKN_Logo_D_weiss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a-schild/churchtools-groupmeetings/main/src/RKN_Logo_D_weiss.png -------------------------------------------------------------------------------- /src/RKN_Logo_D_weiss-150px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a-schild/churchtools-groupmeetings/main/src/RKN_Logo_D_weiss-150px.png -------------------------------------------------------------------------------- /nbproject/project.properties: -------------------------------------------------------------------------------- 1 | browser.reload.on.save=true 2 | include.path=${php.global.include.path} 3 | php.version=PHP_82 4 | source.encoding=UTF-8 5 | src.dir=src 6 | tags.asp=false 7 | tags.short=false 8 | web.root=. 9 | -------------------------------------------------------------------------------- /nbproject/project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.netbeans.modules.php.project 4 | 5 | 6 | churchtools-groupmeetings 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "a-schild/churchtools-groupmeeting", 3 | "description":"Create calendar entries from group meetings", 4 | "keywords": [ "calendar", "ct", "churchtools"], 5 | "type": "project", 6 | "license": "Apache-2.0", 7 | "authors": [ 8 | { 9 | "name": "André Schild", 10 | "email": "andre@schild.ws", 11 | "homepage": "https://github.com/a-schild", 12 | "role": "Developer" 13 | }], 14 | "require": { 15 | "php": "^8.1", 16 | "5pm-hdh/churchtools-api": "^2.1", 17 | "phpoffice/phpspreadsheet": "^1.29.0", 18 | "cache/filesystem-adapter": "^1.2.0", 19 | "jsvrcek/ics": "*" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # churchtools-groupmeetings 2 | Create ical feed from group meetings 3 | 4 | Optionally it can also create a html page with the meetings. 5 | In that case you have to modify the images. 6 | 7 | Currently all meetings 1 year back and one year in the future are processed. 8 | Currently there is no config to change this 9 | 10 | ## How to install 11 | - git clone https://github.com/a-schild/churchtools-groupmeetings.git 12 | - run composer install 13 | - copy the src/config.sample to src/config.php and put in your values 14 | - chown www-data:www-data * -R 15 | 16 | - The application does store a cache in the src/cache subfolder. 17 | If the folder does not exist, it is created (Which means it must have write access in that location) 18 | 19 | ## Usage 20 | - Just call https://yourserver/groupmeetings/index.php for the HTML page 21 | - If you wish to get the ics feed/file, use index.php?format=ics instead 22 | -------------------------------------------------------------------------------- /src/config.sample: -------------------------------------------------------------------------------- 1 | 'your.church.tools', 4 | // For which group type do you wish to generate 5 | 'groupType' => 15 6 | // 7 | // For login choose either user+pw login 8 | // or the token based login 9 | // 10 | // Token login is recommended 11 | // 12 | // For user+pw login use the two keys below 13 | // 'loginUser' => '', 14 | // 'loginPassword' => '', 15 | // 16 | // For tokin login just fill in the token below (Recommended) 17 | // The user needs to be memeber of the groups, or superadmind 18 | // Otherwise you don't see the group meetings 19 | // 20 | 'loginToken' => 'your-api-key', 21 | 'loggingToFileEnabled' => false, 22 | 'loggingToConsoleEnabled' => false, 23 | 'loggingLevelDebug' => false, 24 | // How long entries are cached in seconds, before they are fetched from CT again 25 | // Default 1 hour 26 | 'cacheLifeTime' => 3600 27 | ); 28 | -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | /* 2 | To change this license header, choose License Headers in Project Properties. 3 | To change this template file, choose Tools | Templates 4 | and open the template in the editor. 5 | */ 6 | /* 7 | Created on : 24.05.2019, 23:31:51 8 | Author : andre 9 | */ 10 | body { 11 | background-color: #CCCCCC; 12 | } 13 | 14 | .container { 15 | background-color: #99576D; 16 | } 17 | 18 | a:hover { 19 | text-decoration: none; 20 | } 21 | 22 | .calendarcol { 23 | /* margin: 2px; */ 24 | } 25 | 26 | .resourcecol { 27 | /* nothing */ 28 | } 29 | 30 | .resourcecol .form-check { 31 | padding-left: 0; 32 | } 33 | 34 | .resourcecol .form-check label .form-check-input { 35 | /* margin-left: 0.5rem;*/ 36 | } 37 | 38 | .resourcecol .form-check label { 39 | padding-left: 2rem; 40 | width: 95%; 41 | } 42 | 43 | .resourcecol .form-check label:hover { 44 | background-color: #eeeeee; 45 | } 46 | 47 | .calendar { 48 | padding-top: 3px; 49 | padding-bottom: 3px; 50 | padding-left: 1.8rem; 51 | margin-bottom: 2px; 52 | } 53 | 54 | .resourcetype 55 | { 56 | background-color: #cccccc; 57 | padding-left: 2rem; 58 | padding-top: 3px; 59 | padding-bottom: 3px; 60 | margin-bottom: 2px; 61 | } 62 | 63 | .resourcetype h6 { 64 | display: inline-block; 65 | } 66 | 67 | .rest-wrapper { 68 | border-right: 1px solid #cccccc; 69 | border-left: 1px solid #cccccc; 70 | border-bottom: 1px solid #cccccc; 71 | margin-top: -2px; 72 | } 73 | 74 | h1 { 75 | background-color: #99576D; 76 | color: white; 77 | line-height: 70px; 78 | border-bottom: 1px solid white; 79 | padding-bottom: 1rem; 80 | margin-left: -15px; 81 | padding-left: 15px; 82 | margin-right: -15px; 83 | padding-right: 15px; 84 | } 85 | 86 | h2.group-title { 87 | background-color: #99576D; 88 | margin-left: -15px; 89 | margin-right: -15px; 90 | padding-left: 1rem; 91 | margin-bottom: 0.25rem; 92 | padding-top: 0.25rem; 93 | padding-bottom: 0.25rem; 94 | margin-top: 0.5rem; 95 | color: white; 96 | font-size: 1.5rem; 97 | } 98 | 99 | h2.footer { 100 | text-align:center; 101 | padding: 1rem 0; 102 | } 103 | 104 | h2 a { 105 | color: white; 106 | text-decoration: none; 107 | } 108 | 109 | h2 a:hover { 110 | color: black; 111 | text-decoration: none; 112 | } 113 | 114 | .row:nth-child(even) { 115 | background-color: #dddddd; 116 | } 117 | 118 | .row:nth-child(odd) { 119 | background-color: white; 120 | } 121 | 122 | 123 | .ispast { 124 | display: none; 125 | } 126 | 127 | .toprow { 128 | margin-left: 0; 129 | background-color: #99576D !important; 130 | } 131 | 132 | .pastbutton { 133 | text-align: right; 134 | border: 1px solid gray; 135 | padding: 1rem; 136 | background-color: silver; 137 | } 138 | 139 | -------------------------------------------------------------------------------- /src/KUWDaten.php: -------------------------------------------------------------------------------- 1 | startDate= $startDate; 28 | } 29 | 30 | public function getStartDate() : \DateTime 31 | { 32 | return $this->startDate; 33 | } 34 | 35 | public function setEndTime(string $endTime) 36 | { 37 | $this->endTime= $endTime; 38 | } 39 | 40 | public function getEndTime(): ?string 41 | { 42 | return $this->endTime; 43 | } 44 | 45 | public function getEndDateTime(): ?\DateTime 46 | { 47 | if ($this->endTime != null && $this->endTime != "") 48 | { 49 | $retVal= clone $this->getStartDate(); 50 | $etValue= $this->endTime; 51 | if (strlen($etValue) == 5) 52 | { 53 | $retVal->setTime(substr($etValue, 0, 2), substr($etValue, 3,2)); 54 | } 55 | 56 | return $retVal; 57 | } 58 | else 59 | { 60 | return null; 61 | } 62 | } 63 | 64 | public function setTitle(string $title) 65 | { 66 | $this->title= $title; 67 | } 68 | 69 | public function getTitle(): ?string 70 | { 71 | return $this->title; 72 | } 73 | 74 | public function setClassTitle(string $classTitle) 75 | { 76 | $this->classTitle= $classTitle; 77 | } 78 | 79 | public function getClassTitle(): ?string 80 | { 81 | return $this->classTitle; 82 | } 83 | 84 | public function setLocation(string $location) 85 | { 86 | $this->location= $location; 87 | } 88 | 89 | public function getLocation(): ?string 90 | { 91 | return $this->location; 92 | } 93 | 94 | public function setRemarks(string $remarks) 95 | { 96 | $this->remarks= $remarks; 97 | } 98 | 99 | public function getRemarks(): ?string 100 | { 101 | return $this->remarks; 102 | } 103 | 104 | public function setIsCanceled(bool $isCanceled) 105 | { 106 | $this->isCanceled= $isCanceled; 107 | } 108 | 109 | public function isCanceled() :bool 110 | { 111 | return $this->isCanceled; 112 | } 113 | 114 | public function isEntryFromParents() :bool 115 | { 116 | return $this->isEntryFromParents; 117 | } 118 | 119 | public function setIsEntryFromParents(bool $isEntryFromParents) 120 | { 121 | $this->isEntryFromParents= $isEntryFromParents; 122 | } 123 | 124 | public function setUID(string $uid) 125 | { 126 | $this->uid= $uid; 127 | } 128 | 129 | public function getUID() : string 130 | { 131 | return $this->uid; 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /src/export-xlsx.php: -------------------------------------------------------------------------------- 1 | getPersonMasterData(); 23 | 24 | $visibleGroupTypes= $personMasterData->getGroupTypes(); 25 | $visibleGroups= $personMasterData->getGroups(); 26 | } 27 | catch (Exception $e) 28 | { 29 | $errorMessage= $e->getMessage(); 30 | $hasError= true; 31 | session_destroy(); 32 | } 33 | 34 | $spreadsheet = new Spreadsheet(); 35 | $sheet = $spreadsheet->getActiveSheet(); 36 | $sheet->setCellValue('A1', 'Gruppentreffen'); 37 | $rowPos= 2; 38 | foreach( $selectedGroups as $group) { 39 | $meetings= $api->getGroupMeetings($group->getId()); 40 | if ($meetings != null && sizeof($meetings) > 0) { 41 | foreach ($meetings as $meeting) { 42 | $sheet->setCellValue('A'.$rowPos, $group->getTitle()); 43 | $pollResult= $meeting->getPollResult(); 44 | $remainingResults= []; 45 | $untilTime= null; 46 | $ort= null; 47 | if ($pollResult != null) { 48 | foreach ($pollResult as $result) { 49 | $v= $result["value"]; 50 | if ($v != null && $v != "") { 51 | if ($result["label"] == "Bis" || $result["label"] == "Dauer") 52 | { 53 | $untilTime= $v; 54 | } 55 | elseif ($result["label"] == "Ort?" || $result["label"] == "Ort") 56 | { 57 | $ort= $v; 58 | } 59 | elseif ($result["label"] == "Anderer Ort") 60 | { 61 | $ort= $v; 62 | } 63 | else 64 | { 65 | $remainingResults[$result["label"]]= $v; 66 | } 67 | } 68 | } 69 | } 70 | $sheet->setCellValue('B'.$rowPos, $meeting->getStartDate()->format("d.m.Y")); 71 | $sheet->setCellValue('C'.$rowPos, $meeting->getStartDate()->format("H:i")); 72 | if ($untilTime != null) 73 | { 74 | $sheet->getCell('D'.$rowPos)->setValueExplicit( 75 | $untilTime, 76 | \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING 77 | ); 78 | } 79 | if ($meeting->isMeetingCanceled()) { 80 | $sheet->setCellValue('E'.$rowPos, "Treffen wurde abgesagt"); 81 | $sheet->getStyle("A".$rowPos.":G".$rowPos)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('ff0000'); 82 | } 83 | if ($ort != null) { 84 | $sheet->setCellValue('F'.$rowPos, "Ort: ".$ort); 85 | } 86 | if ($pollResult != null) { 87 | $outLine= ""; 88 | foreach ($remainingResults as $key => $result) { 89 | if ($result != null && $result != "") { 90 | if (strlen($outLine) > 0 ) { 91 | $outLine .= "\n"; 92 | } 93 | $outLine.= $key.": ".$result; 94 | } 95 | } 96 | if ($outLine != "") 97 | { 98 | $sheet->setCellValue('G'.$rowPos, $outLine); 99 | // $sheet->getStyle('G'.$rowPos)->getAlignment()->setWrapText(true); 100 | } 101 | } 102 | $rowPos++; 103 | } 104 | } 105 | } 106 | $writer = new Xlsx($spreadsheet); 107 | header('Content-Type:vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 108 | header('Content-Disposition:attachment;filename="Gruppentreffen.xlsx"'); 109 | header('Cache-Control:max-age=0'); 110 | $writer->save('php://output'); 111 | 112 | 113 | -------------------------------------------------------------------------------- /src/select-cal-grouptypes.php: -------------------------------------------------------------------------------- 1 | getCalendarMasterData(); 29 | $personMasterData= $api->getPersonMasterData(); 30 | 31 | $visibleCalendars= $calMasterData->getCalendars(); 32 | $visibleGroupTypes= $personMasterData->getGroupTypes(); 33 | 34 | session_start(); 35 | $_SESSION['userName'] = $userName; 36 | $_SESSION['password'] = $password; 37 | $_SESSION['serverURL']= $serverURL; 38 | } 39 | catch (Exception $e) 40 | { 41 | $errorMessage= $e->getMessage(); 42 | $hasError= true; 43 | session_destroy(); 44 | } 45 | ?> 46 | 47 | 48 | 49 | 50 | 51 | Churchtools Gruppentreffen 52 | 53 | 54 | 55 | 85 | 86 | 87 |
88 |

Churchtools Gruppentreffen

89 | 90 |

Login fehlgeschlagen

91 | 94 |
95 | Zum Login 96 |
97 | 98 |
99 |
100 | 111 |
112 |
Gruppentypen
113 | getGroupTypesIDS(true); 114 | foreach( $groupTypesIDS as $groupTypeID) { 115 | $groupType=$visibleGroupTypes->getGroupType($groupTypeID); 116 | ?> 117 |
118 |  
121 |
122 | 123 |
124 |
125 |
126 |
127 | 128 | 129 |
130 |
131 |
132 | 133 | Abmelden 134 |
135 |
136 | 137 |
138 | 139 | 140 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /src/index.php: -------------------------------------------------------------------------------- 1 | hasItem($cacheKeyCalEntries) && $cachePool->hasItem($cacheKeyGroups)) { 53 | CTLog::getLog()->info("Loading data from existing cache at ". $cacheLocation); 54 | $calendareEntries = $cachePool->get($cacheKeyCalEntries); 55 | $selectedGroups = $cachePool->get($cacheKeyGroups); 56 | } else { 57 | CTLog::getLog()->info("Loading data from church tool server, not found cached data at ".$cacheLocation); 58 | set_time_limit(60); // Allow more time to retrieve entries 59 | session_start(); 60 | $serverURL = $configs["serverURL"]; 61 | if (array_key_exists("loginToken", $configs)) { 62 | $loginToken = $configs["loginToken"]; 63 | } else { 64 | $loginUser = $configs["loginUser"]; 65 | $loginPassword = $configs["loginPassword"]; 66 | } 67 | 68 | $groupType = $configs["groupType"]; // 5 = KUW 69 | $showLeader = 0; 70 | 71 | $errorMessage = null; 72 | try { 73 | CTConfig::setApiUrl($serverURL); 74 | if (isset($loginToken)) { 75 | // CTConfig::setApiKey($loginToken); 76 | if (!CTConfig::authWithLoginToken($loginToken)) { 77 | echo "Token login failed"; 78 | CTLog::getLog()->error("Token login failed!"); 79 | die; 80 | } else { 81 | CTLog::getLog()->debug("Token login ok"); 82 | } 83 | } else { 84 | CTConfig::authWithCredentials( 85 | $loginUser, 86 | $loginPassword); 87 | } 88 | //$api = \ChurchTools\Api\RestApi::createWithLoginIdToken($serverURL, $loginID, $loginToken); 89 | //$personMasterData= $api->getPersonMasterData(); 90 | $selectedGroups = GroupRequest::where("group_type_ids", [$groupType])->get(); 91 | $_SESSION["selectedGroups"] = $selectedGroups; 92 | $sDate = new \DateTime('now'); 93 | $sDate->sub(new \DateInterval('P1Y')); 94 | $fromDate= $sDate->format('Y-m-d'); 95 | $eDate = new \DateTime('now'); 96 | $eDate->add(new \DateInterval('P1Y')); 97 | $endDate= $eDate->format('Y-m-d'); 98 | 99 | foreach ($selectedGroups as $group) { 100 | $childGroups = $group->requestGroupChildren()->get(); 101 | if ($childGroups != null && sizeof($childGroups) > 0) { 102 | // Has children, ignore it 103 | CTLog::getLog()->debug("Ignoring parent group [" . $group->getName() . "] id [" . $group->getId() . "]"); 104 | } else { 105 | CTLog::getLog()->debug("Get meetings for group [" . $group->getName() . "] id [" . $group->getId() . "]"); 106 | try { 107 | $meetings = $group->requestGroupMeetings()?->where("start_date", $fromDate) 108 | ->where("end_date", $endDate)->get(); 109 | CTLog::getLog()->debug("Got ".sizeof($meetings)." meetings for group [" . $group->getName() . "] id [" . $group->getId() . "]"); 110 | } catch (Exception $e) { 111 | $meetings = null; 112 | CTLog::getLog()->warning("Get meetings for group [" . $group->getName() . "] id [" . $group->getId() . "] failed"); 113 | } 114 | $parentGroups = $group->requestGroupParents()->get(); 115 | if ($parentGroups != null && sizeof($parentGroups) > 0) { 116 | CTLog::getLog()->debug("Got parent groups for [" . $group->getName() . "] id [" . $group->getId() . "]"); 117 | // Has parents, look if there are groupmeetings too 118 | foreach ($parentGroups as $gid) { 119 | CTLog::getLog()->debug("Get meetings for group [" . $gid->getName() . "] id [" . $gid->getId() . "]"); 120 | $meetings2 = $gid->requestGroupMeetings()?->where("start_date", $fromDate) 121 | ->where("end_date", $endDate)->get(); 122 | if ($meetings2 != null && sizeof($meetings2) > 0) { 123 | if ($meetings != null && sizeof($meetings) > 0) { 124 | $meetings = array_merge($meetings, $meetings2); 125 | } else { 126 | $meetings = $meetings2; 127 | } 128 | } else { 129 | CTLog::getLog()->debug("Got no groups meetings for [" . $gid->getName() . "] id [" . $gid->getId() . "]"); 130 | } 131 | } 132 | } else { 133 | CTLog::getLog()->debug("No parent groups for [" . $group->getName() . "] id [" . $group->getId() . "]"); 134 | } 135 | //var_dump($meetings); 136 | if ($meetings != null && sizeof($meetings) > 0) { 137 | usort($meetings, 138 | function ($a, $b) { 139 | return strtotime($a->getDateFrom()) - strtotime($b->getDateFrom()); 140 | }); 141 | $myCalendar = array(); 142 | $calendarTitle = $group->getName(); 143 | foreach ($meetings as $meeting) { 144 | $pollResult = $meeting->getPollResult(); 145 | $remainingResults = []; 146 | $untilTime = null; 147 | $ort = null; 148 | if ($pollResult != null) { 149 | foreach ($pollResult as $result) { 150 | $v = $result["value"]; 151 | if ($v != null && $v != "") { 152 | if ($result["label"] == "Bis" || $result["label"] == "Dauer") { 153 | $untilTime = $v; 154 | } elseif ($result["label"] == "Ort?" || $result["label"] == "Ort") { 155 | $ort = $v; 156 | } elseif ($result["label"] == "Anderer Ort") { 157 | $ort = $v; 158 | } else { 159 | $remainingResults[$result["label"]] = $v; 160 | } 161 | } 162 | } 163 | } 164 | $kuwEntry = new KUWDaten(); 165 | $kuwEntry->setClassTitle($calendarTitle); 166 | $kuwEntry->setUID($meeting->getID() . "." . $meeting->getGroupID()); 167 | $kuwEntry->setIsCanceled($meeting->getIsCanceled()); 168 | $kuwEntry->setStartDate(new DateTime($meeting->getDateFrom(), new DateTimeZone("UTC"))); 169 | if ($untilTime != null) { 170 | $kuwEntry->setEndTime(new DateTime($untilTime, new DateTimeZone("UTC"))); 171 | } 172 | $isFirst = true; 173 | if ($pollResult != null) { 174 | 175 | $addRemarks = ""; 176 | foreach ($remainingResults as $key => $result) { 177 | if ($result != null && $result != "") { 178 | if ($isFirst) { 179 | $isFirst = false; 180 | } else { 181 | $addRemarks .= "
"; 182 | } 183 | if ($key == "Kommentar") { 184 | $addRemarks .= $result; 185 | } else { 186 | $addRemarks .= $key . ": " . $result; 187 | } 188 | } 189 | } 190 | if ($addRemarks != "") { 191 | $kuwEntry->setRemarks($addRemarks); 192 | } 193 | } 194 | if ($ort != null) { 195 | $kuwEntry->setLocation($ort); 196 | } 197 | array_push($myCalendar, $kuwEntry); 198 | } 199 | $calendareEntries[$group->getName()] = $myCalendar; 200 | } else { 201 | CTLog::getLog()->warning("Got NO meetings for group [" . $group->getName() . "] id [" . $group->getId() . "]"); 202 | } 203 | } 204 | } 205 | $cachePool->set($cacheKeyCalEntries, $calendareEntries, $configs["cacheLifeTime"]); 206 | $cachePool->set($cacheKeyGroups, $visibleGroups, $configs["cacheLifeTime"]); 207 | } catch (Exception $e) { 208 | $errorMessage = $e->getMessage(); 209 | $hasError = true; 210 | session_destroy(); 211 | } 212 | } 213 | if (!$hasError && isset($_REQUEST["format"]) && $_REQUEST["format"] == "ics") { 214 | //setup calendar 215 | $calendar = new Calendar(); 216 | $tzDate = new DateTimeZone('Europe/Zurich'); 217 | $calendar->setTimezone($tzDate); 218 | $calendar->setProdId('-//Ref-Nidau//EN'); 219 | $i = 0; 220 | $uidEntries = array(); 221 | foreach ($calendareEntries as $calName => $calEntries) { 222 | $isFirst = true; 223 | foreach ($calEntries as $meeting) { 224 | $uuid = $meeting->getUID(); 225 | if (in_array($uuid, $uidEntries)) { 226 | // Already in calendar, skip (Parent stuff) 227 | } else { 228 | array_push($uidEntries, $uuid); 229 | // $calSummary= $calName; 230 | $calSummary = $meeting->getClassTitle(); 231 | // preg_match("/(\d*)\.(\d*)/", $uuid, $matches, PREG_OFFSET_CAPTURE); 232 | // $groupID= $matches[2][0]; 233 | // if ($selectedGroups != null) { 234 | // $group= $selectedGroups->getGroupByID($groupID); 235 | // $calSummary= $group->getName(); 236 | // } else { 237 | // $calSummary= "KUW"; 238 | // } 239 | $eventobj = new CalendarEvent(); 240 | $eventobj->setUid($meeting->getUID() . "@ref-nidau.ch"); 241 | $meeting->getStartDate()->setTimezone($tzDate); 242 | 243 | $eventobj->setStart($meeting->getStartDate()); 244 | 245 | $endTime = $meeting->getEndDateTime(); 246 | if ($endTime != null) { 247 | $endTime->setTimezone($tzDate); 248 | $eventobj->setSummary($calSummary); 249 | $eventobj->setEnd($endTime); 250 | } else { 251 | $eventobj->setSummary($calSummary . " : " . $meeting->getEndTime()); 252 | } 253 | 254 | if ($meeting->getLocation() != null && $meeting->getLocation() != "") { 255 | $evLocation = new Location(); 256 | $evLocation->setName($meeting->getLocation()); 257 | $eventobj->addLocation($evLocation); 258 | // Add description 259 | $eventobj->setDescription($meeting->getRemarks() . "\nOrt: " . $meeting->getLocation()); 260 | } else { 261 | // Add description 262 | $eventobj->setDescription($meeting->getRemarks()); 263 | } 264 | $calendar->addEvent($eventobj); 265 | } 266 | } 267 | } 268 | header("content-type:text/calendar"); 269 | header('Content-Disposition: attachment; filename="kuwdaten-ref-nidau.ics"'); 270 | //setup exporter 271 | $calendarExport = new CalendarExport(new CalendarStream, new Formatter()); 272 | $calendarExport->addCalendar($calendar); 273 | 274 | //output .ics formatted text 275 | echo $calendarExport->getStream(); 276 | } else { 277 | $now = new DateTime(); 278 | $tzDate = new DateTimeZone('Europe/Zurich'); 279 | 280 | ?> 281 | 282 | 283 | 284 | 285 | 286 | KUW Daten Reformierte Kirchgemeinde Nidau 287 | 288 | 289 | 290 | 302 | 303 | 304 |
305 |
306 |

KUW Daten

307 | 308 |
309 | 310 |

Login fehlgeschlagen

311 | 314 |
315 | Zum Login 316 |
317 | $calEntries) { 320 | $isFirst = true; 321 | 322 | ?> 323 |

324 | $meeting->getStartDate(); 326 | $meeting->getStartDate()->setTimezone($tzDate); 327 | ?> 328 |
"> 329 | isCanceled()) { ?> 330 |
">getStartDate()->format("d.m.Y H:i e") ?> getEndTime() != null ? "- " . $meeting->getEndTime() . " " : "") ?> 331 | isCanceled()) { ?>
Treffen wurde abgesagt 332 |
333 |
334 | getRemarks() != "") { 336 | echo $meeting->getRemarks(); 337 | $isFirst = false; 338 | } 339 | if ($meeting->getLocation() != null) { 340 | if ($isFirst) { 341 | $isFirst = false; 342 | } else { 343 | echo "
"; 344 | }; 345 | 346 | ?>Ort: getLocation() ?> 347 | isCanceled()) { ?> 348 |
349 |
350 | 356 | 357 |
358 | 359 | 360 | 361 | 362 | 363 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "a112b939f29df9577d26011c3cf723d3", 8 | "packages": [ 9 | { 10 | "name": "5pm-hdh/churchtools-api", 11 | "version": "2.1.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/5pm-HDH/churchtools-api.git", 15 | "reference": "5fdf2afaf4b7fdee2a466c4fbb8b970355cc5538" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/5pm-HDH/churchtools-api/zipball/5fdf2afaf4b7fdee2a466c4fbb8b970355cc5538", 20 | "reference": "5fdf2afaf4b7fdee2a466c4fbb8b970355cc5538", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "doctrine/cache": "^1.11", 25 | "guzzlehttp/guzzle": "^7", 26 | "monolog/monolog": "^3", 27 | "php": ">=8.1" 28 | }, 29 | "require-dev": { 30 | "friendsofphp/php-cs-fixer": "^3.46", 31 | "phpstan/phpstan": "^1.10", 32 | "phpunit/phpunit": "9.5.5" 33 | }, 34 | "type": "library", 35 | "autoload": { 36 | "psr-4": { 37 | "CTApi\\": "src" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "Lukas Dumberger", 47 | "email": "lukas.dumberger@gmail.com" 48 | } 49 | ], 50 | "description": "API-client for churchtools", 51 | "support": { 52 | "issues": "https://github.com/5pm-HDH/churchtools-api/issues", 53 | "source": "https://github.com/5pm-HDH/churchtools-api/tree/2.1.0" 54 | }, 55 | "time": "2024-08-01T06:09:22+00:00" 56 | }, 57 | { 58 | "name": "cache/adapter-common", 59 | "version": "1.3.0", 60 | "source": { 61 | "type": "git", 62 | "url": "https://github.com/php-cache/adapter-common.git", 63 | "reference": "8788309be72aa7be69b88cdc0687549c74a7d479" 64 | }, 65 | "dist": { 66 | "type": "zip", 67 | "url": "https://api.github.com/repos/php-cache/adapter-common/zipball/8788309be72aa7be69b88cdc0687549c74a7d479", 68 | "reference": "8788309be72aa7be69b88cdc0687549c74a7d479", 69 | "shasum": "" 70 | }, 71 | "require": { 72 | "cache/tag-interop": "^1.0", 73 | "php": ">=7.4", 74 | "psr/cache": "^1.0 || ^2.0", 75 | "psr/log": "^1.0 || ^2.0 || ^3.0", 76 | "psr/simple-cache": "^1.0" 77 | }, 78 | "require-dev": { 79 | "cache/integration-tests": "^0.17", 80 | "phpunit/phpunit": "^7.5.20 || ^9.5.10" 81 | }, 82 | "type": "library", 83 | "extra": { 84 | "branch-alias": { 85 | "dev-master": "1.1-dev" 86 | } 87 | }, 88 | "autoload": { 89 | "psr-4": { 90 | "Cache\\Adapter\\Common\\": "" 91 | } 92 | }, 93 | "notification-url": "https://packagist.org/downloads/", 94 | "license": [ 95 | "MIT" 96 | ], 97 | "authors": [ 98 | { 99 | "name": "Aaron Scherer", 100 | "email": "aequasi@gmail.com", 101 | "homepage": "https://github.com/aequasi" 102 | }, 103 | { 104 | "name": "Tobias Nyholm", 105 | "email": "tobias.nyholm@gmail.com", 106 | "homepage": "https://github.com/nyholm" 107 | } 108 | ], 109 | "description": "Common classes for PSR-6 adapters", 110 | "homepage": "http://www.php-cache.com/en/latest/", 111 | "keywords": [ 112 | "cache", 113 | "psr-6", 114 | "tag" 115 | ], 116 | "support": { 117 | "source": "https://github.com/php-cache/adapter-common/tree/1.3.0" 118 | }, 119 | "time": "2022-01-15T15:47:19+00:00" 120 | }, 121 | { 122 | "name": "cache/filesystem-adapter", 123 | "version": "1.2.0", 124 | "source": { 125 | "type": "git", 126 | "url": "https://github.com/php-cache/filesystem-adapter.git", 127 | "reference": "f1faaae40aaa696ef899cef6f6888aedb90b419b" 128 | }, 129 | "dist": { 130 | "type": "zip", 131 | "url": "https://api.github.com/repos/php-cache/filesystem-adapter/zipball/f1faaae40aaa696ef899cef6f6888aedb90b419b", 132 | "reference": "f1faaae40aaa696ef899cef6f6888aedb90b419b", 133 | "shasum": "" 134 | }, 135 | "require": { 136 | "cache/adapter-common": "^1.0", 137 | "league/flysystem": "^1.0", 138 | "php": ">=7.4", 139 | "psr/cache": "^1.0 || ^2.0", 140 | "psr/simple-cache": "^1.0" 141 | }, 142 | "provide": { 143 | "psr/cache-implementation": "^1.0", 144 | "psr/simple-cache-implementation": "^1.0" 145 | }, 146 | "require-dev": { 147 | "cache/integration-tests": "^0.17", 148 | "phpunit/phpunit": "^7.5.20 || ^9.5.10" 149 | }, 150 | "type": "library", 151 | "extra": { 152 | "branch-alias": { 153 | "dev-master": "1.1-dev" 154 | } 155 | }, 156 | "autoload": { 157 | "psr-4": { 158 | "Cache\\Adapter\\Filesystem\\": "" 159 | }, 160 | "exclude-from-classmap": [ 161 | "/Tests/" 162 | ] 163 | }, 164 | "notification-url": "https://packagist.org/downloads/", 165 | "license": [ 166 | "MIT" 167 | ], 168 | "authors": [ 169 | { 170 | "name": "Aaron Scherer", 171 | "email": "aequasi@gmail.com", 172 | "homepage": "https://github.com/aequasi" 173 | }, 174 | { 175 | "name": "Tobias Nyholm", 176 | "email": "tobias.nyholm@gmail.com", 177 | "homepage": "https://github.com/nyholm" 178 | } 179 | ], 180 | "description": "A PSR-6 cache implementation using filesystem. This implementation supports tags", 181 | "homepage": "http://www.php-cache.com/en/latest/", 182 | "keywords": [ 183 | "cache", 184 | "filesystem", 185 | "psr-6", 186 | "tag" 187 | ], 188 | "support": { 189 | "source": "https://github.com/php-cache/filesystem-adapter/tree/1.2.0" 190 | }, 191 | "time": "2022-01-15T15:47:19+00:00" 192 | }, 193 | { 194 | "name": "cache/tag-interop", 195 | "version": "1.1.0", 196 | "source": { 197 | "type": "git", 198 | "url": "https://github.com/php-cache/tag-interop.git", 199 | "reference": "b062b1d735357da50edf8387f7a8696f3027d328" 200 | }, 201 | "dist": { 202 | "type": "zip", 203 | "url": "https://api.github.com/repos/php-cache/tag-interop/zipball/b062b1d735357da50edf8387f7a8696f3027d328", 204 | "reference": "b062b1d735357da50edf8387f7a8696f3027d328", 205 | "shasum": "" 206 | }, 207 | "require": { 208 | "php": "^5.5 || ^7.0 || ^8.0", 209 | "psr/cache": "^1.0 || ^2.0" 210 | }, 211 | "type": "library", 212 | "extra": { 213 | "branch-alias": { 214 | "dev-master": "1.1-dev" 215 | } 216 | }, 217 | "autoload": { 218 | "psr-4": { 219 | "Cache\\TagInterop\\": "" 220 | } 221 | }, 222 | "notification-url": "https://packagist.org/downloads/", 223 | "license": [ 224 | "MIT" 225 | ], 226 | "authors": [ 227 | { 228 | "name": "Tobias Nyholm", 229 | "email": "tobias.nyholm@gmail.com", 230 | "homepage": "https://github.com/nyholm" 231 | }, 232 | { 233 | "name": "Nicolas Grekas", 234 | "email": "p@tchwork.com", 235 | "homepage": "https://github.com/nicolas-grekas" 236 | } 237 | ], 238 | "description": "Framework interoperable interfaces for tags", 239 | "homepage": "https://www.php-cache.com/en/latest/", 240 | "keywords": [ 241 | "cache", 242 | "psr", 243 | "psr6", 244 | "tag" 245 | ], 246 | "support": { 247 | "issues": "https://github.com/php-cache/tag-interop/issues", 248 | "source": "https://github.com/php-cache/tag-interop/tree/1.1.0" 249 | }, 250 | "time": "2021-12-31T10:03:23+00:00" 251 | }, 252 | { 253 | "name": "composer/pcre", 254 | "version": "3.3.2", 255 | "source": { 256 | "type": "git", 257 | "url": "https://github.com/composer/pcre.git", 258 | "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" 259 | }, 260 | "dist": { 261 | "type": "zip", 262 | "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", 263 | "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", 264 | "shasum": "" 265 | }, 266 | "require": { 267 | "php": "^7.4 || ^8.0" 268 | }, 269 | "conflict": { 270 | "phpstan/phpstan": "<1.11.10" 271 | }, 272 | "require-dev": { 273 | "phpstan/phpstan": "^1.12 || ^2", 274 | "phpstan/phpstan-strict-rules": "^1 || ^2", 275 | "phpunit/phpunit": "^8 || ^9" 276 | }, 277 | "type": "library", 278 | "extra": { 279 | "phpstan": { 280 | "includes": [ 281 | "extension.neon" 282 | ] 283 | }, 284 | "branch-alias": { 285 | "dev-main": "3.x-dev" 286 | } 287 | }, 288 | "autoload": { 289 | "psr-4": { 290 | "Composer\\Pcre\\": "src" 291 | } 292 | }, 293 | "notification-url": "https://packagist.org/downloads/", 294 | "license": [ 295 | "MIT" 296 | ], 297 | "authors": [ 298 | { 299 | "name": "Jordi Boggiano", 300 | "email": "j.boggiano@seld.be", 301 | "homepage": "http://seld.be" 302 | } 303 | ], 304 | "description": "PCRE wrapping library that offers type-safe preg_* replacements.", 305 | "keywords": [ 306 | "PCRE", 307 | "preg", 308 | "regex", 309 | "regular expression" 310 | ], 311 | "support": { 312 | "issues": "https://github.com/composer/pcre/issues", 313 | "source": "https://github.com/composer/pcre/tree/3.3.2" 314 | }, 315 | "funding": [ 316 | { 317 | "url": "https://packagist.com", 318 | "type": "custom" 319 | }, 320 | { 321 | "url": "https://github.com/composer", 322 | "type": "github" 323 | }, 324 | { 325 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 326 | "type": "tidelift" 327 | } 328 | ], 329 | "time": "2024-11-12T16:29:46+00:00" 330 | }, 331 | { 332 | "name": "doctrine/cache", 333 | "version": "1.13.0", 334 | "source": { 335 | "type": "git", 336 | "url": "https://github.com/doctrine/cache.git", 337 | "reference": "56cd022adb5514472cb144c087393c1821911d09" 338 | }, 339 | "dist": { 340 | "type": "zip", 341 | "url": "https://api.github.com/repos/doctrine/cache/zipball/56cd022adb5514472cb144c087393c1821911d09", 342 | "reference": "56cd022adb5514472cb144c087393c1821911d09", 343 | "shasum": "" 344 | }, 345 | "require": { 346 | "php": "~7.1 || ^8.0" 347 | }, 348 | "conflict": { 349 | "doctrine/common": ">2.2,<2.4" 350 | }, 351 | "require-dev": { 352 | "alcaeus/mongo-php-adapter": "^1.1", 353 | "cache/integration-tests": "dev-master", 354 | "doctrine/coding-standard": "^9", 355 | "mongodb/mongodb": "^1.1", 356 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 357 | "predis/predis": "~1.0", 358 | "psr/cache": "^1.0 || ^2.0 || ^3.0", 359 | "symfony/cache": "^4.4 || ^5.4 || ^6", 360 | "symfony/var-exporter": "^4.4 || ^5.4 || ^6" 361 | }, 362 | "suggest": { 363 | "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" 364 | }, 365 | "type": "library", 366 | "autoload": { 367 | "psr-4": { 368 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" 369 | } 370 | }, 371 | "notification-url": "https://packagist.org/downloads/", 372 | "license": [ 373 | "MIT" 374 | ], 375 | "authors": [ 376 | { 377 | "name": "Guilherme Blanco", 378 | "email": "guilhermeblanco@gmail.com" 379 | }, 380 | { 381 | "name": "Roman Borschel", 382 | "email": "roman@code-factory.org" 383 | }, 384 | { 385 | "name": "Benjamin Eberlei", 386 | "email": "kontakt@beberlei.de" 387 | }, 388 | { 389 | "name": "Jonathan Wage", 390 | "email": "jonwage@gmail.com" 391 | }, 392 | { 393 | "name": "Johannes Schmitt", 394 | "email": "schmittjoh@gmail.com" 395 | } 396 | ], 397 | "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", 398 | "homepage": "https://www.doctrine-project.org/projects/cache.html", 399 | "keywords": [ 400 | "abstraction", 401 | "apcu", 402 | "cache", 403 | "caching", 404 | "couchdb", 405 | "memcached", 406 | "php", 407 | "redis", 408 | "xcache" 409 | ], 410 | "support": { 411 | "issues": "https://github.com/doctrine/cache/issues", 412 | "source": "https://github.com/doctrine/cache/tree/1.13.0" 413 | }, 414 | "funding": [ 415 | { 416 | "url": "https://www.doctrine-project.org/sponsorship.html", 417 | "type": "custom" 418 | }, 419 | { 420 | "url": "https://www.patreon.com/phpdoctrine", 421 | "type": "patreon" 422 | }, 423 | { 424 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", 425 | "type": "tidelift" 426 | } 427 | ], 428 | "time": "2022-05-20T20:06:54+00:00" 429 | }, 430 | { 431 | "name": "ezyang/htmlpurifier", 432 | "version": "v4.18.0", 433 | "source": { 434 | "type": "git", 435 | "url": "https://github.com/ezyang/htmlpurifier.git", 436 | "reference": "cb56001e54359df7ae76dc522d08845dc741621b" 437 | }, 438 | "dist": { 439 | "type": "zip", 440 | "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", 441 | "reference": "cb56001e54359df7ae76dc522d08845dc741621b", 442 | "shasum": "" 443 | }, 444 | "require": { 445 | "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" 446 | }, 447 | "require-dev": { 448 | "cerdic/css-tidy": "^1.7 || ^2.0", 449 | "simpletest/simpletest": "dev-master" 450 | }, 451 | "suggest": { 452 | "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", 453 | "ext-bcmath": "Used for unit conversion and imagecrash protection", 454 | "ext-iconv": "Converts text to and from non-UTF-8 encodings", 455 | "ext-tidy": "Used for pretty-printing HTML" 456 | }, 457 | "type": "library", 458 | "autoload": { 459 | "files": [ 460 | "library/HTMLPurifier.composer.php" 461 | ], 462 | "psr-0": { 463 | "HTMLPurifier": "library/" 464 | }, 465 | "exclude-from-classmap": [ 466 | "/library/HTMLPurifier/Language/" 467 | ] 468 | }, 469 | "notification-url": "https://packagist.org/downloads/", 470 | "license": [ 471 | "LGPL-2.1-or-later" 472 | ], 473 | "authors": [ 474 | { 475 | "name": "Edward Z. Yang", 476 | "email": "admin@htmlpurifier.org", 477 | "homepage": "http://ezyang.com" 478 | } 479 | ], 480 | "description": "Standards compliant HTML filter written in PHP", 481 | "homepage": "http://htmlpurifier.org/", 482 | "keywords": [ 483 | "html" 484 | ], 485 | "support": { 486 | "issues": "https://github.com/ezyang/htmlpurifier/issues", 487 | "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" 488 | }, 489 | "time": "2024-11-01T03:51:45+00:00" 490 | }, 491 | { 492 | "name": "guzzlehttp/guzzle", 493 | "version": "7.9.3", 494 | "source": { 495 | "type": "git", 496 | "url": "https://github.com/guzzle/guzzle.git", 497 | "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" 498 | }, 499 | "dist": { 500 | "type": "zip", 501 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", 502 | "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", 503 | "shasum": "" 504 | }, 505 | "require": { 506 | "ext-json": "*", 507 | "guzzlehttp/promises": "^1.5.3 || ^2.0.3", 508 | "guzzlehttp/psr7": "^2.7.0", 509 | "php": "^7.2.5 || ^8.0", 510 | "psr/http-client": "^1.0", 511 | "symfony/deprecation-contracts": "^2.2 || ^3.0" 512 | }, 513 | "provide": { 514 | "psr/http-client-implementation": "1.0" 515 | }, 516 | "require-dev": { 517 | "bamarni/composer-bin-plugin": "^1.8.2", 518 | "ext-curl": "*", 519 | "guzzle/client-integration-tests": "3.0.2", 520 | "php-http/message-factory": "^1.1", 521 | "phpunit/phpunit": "^8.5.39 || ^9.6.20", 522 | "psr/log": "^1.1 || ^2.0 || ^3.0" 523 | }, 524 | "suggest": { 525 | "ext-curl": "Required for CURL handler support", 526 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 527 | "psr/log": "Required for using the Log middleware" 528 | }, 529 | "type": "library", 530 | "extra": { 531 | "bamarni-bin": { 532 | "bin-links": true, 533 | "forward-command": false 534 | } 535 | }, 536 | "autoload": { 537 | "files": [ 538 | "src/functions_include.php" 539 | ], 540 | "psr-4": { 541 | "GuzzleHttp\\": "src/" 542 | } 543 | }, 544 | "notification-url": "https://packagist.org/downloads/", 545 | "license": [ 546 | "MIT" 547 | ], 548 | "authors": [ 549 | { 550 | "name": "Graham Campbell", 551 | "email": "hello@gjcampbell.co.uk", 552 | "homepage": "https://github.com/GrahamCampbell" 553 | }, 554 | { 555 | "name": "Michael Dowling", 556 | "email": "mtdowling@gmail.com", 557 | "homepage": "https://github.com/mtdowling" 558 | }, 559 | { 560 | "name": "Jeremy Lindblom", 561 | "email": "jeremeamia@gmail.com", 562 | "homepage": "https://github.com/jeremeamia" 563 | }, 564 | { 565 | "name": "George Mponos", 566 | "email": "gmponos@gmail.com", 567 | "homepage": "https://github.com/gmponos" 568 | }, 569 | { 570 | "name": "Tobias Nyholm", 571 | "email": "tobias.nyholm@gmail.com", 572 | "homepage": "https://github.com/Nyholm" 573 | }, 574 | { 575 | "name": "Márk Sági-Kazár", 576 | "email": "mark.sagikazar@gmail.com", 577 | "homepage": "https://github.com/sagikazarmark" 578 | }, 579 | { 580 | "name": "Tobias Schultze", 581 | "email": "webmaster@tubo-world.de", 582 | "homepage": "https://github.com/Tobion" 583 | } 584 | ], 585 | "description": "Guzzle is a PHP HTTP client library", 586 | "keywords": [ 587 | "client", 588 | "curl", 589 | "framework", 590 | "http", 591 | "http client", 592 | "psr-18", 593 | "psr-7", 594 | "rest", 595 | "web service" 596 | ], 597 | "support": { 598 | "issues": "https://github.com/guzzle/guzzle/issues", 599 | "source": "https://github.com/guzzle/guzzle/tree/7.9.3" 600 | }, 601 | "funding": [ 602 | { 603 | "url": "https://github.com/GrahamCampbell", 604 | "type": "github" 605 | }, 606 | { 607 | "url": "https://github.com/Nyholm", 608 | "type": "github" 609 | }, 610 | { 611 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", 612 | "type": "tidelift" 613 | } 614 | ], 615 | "time": "2025-03-27T13:37:11+00:00" 616 | }, 617 | { 618 | "name": "guzzlehttp/promises", 619 | "version": "2.2.0", 620 | "source": { 621 | "type": "git", 622 | "url": "https://github.com/guzzle/promises.git", 623 | "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" 624 | }, 625 | "dist": { 626 | "type": "zip", 627 | "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", 628 | "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", 629 | "shasum": "" 630 | }, 631 | "require": { 632 | "php": "^7.2.5 || ^8.0" 633 | }, 634 | "require-dev": { 635 | "bamarni/composer-bin-plugin": "^1.8.2", 636 | "phpunit/phpunit": "^8.5.39 || ^9.6.20" 637 | }, 638 | "type": "library", 639 | "extra": { 640 | "bamarni-bin": { 641 | "bin-links": true, 642 | "forward-command": false 643 | } 644 | }, 645 | "autoload": { 646 | "psr-4": { 647 | "GuzzleHttp\\Promise\\": "src/" 648 | } 649 | }, 650 | "notification-url": "https://packagist.org/downloads/", 651 | "license": [ 652 | "MIT" 653 | ], 654 | "authors": [ 655 | { 656 | "name": "Graham Campbell", 657 | "email": "hello@gjcampbell.co.uk", 658 | "homepage": "https://github.com/GrahamCampbell" 659 | }, 660 | { 661 | "name": "Michael Dowling", 662 | "email": "mtdowling@gmail.com", 663 | "homepage": "https://github.com/mtdowling" 664 | }, 665 | { 666 | "name": "Tobias Nyholm", 667 | "email": "tobias.nyholm@gmail.com", 668 | "homepage": "https://github.com/Nyholm" 669 | }, 670 | { 671 | "name": "Tobias Schultze", 672 | "email": "webmaster@tubo-world.de", 673 | "homepage": "https://github.com/Tobion" 674 | } 675 | ], 676 | "description": "Guzzle promises library", 677 | "keywords": [ 678 | "promise" 679 | ], 680 | "support": { 681 | "issues": "https://github.com/guzzle/promises/issues", 682 | "source": "https://github.com/guzzle/promises/tree/2.2.0" 683 | }, 684 | "funding": [ 685 | { 686 | "url": "https://github.com/GrahamCampbell", 687 | "type": "github" 688 | }, 689 | { 690 | "url": "https://github.com/Nyholm", 691 | "type": "github" 692 | }, 693 | { 694 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", 695 | "type": "tidelift" 696 | } 697 | ], 698 | "time": "2025-03-27T13:27:01+00:00" 699 | }, 700 | { 701 | "name": "guzzlehttp/psr7", 702 | "version": "2.7.1", 703 | "source": { 704 | "type": "git", 705 | "url": "https://github.com/guzzle/psr7.git", 706 | "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" 707 | }, 708 | "dist": { 709 | "type": "zip", 710 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", 711 | "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", 712 | "shasum": "" 713 | }, 714 | "require": { 715 | "php": "^7.2.5 || ^8.0", 716 | "psr/http-factory": "^1.0", 717 | "psr/http-message": "^1.1 || ^2.0", 718 | "ralouphie/getallheaders": "^3.0" 719 | }, 720 | "provide": { 721 | "psr/http-factory-implementation": "1.0", 722 | "psr/http-message-implementation": "1.0" 723 | }, 724 | "require-dev": { 725 | "bamarni/composer-bin-plugin": "^1.8.2", 726 | "http-interop/http-factory-tests": "0.9.0", 727 | "phpunit/phpunit": "^8.5.39 || ^9.6.20" 728 | }, 729 | "suggest": { 730 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 731 | }, 732 | "type": "library", 733 | "extra": { 734 | "bamarni-bin": { 735 | "bin-links": true, 736 | "forward-command": false 737 | } 738 | }, 739 | "autoload": { 740 | "psr-4": { 741 | "GuzzleHttp\\Psr7\\": "src/" 742 | } 743 | }, 744 | "notification-url": "https://packagist.org/downloads/", 745 | "license": [ 746 | "MIT" 747 | ], 748 | "authors": [ 749 | { 750 | "name": "Graham Campbell", 751 | "email": "hello@gjcampbell.co.uk", 752 | "homepage": "https://github.com/GrahamCampbell" 753 | }, 754 | { 755 | "name": "Michael Dowling", 756 | "email": "mtdowling@gmail.com", 757 | "homepage": "https://github.com/mtdowling" 758 | }, 759 | { 760 | "name": "George Mponos", 761 | "email": "gmponos@gmail.com", 762 | "homepage": "https://github.com/gmponos" 763 | }, 764 | { 765 | "name": "Tobias Nyholm", 766 | "email": "tobias.nyholm@gmail.com", 767 | "homepage": "https://github.com/Nyholm" 768 | }, 769 | { 770 | "name": "Márk Sági-Kazár", 771 | "email": "mark.sagikazar@gmail.com", 772 | "homepage": "https://github.com/sagikazarmark" 773 | }, 774 | { 775 | "name": "Tobias Schultze", 776 | "email": "webmaster@tubo-world.de", 777 | "homepage": "https://github.com/Tobion" 778 | }, 779 | { 780 | "name": "Márk Sági-Kazár", 781 | "email": "mark.sagikazar@gmail.com", 782 | "homepage": "https://sagikazarmark.hu" 783 | } 784 | ], 785 | "description": "PSR-7 message implementation that also provides common utility methods", 786 | "keywords": [ 787 | "http", 788 | "message", 789 | "psr-7", 790 | "request", 791 | "response", 792 | "stream", 793 | "uri", 794 | "url" 795 | ], 796 | "support": { 797 | "issues": "https://github.com/guzzle/psr7/issues", 798 | "source": "https://github.com/guzzle/psr7/tree/2.7.1" 799 | }, 800 | "funding": [ 801 | { 802 | "url": "https://github.com/GrahamCampbell", 803 | "type": "github" 804 | }, 805 | { 806 | "url": "https://github.com/Nyholm", 807 | "type": "github" 808 | }, 809 | { 810 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", 811 | "type": "tidelift" 812 | } 813 | ], 814 | "time": "2025-03-27T12:30:47+00:00" 815 | }, 816 | { 817 | "name": "jsvrcek/ics", 818 | "version": "0.8.5", 819 | "source": { 820 | "type": "git", 821 | "url": "https://github.com/jasvrcek/ICS.git", 822 | "reference": "11a24ac95648d720a1370c5bb20988b1739a63a4" 823 | }, 824 | "dist": { 825 | "type": "zip", 826 | "url": "https://api.github.com/repos/jasvrcek/ICS/zipball/11a24ac95648d720a1370c5bb20988b1739a63a4", 827 | "reference": "11a24ac95648d720a1370c5bb20988b1739a63a4", 828 | "shasum": "" 829 | }, 830 | "require": { 831 | "php": ">=5.6" 832 | }, 833 | "require-dev": { 834 | "phpunit/phpunit": "^4.8 || ^5.5 || >=6.0" 835 | }, 836 | "type": "library", 837 | "autoload": { 838 | "psr-4": { 839 | "Jsvrcek\\ICS\\": "src/" 840 | } 841 | }, 842 | "notification-url": "https://packagist.org/downloads/", 843 | "license": [ 844 | "MIT" 845 | ], 846 | "authors": [ 847 | { 848 | "name": "Justin Svrcek", 849 | "homepage": "https://github.com/jasvrcek" 850 | } 851 | ], 852 | "description": "abstraction layer for creating multi-byte safe RFC 5545 compliant .ics files", 853 | "homepage": "https://github.com/jasvrcek/ICS", 854 | "keywords": [ 855 | ".ics", 856 | "RFC 5545", 857 | "calendar", 858 | "export", 859 | "ical", 860 | "multi-byte safe" 861 | ], 862 | "support": { 863 | "issues": "https://github.com/jasvrcek/ICS/issues", 864 | "source": "https://github.com/jasvrcek/ICS/tree/0.8.5" 865 | }, 866 | "time": "2023-01-17T22:16:11+00:00" 867 | }, 868 | { 869 | "name": "league/flysystem", 870 | "version": "1.1.10", 871 | "source": { 872 | "type": "git", 873 | "url": "https://github.com/thephpleague/flysystem.git", 874 | "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" 875 | }, 876 | "dist": { 877 | "type": "zip", 878 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", 879 | "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", 880 | "shasum": "" 881 | }, 882 | "require": { 883 | "ext-fileinfo": "*", 884 | "league/mime-type-detection": "^1.3", 885 | "php": "^7.2.5 || ^8.0" 886 | }, 887 | "conflict": { 888 | "league/flysystem-sftp": "<1.0.6" 889 | }, 890 | "require-dev": { 891 | "phpspec/prophecy": "^1.11.1", 892 | "phpunit/phpunit": "^8.5.8" 893 | }, 894 | "suggest": { 895 | "ext-ftp": "Allows you to use FTP server storage", 896 | "ext-openssl": "Allows you to use FTPS server storage", 897 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", 898 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", 899 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", 900 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", 901 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", 902 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", 903 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", 904 | "league/flysystem-webdav": "Allows you to use WebDAV storage", 905 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", 906 | "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", 907 | "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" 908 | }, 909 | "type": "library", 910 | "extra": { 911 | "branch-alias": { 912 | "dev-master": "1.1-dev" 913 | } 914 | }, 915 | "autoload": { 916 | "psr-4": { 917 | "League\\Flysystem\\": "src/" 918 | } 919 | }, 920 | "notification-url": "https://packagist.org/downloads/", 921 | "license": [ 922 | "MIT" 923 | ], 924 | "authors": [ 925 | { 926 | "name": "Frank de Jonge", 927 | "email": "info@frenky.net" 928 | } 929 | ], 930 | "description": "Filesystem abstraction: Many filesystems, one API.", 931 | "keywords": [ 932 | "Cloud Files", 933 | "WebDAV", 934 | "abstraction", 935 | "aws", 936 | "cloud", 937 | "copy.com", 938 | "dropbox", 939 | "file systems", 940 | "files", 941 | "filesystem", 942 | "filesystems", 943 | "ftp", 944 | "rackspace", 945 | "remote", 946 | "s3", 947 | "sftp", 948 | "storage" 949 | ], 950 | "support": { 951 | "issues": "https://github.com/thephpleague/flysystem/issues", 952 | "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" 953 | }, 954 | "funding": [ 955 | { 956 | "url": "https://offset.earth/frankdejonge", 957 | "type": "other" 958 | } 959 | ], 960 | "time": "2022-10-04T09:16:37+00:00" 961 | }, 962 | { 963 | "name": "league/mime-type-detection", 964 | "version": "1.16.0", 965 | "source": { 966 | "type": "git", 967 | "url": "https://github.com/thephpleague/mime-type-detection.git", 968 | "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" 969 | }, 970 | "dist": { 971 | "type": "zip", 972 | "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", 973 | "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", 974 | "shasum": "" 975 | }, 976 | "require": { 977 | "ext-fileinfo": "*", 978 | "php": "^7.4 || ^8.0" 979 | }, 980 | "require-dev": { 981 | "friendsofphp/php-cs-fixer": "^3.2", 982 | "phpstan/phpstan": "^0.12.68", 983 | "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" 984 | }, 985 | "type": "library", 986 | "autoload": { 987 | "psr-4": { 988 | "League\\MimeTypeDetection\\": "src" 989 | } 990 | }, 991 | "notification-url": "https://packagist.org/downloads/", 992 | "license": [ 993 | "MIT" 994 | ], 995 | "authors": [ 996 | { 997 | "name": "Frank de Jonge", 998 | "email": "info@frankdejonge.nl" 999 | } 1000 | ], 1001 | "description": "Mime-type detection for Flysystem", 1002 | "support": { 1003 | "issues": "https://github.com/thephpleague/mime-type-detection/issues", 1004 | "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" 1005 | }, 1006 | "funding": [ 1007 | { 1008 | "url": "https://github.com/frankdejonge", 1009 | "type": "github" 1010 | }, 1011 | { 1012 | "url": "https://tidelift.com/funding/github/packagist/league/flysystem", 1013 | "type": "tidelift" 1014 | } 1015 | ], 1016 | "time": "2024-09-21T08:32:55+00:00" 1017 | }, 1018 | { 1019 | "name": "maennchen/zipstream-php", 1020 | "version": "3.1.1", 1021 | "source": { 1022 | "type": "git", 1023 | "url": "https://github.com/maennchen/ZipStream-PHP.git", 1024 | "reference": "6187e9cc4493da94b9b63eb2315821552015fca9" 1025 | }, 1026 | "dist": { 1027 | "type": "zip", 1028 | "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9", 1029 | "reference": "6187e9cc4493da94b9b63eb2315821552015fca9", 1030 | "shasum": "" 1031 | }, 1032 | "require": { 1033 | "ext-mbstring": "*", 1034 | "ext-zlib": "*", 1035 | "php-64bit": "^8.1" 1036 | }, 1037 | "require-dev": { 1038 | "ext-zip": "*", 1039 | "friendsofphp/php-cs-fixer": "^3.16", 1040 | "guzzlehttp/guzzle": "^7.5", 1041 | "mikey179/vfsstream": "^1.6", 1042 | "php-coveralls/php-coveralls": "^2.5", 1043 | "phpunit/phpunit": "^10.0", 1044 | "vimeo/psalm": "^5.0" 1045 | }, 1046 | "suggest": { 1047 | "guzzlehttp/psr7": "^2.4", 1048 | "psr/http-message": "^2.0" 1049 | }, 1050 | "type": "library", 1051 | "autoload": { 1052 | "psr-4": { 1053 | "ZipStream\\": "src/" 1054 | } 1055 | }, 1056 | "notification-url": "https://packagist.org/downloads/", 1057 | "license": [ 1058 | "MIT" 1059 | ], 1060 | "authors": [ 1061 | { 1062 | "name": "Paul Duncan", 1063 | "email": "pabs@pablotron.org" 1064 | }, 1065 | { 1066 | "name": "Jonatan Männchen", 1067 | "email": "jonatan@maennchen.ch" 1068 | }, 1069 | { 1070 | "name": "Jesse Donat", 1071 | "email": "donatj@gmail.com" 1072 | }, 1073 | { 1074 | "name": "András Kolesár", 1075 | "email": "kolesar@kolesar.hu" 1076 | } 1077 | ], 1078 | "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", 1079 | "keywords": [ 1080 | "stream", 1081 | "zip" 1082 | ], 1083 | "support": { 1084 | "issues": "https://github.com/maennchen/ZipStream-PHP/issues", 1085 | "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1" 1086 | }, 1087 | "funding": [ 1088 | { 1089 | "url": "https://github.com/maennchen", 1090 | "type": "github" 1091 | } 1092 | ], 1093 | "time": "2024-10-10T12:33:01+00:00" 1094 | }, 1095 | { 1096 | "name": "markbaker/complex", 1097 | "version": "3.0.2", 1098 | "source": { 1099 | "type": "git", 1100 | "url": "https://github.com/MarkBaker/PHPComplex.git", 1101 | "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" 1102 | }, 1103 | "dist": { 1104 | "type": "zip", 1105 | "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", 1106 | "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", 1107 | "shasum": "" 1108 | }, 1109 | "require": { 1110 | "php": "^7.2 || ^8.0" 1111 | }, 1112 | "require-dev": { 1113 | "dealerdirect/phpcodesniffer-composer-installer": "dev-master", 1114 | "phpcompatibility/php-compatibility": "^9.3", 1115 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", 1116 | "squizlabs/php_codesniffer": "^3.7" 1117 | }, 1118 | "type": "library", 1119 | "autoload": { 1120 | "psr-4": { 1121 | "Complex\\": "classes/src/" 1122 | } 1123 | }, 1124 | "notification-url": "https://packagist.org/downloads/", 1125 | "license": [ 1126 | "MIT" 1127 | ], 1128 | "authors": [ 1129 | { 1130 | "name": "Mark Baker", 1131 | "email": "mark@lange.demon.co.uk" 1132 | } 1133 | ], 1134 | "description": "PHP Class for working with complex numbers", 1135 | "homepage": "https://github.com/MarkBaker/PHPComplex", 1136 | "keywords": [ 1137 | "complex", 1138 | "mathematics" 1139 | ], 1140 | "support": { 1141 | "issues": "https://github.com/MarkBaker/PHPComplex/issues", 1142 | "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" 1143 | }, 1144 | "time": "2022-12-06T16:21:08+00:00" 1145 | }, 1146 | { 1147 | "name": "markbaker/matrix", 1148 | "version": "3.0.1", 1149 | "source": { 1150 | "type": "git", 1151 | "url": "https://github.com/MarkBaker/PHPMatrix.git", 1152 | "reference": "728434227fe21be27ff6d86621a1b13107a2562c" 1153 | }, 1154 | "dist": { 1155 | "type": "zip", 1156 | "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", 1157 | "reference": "728434227fe21be27ff6d86621a1b13107a2562c", 1158 | "shasum": "" 1159 | }, 1160 | "require": { 1161 | "php": "^7.1 || ^8.0" 1162 | }, 1163 | "require-dev": { 1164 | "dealerdirect/phpcodesniffer-composer-installer": "dev-master", 1165 | "phpcompatibility/php-compatibility": "^9.3", 1166 | "phpdocumentor/phpdocumentor": "2.*", 1167 | "phploc/phploc": "^4.0", 1168 | "phpmd/phpmd": "2.*", 1169 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", 1170 | "sebastian/phpcpd": "^4.0", 1171 | "squizlabs/php_codesniffer": "^3.7" 1172 | }, 1173 | "type": "library", 1174 | "autoload": { 1175 | "psr-4": { 1176 | "Matrix\\": "classes/src/" 1177 | } 1178 | }, 1179 | "notification-url": "https://packagist.org/downloads/", 1180 | "license": [ 1181 | "MIT" 1182 | ], 1183 | "authors": [ 1184 | { 1185 | "name": "Mark Baker", 1186 | "email": "mark@demon-angel.eu" 1187 | } 1188 | ], 1189 | "description": "PHP Class for working with matrices", 1190 | "homepage": "https://github.com/MarkBaker/PHPMatrix", 1191 | "keywords": [ 1192 | "mathematics", 1193 | "matrix", 1194 | "vector" 1195 | ], 1196 | "support": { 1197 | "issues": "https://github.com/MarkBaker/PHPMatrix/issues", 1198 | "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" 1199 | }, 1200 | "time": "2022-12-02T22:17:43+00:00" 1201 | }, 1202 | { 1203 | "name": "monolog/monolog", 1204 | "version": "3.9.0", 1205 | "source": { 1206 | "type": "git", 1207 | "url": "https://github.com/Seldaek/monolog.git", 1208 | "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" 1209 | }, 1210 | "dist": { 1211 | "type": "zip", 1212 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", 1213 | "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", 1214 | "shasum": "" 1215 | }, 1216 | "require": { 1217 | "php": ">=8.1", 1218 | "psr/log": "^2.0 || ^3.0" 1219 | }, 1220 | "provide": { 1221 | "psr/log-implementation": "3.0.0" 1222 | }, 1223 | "require-dev": { 1224 | "aws/aws-sdk-php": "^3.0", 1225 | "doctrine/couchdb": "~1.0@dev", 1226 | "elasticsearch/elasticsearch": "^7 || ^8", 1227 | "ext-json": "*", 1228 | "graylog2/gelf-php": "^1.4.2 || ^2.0", 1229 | "guzzlehttp/guzzle": "^7.4.5", 1230 | "guzzlehttp/psr7": "^2.2", 1231 | "mongodb/mongodb": "^1.8", 1232 | "php-amqplib/php-amqplib": "~2.4 || ^3", 1233 | "php-console/php-console": "^3.1.8", 1234 | "phpstan/phpstan": "^2", 1235 | "phpstan/phpstan-deprecation-rules": "^2", 1236 | "phpstan/phpstan-strict-rules": "^2", 1237 | "phpunit/phpunit": "^10.5.17 || ^11.0.7", 1238 | "predis/predis": "^1.1 || ^2", 1239 | "rollbar/rollbar": "^4.0", 1240 | "ruflin/elastica": "^7 || ^8", 1241 | "symfony/mailer": "^5.4 || ^6", 1242 | "symfony/mime": "^5.4 || ^6" 1243 | }, 1244 | "suggest": { 1245 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 1246 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 1247 | "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", 1248 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 1249 | "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", 1250 | "ext-mbstring": "Allow to work properly with unicode symbols", 1251 | "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", 1252 | "ext-openssl": "Required to send log messages using SSL", 1253 | "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", 1254 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 1255 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", 1256 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 1257 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 1258 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server" 1259 | }, 1260 | "type": "library", 1261 | "extra": { 1262 | "branch-alias": { 1263 | "dev-main": "3.x-dev" 1264 | } 1265 | }, 1266 | "autoload": { 1267 | "psr-4": { 1268 | "Monolog\\": "src/Monolog" 1269 | } 1270 | }, 1271 | "notification-url": "https://packagist.org/downloads/", 1272 | "license": [ 1273 | "MIT" 1274 | ], 1275 | "authors": [ 1276 | { 1277 | "name": "Jordi Boggiano", 1278 | "email": "j.boggiano@seld.be", 1279 | "homepage": "https://seld.be" 1280 | } 1281 | ], 1282 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 1283 | "homepage": "https://github.com/Seldaek/monolog", 1284 | "keywords": [ 1285 | "log", 1286 | "logging", 1287 | "psr-3" 1288 | ], 1289 | "support": { 1290 | "issues": "https://github.com/Seldaek/monolog/issues", 1291 | "source": "https://github.com/Seldaek/monolog/tree/3.9.0" 1292 | }, 1293 | "funding": [ 1294 | { 1295 | "url": "https://github.com/Seldaek", 1296 | "type": "github" 1297 | }, 1298 | { 1299 | "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", 1300 | "type": "tidelift" 1301 | } 1302 | ], 1303 | "time": "2025-03-24T10:02:05+00:00" 1304 | }, 1305 | { 1306 | "name": "phpoffice/phpspreadsheet", 1307 | "version": "1.29.11", 1308 | "source": { 1309 | "type": "git", 1310 | "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", 1311 | "reference": "05b6c4378ddf3e81b460ea645c42b46432c0db25" 1312 | }, 1313 | "dist": { 1314 | "type": "zip", 1315 | "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/05b6c4378ddf3e81b460ea645c42b46432c0db25", 1316 | "reference": "05b6c4378ddf3e81b460ea645c42b46432c0db25", 1317 | "shasum": "" 1318 | }, 1319 | "require": { 1320 | "composer/pcre": "^1||^2||^3", 1321 | "ext-ctype": "*", 1322 | "ext-dom": "*", 1323 | "ext-fileinfo": "*", 1324 | "ext-gd": "*", 1325 | "ext-iconv": "*", 1326 | "ext-libxml": "*", 1327 | "ext-mbstring": "*", 1328 | "ext-simplexml": "*", 1329 | "ext-xml": "*", 1330 | "ext-xmlreader": "*", 1331 | "ext-xmlwriter": "*", 1332 | "ext-zip": "*", 1333 | "ext-zlib": "*", 1334 | "ezyang/htmlpurifier": "^4.15", 1335 | "maennchen/zipstream-php": "^2.1 || ^3.0", 1336 | "markbaker/complex": "^3.0", 1337 | "markbaker/matrix": "^3.0", 1338 | "php": "^7.4 || ^8.0", 1339 | "psr/http-client": "^1.0", 1340 | "psr/http-factory": "^1.0", 1341 | "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" 1342 | }, 1343 | "require-dev": { 1344 | "dealerdirect/phpcodesniffer-composer-installer": "dev-main", 1345 | "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", 1346 | "friendsofphp/php-cs-fixer": "^3.2", 1347 | "mitoteam/jpgraph": "^10.3", 1348 | "mpdf/mpdf": "^8.1.1", 1349 | "phpcompatibility/php-compatibility": "^9.3", 1350 | "phpstan/phpstan": "^1.1", 1351 | "phpstan/phpstan-phpunit": "^1.0", 1352 | "phpunit/phpunit": "^8.5 || ^9.0", 1353 | "squizlabs/php_codesniffer": "^3.7", 1354 | "tecnickcom/tcpdf": "^6.5" 1355 | }, 1356 | "suggest": { 1357 | "dompdf/dompdf": "Option for rendering PDF with PDF Writer", 1358 | "ext-intl": "PHP Internationalization Functions", 1359 | "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", 1360 | "mpdf/mpdf": "Option for rendering PDF with PDF Writer", 1361 | "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" 1362 | }, 1363 | "type": "library", 1364 | "autoload": { 1365 | "psr-4": { 1366 | "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" 1367 | } 1368 | }, 1369 | "notification-url": "https://packagist.org/downloads/", 1370 | "license": [ 1371 | "MIT" 1372 | ], 1373 | "authors": [ 1374 | { 1375 | "name": "Maarten Balliauw", 1376 | "homepage": "https://blog.maartenballiauw.be" 1377 | }, 1378 | { 1379 | "name": "Mark Baker", 1380 | "homepage": "https://markbakeruk.net" 1381 | }, 1382 | { 1383 | "name": "Franck Lefevre", 1384 | "homepage": "https://rootslabs.net" 1385 | }, 1386 | { 1387 | "name": "Erik Tilt" 1388 | }, 1389 | { 1390 | "name": "Adrien Crivelli" 1391 | } 1392 | ], 1393 | "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", 1394 | "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", 1395 | "keywords": [ 1396 | "OpenXML", 1397 | "excel", 1398 | "gnumeric", 1399 | "ods", 1400 | "php", 1401 | "spreadsheet", 1402 | "xls", 1403 | "xlsx" 1404 | ], 1405 | "support": { 1406 | "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", 1407 | "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.11" 1408 | }, 1409 | "time": "2025-06-23T01:22:06+00:00" 1410 | }, 1411 | { 1412 | "name": "psr/cache", 1413 | "version": "2.0.0", 1414 | "source": { 1415 | "type": "git", 1416 | "url": "https://github.com/php-fig/cache.git", 1417 | "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b" 1418 | }, 1419 | "dist": { 1420 | "type": "zip", 1421 | "url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", 1422 | "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", 1423 | "shasum": "" 1424 | }, 1425 | "require": { 1426 | "php": ">=8.0.0" 1427 | }, 1428 | "type": "library", 1429 | "extra": { 1430 | "branch-alias": { 1431 | "dev-master": "1.0.x-dev" 1432 | } 1433 | }, 1434 | "autoload": { 1435 | "psr-4": { 1436 | "Psr\\Cache\\": "src/" 1437 | } 1438 | }, 1439 | "notification-url": "https://packagist.org/downloads/", 1440 | "license": [ 1441 | "MIT" 1442 | ], 1443 | "authors": [ 1444 | { 1445 | "name": "PHP-FIG", 1446 | "homepage": "https://www.php-fig.org/" 1447 | } 1448 | ], 1449 | "description": "Common interface for caching libraries", 1450 | "keywords": [ 1451 | "cache", 1452 | "psr", 1453 | "psr-6" 1454 | ], 1455 | "support": { 1456 | "source": "https://github.com/php-fig/cache/tree/2.0.0" 1457 | }, 1458 | "time": "2021-02-03T23:23:37+00:00" 1459 | }, 1460 | { 1461 | "name": "psr/http-client", 1462 | "version": "1.0.3", 1463 | "source": { 1464 | "type": "git", 1465 | "url": "https://github.com/php-fig/http-client.git", 1466 | "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" 1467 | }, 1468 | "dist": { 1469 | "type": "zip", 1470 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", 1471 | "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", 1472 | "shasum": "" 1473 | }, 1474 | "require": { 1475 | "php": "^7.0 || ^8.0", 1476 | "psr/http-message": "^1.0 || ^2.0" 1477 | }, 1478 | "type": "library", 1479 | "extra": { 1480 | "branch-alias": { 1481 | "dev-master": "1.0.x-dev" 1482 | } 1483 | }, 1484 | "autoload": { 1485 | "psr-4": { 1486 | "Psr\\Http\\Client\\": "src/" 1487 | } 1488 | }, 1489 | "notification-url": "https://packagist.org/downloads/", 1490 | "license": [ 1491 | "MIT" 1492 | ], 1493 | "authors": [ 1494 | { 1495 | "name": "PHP-FIG", 1496 | "homepage": "https://www.php-fig.org/" 1497 | } 1498 | ], 1499 | "description": "Common interface for HTTP clients", 1500 | "homepage": "https://github.com/php-fig/http-client", 1501 | "keywords": [ 1502 | "http", 1503 | "http-client", 1504 | "psr", 1505 | "psr-18" 1506 | ], 1507 | "support": { 1508 | "source": "https://github.com/php-fig/http-client" 1509 | }, 1510 | "time": "2023-09-23T14:17:50+00:00" 1511 | }, 1512 | { 1513 | "name": "psr/http-factory", 1514 | "version": "1.1.0", 1515 | "source": { 1516 | "type": "git", 1517 | "url": "https://github.com/php-fig/http-factory.git", 1518 | "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" 1519 | }, 1520 | "dist": { 1521 | "type": "zip", 1522 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", 1523 | "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", 1524 | "shasum": "" 1525 | }, 1526 | "require": { 1527 | "php": ">=7.1", 1528 | "psr/http-message": "^1.0 || ^2.0" 1529 | }, 1530 | "type": "library", 1531 | "extra": { 1532 | "branch-alias": { 1533 | "dev-master": "1.0.x-dev" 1534 | } 1535 | }, 1536 | "autoload": { 1537 | "psr-4": { 1538 | "Psr\\Http\\Message\\": "src/" 1539 | } 1540 | }, 1541 | "notification-url": "https://packagist.org/downloads/", 1542 | "license": [ 1543 | "MIT" 1544 | ], 1545 | "authors": [ 1546 | { 1547 | "name": "PHP-FIG", 1548 | "homepage": "https://www.php-fig.org/" 1549 | } 1550 | ], 1551 | "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", 1552 | "keywords": [ 1553 | "factory", 1554 | "http", 1555 | "message", 1556 | "psr", 1557 | "psr-17", 1558 | "psr-7", 1559 | "request", 1560 | "response" 1561 | ], 1562 | "support": { 1563 | "source": "https://github.com/php-fig/http-factory" 1564 | }, 1565 | "time": "2024-04-15T12:06:14+00:00" 1566 | }, 1567 | { 1568 | "name": "psr/http-message", 1569 | "version": "2.0", 1570 | "source": { 1571 | "type": "git", 1572 | "url": "https://github.com/php-fig/http-message.git", 1573 | "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" 1574 | }, 1575 | "dist": { 1576 | "type": "zip", 1577 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", 1578 | "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", 1579 | "shasum": "" 1580 | }, 1581 | "require": { 1582 | "php": "^7.2 || ^8.0" 1583 | }, 1584 | "type": "library", 1585 | "extra": { 1586 | "branch-alias": { 1587 | "dev-master": "2.0.x-dev" 1588 | } 1589 | }, 1590 | "autoload": { 1591 | "psr-4": { 1592 | "Psr\\Http\\Message\\": "src/" 1593 | } 1594 | }, 1595 | "notification-url": "https://packagist.org/downloads/", 1596 | "license": [ 1597 | "MIT" 1598 | ], 1599 | "authors": [ 1600 | { 1601 | "name": "PHP-FIG", 1602 | "homepage": "https://www.php-fig.org/" 1603 | } 1604 | ], 1605 | "description": "Common interface for HTTP messages", 1606 | "homepage": "https://github.com/php-fig/http-message", 1607 | "keywords": [ 1608 | "http", 1609 | "http-message", 1610 | "psr", 1611 | "psr-7", 1612 | "request", 1613 | "response" 1614 | ], 1615 | "support": { 1616 | "source": "https://github.com/php-fig/http-message/tree/2.0" 1617 | }, 1618 | "time": "2023-04-04T09:54:51+00:00" 1619 | }, 1620 | { 1621 | "name": "psr/log", 1622 | "version": "3.0.2", 1623 | "source": { 1624 | "type": "git", 1625 | "url": "https://github.com/php-fig/log.git", 1626 | "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" 1627 | }, 1628 | "dist": { 1629 | "type": "zip", 1630 | "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 1631 | "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 1632 | "shasum": "" 1633 | }, 1634 | "require": { 1635 | "php": ">=8.0.0" 1636 | }, 1637 | "type": "library", 1638 | "extra": { 1639 | "branch-alias": { 1640 | "dev-master": "3.x-dev" 1641 | } 1642 | }, 1643 | "autoload": { 1644 | "psr-4": { 1645 | "Psr\\Log\\": "src" 1646 | } 1647 | }, 1648 | "notification-url": "https://packagist.org/downloads/", 1649 | "license": [ 1650 | "MIT" 1651 | ], 1652 | "authors": [ 1653 | { 1654 | "name": "PHP-FIG", 1655 | "homepage": "https://www.php-fig.org/" 1656 | } 1657 | ], 1658 | "description": "Common interface for logging libraries", 1659 | "homepage": "https://github.com/php-fig/log", 1660 | "keywords": [ 1661 | "log", 1662 | "psr", 1663 | "psr-3" 1664 | ], 1665 | "support": { 1666 | "source": "https://github.com/php-fig/log/tree/3.0.2" 1667 | }, 1668 | "time": "2024-09-11T13:17:53+00:00" 1669 | }, 1670 | { 1671 | "name": "psr/simple-cache", 1672 | "version": "1.0.1", 1673 | "source": { 1674 | "type": "git", 1675 | "url": "https://github.com/php-fig/simple-cache.git", 1676 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" 1677 | }, 1678 | "dist": { 1679 | "type": "zip", 1680 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 1681 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 1682 | "shasum": "" 1683 | }, 1684 | "require": { 1685 | "php": ">=5.3.0" 1686 | }, 1687 | "type": "library", 1688 | "extra": { 1689 | "branch-alias": { 1690 | "dev-master": "1.0.x-dev" 1691 | } 1692 | }, 1693 | "autoload": { 1694 | "psr-4": { 1695 | "Psr\\SimpleCache\\": "src/" 1696 | } 1697 | }, 1698 | "notification-url": "https://packagist.org/downloads/", 1699 | "license": [ 1700 | "MIT" 1701 | ], 1702 | "authors": [ 1703 | { 1704 | "name": "PHP-FIG", 1705 | "homepage": "http://www.php-fig.org/" 1706 | } 1707 | ], 1708 | "description": "Common interfaces for simple caching", 1709 | "keywords": [ 1710 | "cache", 1711 | "caching", 1712 | "psr", 1713 | "psr-16", 1714 | "simple-cache" 1715 | ], 1716 | "support": { 1717 | "source": "https://github.com/php-fig/simple-cache/tree/master" 1718 | }, 1719 | "time": "2017-10-23T01:57:42+00:00" 1720 | }, 1721 | { 1722 | "name": "ralouphie/getallheaders", 1723 | "version": "3.0.3", 1724 | "source": { 1725 | "type": "git", 1726 | "url": "https://github.com/ralouphie/getallheaders.git", 1727 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1728 | }, 1729 | "dist": { 1730 | "type": "zip", 1731 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1732 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1733 | "shasum": "" 1734 | }, 1735 | "require": { 1736 | "php": ">=5.6" 1737 | }, 1738 | "require-dev": { 1739 | "php-coveralls/php-coveralls": "^2.1", 1740 | "phpunit/phpunit": "^5 || ^6.5" 1741 | }, 1742 | "type": "library", 1743 | "autoload": { 1744 | "files": [ 1745 | "src/getallheaders.php" 1746 | ] 1747 | }, 1748 | "notification-url": "https://packagist.org/downloads/", 1749 | "license": [ 1750 | "MIT" 1751 | ], 1752 | "authors": [ 1753 | { 1754 | "name": "Ralph Khattar", 1755 | "email": "ralph.khattar@gmail.com" 1756 | } 1757 | ], 1758 | "description": "A polyfill for getallheaders.", 1759 | "support": { 1760 | "issues": "https://github.com/ralouphie/getallheaders/issues", 1761 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 1762 | }, 1763 | "time": "2019-03-08T08:55:37+00:00" 1764 | }, 1765 | { 1766 | "name": "symfony/deprecation-contracts", 1767 | "version": "v3.6.0", 1768 | "source": { 1769 | "type": "git", 1770 | "url": "https://github.com/symfony/deprecation-contracts.git", 1771 | "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" 1772 | }, 1773 | "dist": { 1774 | "type": "zip", 1775 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", 1776 | "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", 1777 | "shasum": "" 1778 | }, 1779 | "require": { 1780 | "php": ">=8.1" 1781 | }, 1782 | "type": "library", 1783 | "extra": { 1784 | "thanks": { 1785 | "url": "https://github.com/symfony/contracts", 1786 | "name": "symfony/contracts" 1787 | }, 1788 | "branch-alias": { 1789 | "dev-main": "3.6-dev" 1790 | } 1791 | }, 1792 | "autoload": { 1793 | "files": [ 1794 | "function.php" 1795 | ] 1796 | }, 1797 | "notification-url": "https://packagist.org/downloads/", 1798 | "license": [ 1799 | "MIT" 1800 | ], 1801 | "authors": [ 1802 | { 1803 | "name": "Nicolas Grekas", 1804 | "email": "p@tchwork.com" 1805 | }, 1806 | { 1807 | "name": "Symfony Community", 1808 | "homepage": "https://symfony.com/contributors" 1809 | } 1810 | ], 1811 | "description": "A generic function and convention to trigger deprecation notices", 1812 | "homepage": "https://symfony.com", 1813 | "support": { 1814 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" 1815 | }, 1816 | "funding": [ 1817 | { 1818 | "url": "https://symfony.com/sponsor", 1819 | "type": "custom" 1820 | }, 1821 | { 1822 | "url": "https://github.com/fabpot", 1823 | "type": "github" 1824 | }, 1825 | { 1826 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1827 | "type": "tidelift" 1828 | } 1829 | ], 1830 | "time": "2024-09-25T14:21:43+00:00" 1831 | }, 1832 | { 1833 | "name": "symfony/polyfill-mbstring", 1834 | "version": "v1.32.0", 1835 | "source": { 1836 | "type": "git", 1837 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1838 | "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" 1839 | }, 1840 | "dist": { 1841 | "type": "zip", 1842 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", 1843 | "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", 1844 | "shasum": "" 1845 | }, 1846 | "require": { 1847 | "ext-iconv": "*", 1848 | "php": ">=7.2" 1849 | }, 1850 | "provide": { 1851 | "ext-mbstring": "*" 1852 | }, 1853 | "suggest": { 1854 | "ext-mbstring": "For best performance" 1855 | }, 1856 | "type": "library", 1857 | "extra": { 1858 | "thanks": { 1859 | "url": "https://github.com/symfony/polyfill", 1860 | "name": "symfony/polyfill" 1861 | } 1862 | }, 1863 | "autoload": { 1864 | "files": [ 1865 | "bootstrap.php" 1866 | ], 1867 | "psr-4": { 1868 | "Symfony\\Polyfill\\Mbstring\\": "" 1869 | } 1870 | }, 1871 | "notification-url": "https://packagist.org/downloads/", 1872 | "license": [ 1873 | "MIT" 1874 | ], 1875 | "authors": [ 1876 | { 1877 | "name": "Nicolas Grekas", 1878 | "email": "p@tchwork.com" 1879 | }, 1880 | { 1881 | "name": "Symfony Community", 1882 | "homepage": "https://symfony.com/contributors" 1883 | } 1884 | ], 1885 | "description": "Symfony polyfill for the Mbstring extension", 1886 | "homepage": "https://symfony.com", 1887 | "keywords": [ 1888 | "compatibility", 1889 | "mbstring", 1890 | "polyfill", 1891 | "portable", 1892 | "shim" 1893 | ], 1894 | "support": { 1895 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" 1896 | }, 1897 | "funding": [ 1898 | { 1899 | "url": "https://symfony.com/sponsor", 1900 | "type": "custom" 1901 | }, 1902 | { 1903 | "url": "https://github.com/fabpot", 1904 | "type": "github" 1905 | }, 1906 | { 1907 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1908 | "type": "tidelift" 1909 | } 1910 | ], 1911 | "time": "2024-12-23T08:48:59+00:00" 1912 | } 1913 | ], 1914 | "packages-dev": [], 1915 | "aliases": [], 1916 | "minimum-stability": "stable", 1917 | "stability-flags": [], 1918 | "prefer-stable": false, 1919 | "prefer-lowest": false, 1920 | "platform": { 1921 | "php": "^8.1" 1922 | }, 1923 | "platform-dev": [], 1924 | "plugin-api-version": "2.6.0" 1925 | } 1926 | --------------------------------------------------------------------------------