{"id":37233483,"url":"https://github.com/filips123/eventy","last_synced_at":"2026-01-15T03:54:21.128Z","repository":{"id":62504658,"uuid":"155265659","full_name":"filips123/eventy","owner":"filips123","description":"The WordPress hook system in classic (pure) PHP","archived":false,"fork":true,"pushed_at":"2019-11-16T11:07:26.000Z","size":62,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-23T16:58:34.797Z","etag":null,"topics":["action","actions","event","events","filter","filters","hook","hooks","php","wordpress"],"latest_commit_sha":null,"homepage":"https://github.com/filips123/eventy/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"tormjens/eventy","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/filips123.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":null,"tidelift":"packagist/filips123/eventy","open_collective":"filips123","patreon":"filips","ko_fi":"filips","liberapay":"filips","custom":["https://donorbox.org/filips","https://buymeacoff.ee/filips","https://beerpay.io/filips123","https://tippin.me/@123filips123"]}},"created_at":"2018-10-29T19:02:39.000Z","updated_at":"2024-11-06T15:48:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/filips123/eventy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/filips123/eventy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filips123%2Feventy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filips123%2Feventy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filips123%2Feventy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filips123%2Feventy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/filips123","download_url":"https://codeload.github.com/filips123/eventy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filips123%2Feventy/sbom","scorecard":{"id":399697,"data":{"date":"2025-08-11","repo":{"name":"github.com/filips123/eventy","commit":"357d941fc661057539820c102f2d5d41715ecc29"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T19:49:20.086Z","repository_id":62504658,"created_at":"2025-08-18T19:49:20.086Z","updated_at":"2025-08-18T19:49:20.086Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28419272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["action","actions","event","events","filter","filters","hook","hooks","php","wordpress"],"created_at":"2026-01-15T03:54:20.463Z","updated_at":"2026-01-15T03:54:21.110Z","avatar_url":"https://github.com/filips123.png","language":"PHP","funding_links":["https://tidelift.com/funding/github/packagist/filips123/eventy","https://opencollective.com/filips123","https://patreon.com/filips","https://ko-fi.com/filips","https://liberapay.com/filips","https://donorbox.org/filips","https://buymeacoff.ee/filips","https://beerpay.io/filips123","https://tippin.me/@123filips123"],"categories":[],"sub_categories":[],"readme":"EventyClassic\n=============\n\n[![Latest Stable Version][icon-stable-version]][link-packagist]\n[![Latest Untable Version][icon-unstable-version]][link-packagist]\n[![Total Downloads][icon-downloads]][link-packagist]\n[![License][icon-license]][link-license]\n[![PHP][icon-php]][link-php]\n\n[![Linux Build Status][icon-travis]][link-travis]\n[![Windows Build Status][icon-appveyor]][link-appveyor]\n[![Code Coverage][icon-coverage]][link-coverage]\n[![Code Quality][icon-quality]][link-quality]\n\nWordPress style actions and filters in classic (pure) PHP.\n\n## About\n\nActions are pieces of code you want to execute at certain points in your code. Actions never return anything but merely serve as the option to hook in to your existing code without having to mess things up.\n\nFilters are made to modify entities. They always return some kind of value. By default they return their first parameter and you should too. \n\n[Read more about filters](http://www.wpbeginner.com/glossary/filter/)\n\n[Read more about actions](http://www.wpbeginner.com/glossary/action/)\n\nThis project is a fork from [Eventy for Laravel](https://github.com/tormjens/eventy/). The difference is that this project supports PHP 5.4 or later and it doesn't have any dependencies. Also, there are some differences in syntax.\n\n## Use Cases\n\nEventyClassic is best used as a way to allow extensibility to your code. Whether you're creating a package or an application, Eventy can bring the extensibility you need.\n\nFor example, EventyClassic can lay down the foundation for a plugin based system. You offer an \"action\" that allows plugins to register themselves. You might offer a \"filter\" so plugins can change the contents of an array in the core. You could even offer an \"action\" so plugins can modify the menu of your application.\n\n## Installation\n\n### Requirements\n\nEventyClassic requires *PHP 5.4.0* or higher.\n\n### Using Composer\n\nThe reccomended way to install EventyClassic is with [Composer](https://getcomposer.org/), dependency manager for PHP.\n\n```bash\ncomposer require filips123/eventy\n```\n\nYou would only need to include autoloader and namespace in your script.\n\n```php\n\u003c?php\n\nuse EventyClassic\\Events as Eventy;\n\nrequire 'vendor/autoload.php';\n\n$eventy = new Eventy;\n```\n\nIdeally, class instance should be placed to dependency injection service.\n\n### Manually Installation\n\nAlternatively, you could download files from GitHub and then manually include them in your script.\n\nYou whould need to include all files and namespace in your script.\n\n```php\n\u003c?php\n\nuse EventyClassic\\Events as Eventy;\n\nrequire 'src/Events.php';\nrequire 'src/Event.php';\nrequire 'src/Action.php';\nrequire 'src/Filter.php';\n\n$eventy = new Eventy;\n```\n\nIdeally, class instance should be placed to dependency injection service.\n\n## Usage\n\n### Actions\n\nTo listen to your hooks, you attach listeners.\n\nFor example if you wanted to hook in to the above hook, you could do:\n\n```php\n$eventy-\u003eaddAction('my.hook', function($what) {\n    echo 'You are '. $what;\n}, 20, 1);\n```\n\nThe first parameter is the name of the hook. The second would be a callback. This could be a Closure, an array callback (`[$object, 'method']`) or a globally registered function `function_name`. The third argument is the priority of the hook. The lower the number, the earlier the execution. The fourth parameter specifies the number of arguments your listener accepts.\n\nYou can then run actions:\n\n```php\n$eventy-\u003erunAction('my.hook', 'awesome');\n```\n\nAgain the first argument must be the name of the hook. All subsequent parameters are sent to the action as parameters. These can be anything you'd like. For example you might want to tell the listeners that this is attached to a certain model. Then you would pass this as one of the arguments.\n\n### Filters\n\nFilters work in much the same way as actions and have the exact same build-up as actions. The most significant difference is that filters always return their value.\n\nThis is how you add a listener to this filter:\n\n```php\n$eventy-\u003eaddFilter('my.hook', function($what) {\n    $what = 'not '. $what;\n    return $what;\n}, 20, 1);\n```\n\nThe filter would now return `'not awesome'`. Neat!\n\nYou could use this in conjunction with the previous hook:\n\n```php\n$eventy-\u003eaddAction('my.hook', function($what) {\n    $what = $eventy-\u003erunFilter('my.hook', 'awesome');\n    echo 'You are '. $what;\n});\n```\n\nYou can then run filters:\n\n```php\n$value = $eventy-\u003erunFilter('my.hook', 'awesome');\n```\n\nIf no listeners are attached to this hook, the filter would simply return `'awesome'`.\n\n[icon-stable-version]: https://img.shields.io/packagist/v/filips123/eventy.svg?style=flat-square\u0026label=Latest+Stable+Version\n[icon-unstable-version]: https://img.shields.io/packagist/vpre/filips123/eventy.svg?style=flat-square\u0026label=Latest+Unstable+Version\n[icon-downloads]: https://img.shields.io/packagist/dt/filips123/eventy.svg?style=flat-square\u0026label=Downloads\n[icon-license]: https://img.shields.io/packagist/l/filips123/eventy.svg?style=flat-square\u0026label=License\n[icon-php]: https://img.shields.io/packagist/php-v/filips123/eventy.svg?style=flat-square\u0026label=PHP\n[icon-travis]: https://img.shields.io/travis/com/filips123/eventy.svg?style=flat-square\u0026label=Linux+Build+Status\n[icon-appveyor]: https://img.shields.io/appveyor/ci/filips123/eventy.svg?style=flat-square\u0026label=Windows+Build+Status\n[icon-coverage]: https://img.shields.io/scrutinizer/coverage/g/filips123/eventy.svg?style=flat-square\u0026label=Code+Coverage\n[icon-quality]: https://img.shields.io/scrutinizer/g/filips123/eventy.svg?style=flat-square\u0026label=Code+Quality\n\n[link-packagist]: https://packagist.org/packages/filips123/eventy/\n[link-license]: https://choosealicense.com/licenses/mit/\n[link-php]: https://php.net/\n[link-travis]: https://travis-ci.com/filips123/eventy/\n[link-appveyor]: https://ci.appveyor.com/project/filips123/eventy/\n[link-coverage]: https://scrutinizer-ci.com/g/filips123/eventy/code-structure/\n[link-quality]: https://scrutinizer-ci.com/g/filips123/eventy/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilips123%2Feventy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffilips123%2Feventy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilips123%2Feventy/lists"}