{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":27564436,"defaultBranch":"master","name":"coco_xh","ownerLogin":"cmb69","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2014-12-04T23:08:01.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2306138?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1678215446.0","currentOid":""},"activityList":{"items":[{"before":"1e2a2f28297edd92fd0ab7a0be45d705b3cf8f94","after":"8fa4ec81845133e8f6333188ea4789ee9590a18b","ref":"refs/heads/master","pushedAt":"2023-03-10T23:32:43.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Introduce Responder\n\nThis nicely splits the responsibilities of `Response` which is now a\nsimple value object.\n\n* Rename Infra\\Response to Value\\Response\n* Move Response::respond() to Responder","shortMessageHtmlLink":"Introduce Responder"}},{"before":"20a4dc676de4ed559f58d1d0078aa4f59e2378bd","after":"1e2a2f28297edd92fd0ab7a0be45d705b3cf8f94","ref":"refs/heads/master","pushedAt":"2023-03-10T22:57:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise CocoService\n\n* Rename CocoService to Repository\n* Rename parameter\n* Extract ::readContents()\n* Extract ::cocoContent()\n* Extract ::doFindAllNames()\n* ::findAllNames() sorts result\n* Rename local variables\n* Introduce Util::backupName() and BackupName type alias\n* Move deletion of coco and backups to CocoAdmin\n* Replace for loop with foreach\n* Ensure that backups are sorted by date\n* Merge Backups into CocoService\n* Revise test case\n* Drop duplicate test\n* Don't use vfsStream::url()\n* Rename ::dataDir() to ::dataFolder()\n* Prefer type declarations over hints","shortMessageHtmlLink":"Revise CocoService"}},{"before":"166665277003b34117fca970bf6d24cdac4d6d93","after":"20a4dc676de4ed559f58d1d0078aa4f59e2378bd","ref":"refs/heads/master","pushedAt":"2023-03-10T16:52:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Minor refactorings","shortMessageHtmlLink":"Minor refactorings"}},{"before":"a6a7f9eb5a785d03d880f8f652efccdd2cc58eee","after":"166665277003b34117fca970bf6d24cdac4d6d93","ref":"refs/heads/master","pushedAt":"2023-03-10T16:45:46.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise Request\n\nWe provide a crisper, more purpose-build API.\n\n* Make ::cocoText() and ::cocoNames() non-nullable\n* Change ::server() to more specific ::requestTime()\n* Introduce ::cocoAction()\n* Introduce ::cocoAdminAction()\n* Merge ::adm() and ::edit() to ::editMode()","shortMessageHtmlLink":"Revise Request"}},{"before":"fb259269a2109670f25415618eb207ef31ddd7bb","after":"a6a7f9eb5a785d03d880f8f652efccdd2cc58eee","ref":"refs/heads/master","pushedAt":"2023-03-10T15:14:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Don't test for impossible condition\n\n`$s` may be less than zero (i.e. `-1` to signal a not defined page),\nbut never greater than the number of pages (unless some plugin messes\nwith the global variable, what we just ignore).","shortMessageHtmlLink":"Don't test for impossible condition"}},{"before":"05d38ef5c68f489132a3f41171e23ad9f801d668","after":"fb259269a2109670f25415618eb207ef31ddd7bb","ref":"refs/heads/master","pushedAt":"2023-03-10T15:04:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise Search\n\n* Minor refactorings\n* Extract Util::textContainsAllWords()\n* Extract ::renderSearchResults()\n* Extract ::pageRecords()\n* Prefer type declarations over hints","shortMessageHtmlLink":"Revise Search"}},{"before":"7ec7355b2833e63571d30ef2824d874db5cdd0f2","after":"05d38ef5c68f489132a3f41171e23ad9f801d668","ref":"refs/heads/master","pushedAt":"2023-03-10T14:25:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise handlers\n\n* Pass augmented plugin config to Main (instead of single option)\n* Rename BackupController to Main\n* Move BackupController routing into handler\n* BackupController returns Response\n* Rename MainAdminController to CocoAdmin\n* Rename MainController to Coco","shortMessageHtmlLink":"Revise handlers"}},{"before":"ef0fc97089dc1d3409cfddda5adc1a2843151903","after":"7ec7355b2833e63571d30ef2824d874db5cdd0f2","ref":"refs/heads/master","pushedAt":"2023-03-10T13:53:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise CocoService\n\n* Minor refactorings in ::save()\n* :content() returns empty string instead of null\n* Fix regression\n* Extract ::content()\n* Extract ::cocoId()\n* Extract ::headingLine()\n* No PHP_EOL","shortMessageHtmlLink":"Revise CocoService"}},{"before":"345216304d756e5974fc8cdbbbc63056f4936048","after":"ef0fc97089dc1d3409cfddda5adc1a2843151903","ref":"refs/heads/master","pushedAt":"2023-03-10T13:06:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Extract Util\n\n* Extract Util::cocoContent()\n* Extract Util::backupPrefix()\n* Extract Util::isCocoFilename() and ::isBackup()\n* Extract Util::isValidCocoName()\n* Extract Util::parseSearchTerm()","shortMessageHtmlLink":"Extract Util"}},{"before":"da3f39cd9e3262bf5d5505e20470d60384dd83ad","after":"345216304d756e5974fc8cdbbbc63056f4936048","ref":"refs/heads/master","pushedAt":"2023-03-10T11:31:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Inline Forms\n\n* Inline Forms::updateCoco()\n* Inline Forms::deleteCocos()","shortMessageHtmlLink":"Inline Forms"}},{"before":"f42ad7864d080d1d537ad088d1f77fe2259350c2","after":"da3f39cd9e3262bf5d5505e20470d60384dd83ad","ref":"refs/heads/master","pushedAt":"2023-03-09T22:42:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise tests\n\n* Exclude uncoverable top-level scripts from report\n* Test CsrfProtector\n* IdGenerator and XhStuff are humble classes\n* Test Backups\n* Test Pages\n* Move CocoServiceTest to Infra\\CocoServiceTest\n* No more need to autoload test classes, since the fakes are gone\n* Test CocoService against mocks\n* Test MainController against mocks\n* Test MainAdminController against mocks\n* Test BackupController against mocks\n* Test Search against mocks\n* Drop FakeSystemChecker","shortMessageHtmlLink":"Revise tests"}},{"before":"8775883616a5dff9cdf00b05ec0294bfe12fe1d9","after":"f42ad7864d080d1d537ad088d1f77fe2259350c2","ref":"refs/heads/master","pushedAt":"2023-03-09T14:30:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Minor improvements to CocoService\n\n* Close directory handles\n* Avoid PHP warnings","shortMessageHtmlLink":"Minor improvements to CocoService"}},{"before":"e7a8448c5d65618a6d4012c746b3691761fa2ab2","after":null,"ref":"refs/heads/misc","pushedAt":"2023-03-07T18:57:26.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"}},{"before":"d804456aa9adb281ca52ee24d685afa6187684c7","after":"8775883616a5dff9cdf00b05ec0294bfe12fe1d9","ref":"refs/heads/master","pushedAt":"2023-03-07T18:57:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Miscellaneous minor improvements\n\n* Improve MainController routing\n* Test fallback save button if no editor is available\n* Prevent direct access to view templates\n* Set page title on plugin info screen\n* No final classes\n* Bump copyright years","shortMessageHtmlLink":"Miscellaneous minor improvements"}},{"before":null,"after":"e7a8448c5d65618a6d4012c746b3691761fa2ab2","ref":"refs/heads/misc","pushedAt":"2023-03-07T18:34:08.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Avoid PHP warnings","shortMessageHtmlLink":"Avoid PHP warnings"}},{"before":"c039398e2c3434e359f0bae852391eee0ec7fbca","after":"d804456aa9adb281ca52ee24d685afa6187684c7","ref":"refs/heads/master","pushedAt":"2023-03-07T17:35:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Update approval tests wrt. c039398","shortMessageHtmlLink":"Update approval tests wrt. c039398"}},{"before":"2e2e93151c17baa5be577178bd822f43b2c22c4d","after":"c039398e2c3434e359f0bae852391eee0ec7fbca","ref":"refs/heads/master","pushedAt":"2023-03-07T17:31:48.000Z","pushType":"push","commitsCount":10,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Make deletion warning more prominent","shortMessageHtmlLink":"Make deletion warning more prominent"}},{"before":"deb7056911bf5f414df27206d4927d38581e41b0","after":"2e2e93151c17baa5be577178bd822f43b2c22c4d","ref":"refs/heads/master","pushedAt":"2023-03-07T15:28:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise MainController\n\n* Implement PRG\n* Extract ::edit()\n* Introduce Posts\n* Extract ::renderEditor()\n* Fix regression\n* Switch → if guard\n* Read s from request\n* Read search from request\n* Handlers should return a response","shortMessageHtmlLink":"Revise MainController"}},{"before":"6307462397a24b15b5981da4900f22d3e29bd72e","after":"deb7056911bf5f414df27206d4927d38581e41b0","ref":"refs/heads/master","pushedAt":"2023-03-07T14:05:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Implement proper CRUD administration\n\nWell, actually only Read and Delete. Anyhow, we do a proper PRG on\nsuccessful deletion.","shortMessageHtmlLink":"Implement proper CRUD administration"}},{"before":"755e7ed22051b12f334bd95d1598056edcedee3f","after":null,"ref":"refs/heads/admin","pushedAt":"2023-03-07T14:05:06.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"}},{"before":null,"after":"755e7ed22051b12f334bd95d1598056edcedee3f","ref":"refs/heads/admin","pushedAt":"2023-03-07T14:04:19.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Implement proper CRUD administration\n\nWell, actually only Read and Delete. Anyhow, we do a proper PRG on\nsuccessful deletion.","shortMessageHtmlLink":"Implement proper CRUD administration"}},{"before":"621b27b96364694636015f1be4a3fcc2d6802de6","after":"6307462397a24b15b5981da4900f22d3e29bd72e","ref":"refs/heads/master","pushedAt":"2023-03-07T12:50:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise view templates\n\n* Use short_open_tags in view templates during development\n* No hyphens in view template names\n* Add trailing newline to messages\n* Use two spaces indent in view templates\n* Use HTML heading comment instead of blank line in view templates","shortMessageHtmlLink":"Revise view templates"}},{"before":"053f9639ee85df72475ef3176680425a7fc7ab48","after":"621b27b96364694636015f1be4a3fcc2d6802de6","ref":"refs/heads/master","pushedAt":"2023-03-07T12:38:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cmb69","name":"Christoph M. Becker","path":"/cmb69","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2306138?s=80&v=4"},"commit":{"message":"Revise view concept\n\nWe implement our own View, which does auto-escaping of all values.\nThis also rids us of the Plib_XH dependency.\n\n* No stdClass\n* Fix regression\n* Remove Plib dependency\n* All templates actually use own View\n* Search uses own View\n* MainController uses own View\n* MainAdminController uses own View\n* BackupController uses own View\n* PluginInfo uses own View","shortMessageHtmlLink":"Revise view concept"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyMy0wMy0xMFQyMzozMjo0My4wMDAwMDBazwAAAAMBE7F0","startCursor":"Y3Vyc29yOnYyOpK7MjAyMy0wMy0xMFQyMzozMjo0My4wMDAwMDBazwAAAAMBE7F0","endCursor":"Y3Vyc29yOnYyOpK7MjAyMy0wMy0wN1QxMjozODoyMi4wMDAwMDBazwAAAAL-LLpH"}},"title":"Activity · cmb69/coco_xh"}