Projects

  • AGNSTK Core Framework

    License: AGPL-v3 PHP Version CMS Agnostic

    This is the AGNSTK Core Framework – the foundational library that powers AGNSTK applications.

    ⚠️ This repository should NOT be used directly!

    Installation

    For new projects: Use the main AGNSTK application template instead:

    git clone https://github.com/magicoli/agnstk.git
    cd agnstk
    composer install
    composer run dev

    For existing projects: This core is automatically included as a git subtree in AGNSTK applications.

    What is this?

    This directory contains the core AGNSTK framework that should NOT be modified directly. It’s managed as a git subtree from the magicoli/agnstk repository.

    For Application Developers

    • DON’T EDIT files in this core/ directory
    • PUT YOUR CODE in the application root directories (src/, config/, etc.)
    • CONFIGURE your application by editing core/config/bundle.php
    • UPDATE THE CORE using git subtree pull --prefix=core https://github.com/magicoli/agnstk.git master --squash

    Bundle Configuration Setup

    After cloning your AGNSTK application, you need to enable bundle configuration tracking:

    1. Remove the ignore rule from your main .gitignore:
      # Remove this line from .gitignore:
      core/config/bundle.php
    1. Track your bundle config:
      git add core/config/bundle.php
      git commit -m "Add bundle configuration"
    1. Customize as needed – edit core/config/bundle.php to match your application structure.

    For AGNSTK Core Contributors

    If you want to contribute to the AGNSTK framework itself:

    1. Work on the core repository: https://github.com/magicoli/agnstk
    2. Changes will be pulled into applications via git subtree updates

    Architecture

    your-agnstk-app/
    ├── src/                    ← YOUR APPLICATION CODE
    ├── core/                   ← AGNSTK FRAMEWORK (this directory)
    │   ├── config/
    │   │   ├── bundle.php     ← YOUR CONFIGURATION
    │   │   └── bundle.example.php ← Template
    │   ├── app/               ← Framework services
    │   └── ...                ← Other framework files
    └── ...

    The core provides:

    • Laravel 12 foundation
    • AGNSTK services and helpers
    • Default pages and blocks
    • Multi-platform deployment adapters

    Updates

    Update the core framework:

    git subtree pull --prefix=core https://github.com/magicoli/agnstk.git master --squash

    This uses git subtree to pull the latest changes from agnstk while preserving your application code.


    Need help? Check the main README.md in the application root or visit https://agnstk.org

  • AGNSTK Core Framework

    License: AGPL-v3 PHP Version CMS Agnostic

    This is the AGNSTK Core Framework – the foundational library that powers AGNSTK applications.

    ⚠️ This repository should NOT be used directly!

    Installation

    For new projects: Use the main AGNSTK application template instead:

    git clone https://github.com/magicoli/agnstk.git
    cd agnstk
    composer install
    composer run dev

    For existing projects: This core is automatically included as a git subtree in AGNSTK applications.

    What is this?

    This directory contains the core AGNSTK framework that should NOT be modified directly. It’s managed as a git subtree from the magicoli/agnstk repository.

    For Application Developers

    • DON’T EDIT files in this core/ directory
    • PUT YOUR CODE in the application root directories (src/, config/, etc.)
    • CONFIGURE your application by editing core/config/bundle.php
    • UPDATE THE CORE using git subtree pull --prefix=core https://github.com/magicoli/agnstk.git master --squash

    Bundle Configuration Setup

    After cloning your AGNSTK application, you need to enable bundle configuration tracking:

    1. Remove the ignore rule from your main .gitignore:
      # Remove this line from .gitignore:
      core/config/bundle.php
    1. Track your bundle config:
      git add core/config/bundle.php
      git commit -m "Add bundle configuration"
    1. Customize as needed – edit core/config/bundle.php to match your application structure.

    For AGNSTK Core Contributors

    If you want to contribute to the AGNSTK framework itself:

    1. Work on the core repository: https://github.com/magicoli/agnstk
    2. Changes will be pulled into applications via git subtree updates

    Architecture

    your-agnstk-app/
    ├── src/                    ← YOUR APPLICATION CODE
    ├── core/                   ← AGNSTK FRAMEWORK (this directory)
    │   ├── config/
    │   │   ├── bundle.php     ← YOUR CONFIGURATION
    │   │   └── bundle.example.php ← Template
    │   ├── app/               ← Framework services
    │   └── ...                ← Other framework files
    └── ...

    The core provides:

    • Laravel 12 foundation
    • AGNSTK services and helpers
    • Default pages and blocks
    • Multi-platform deployment adapters

    Updates

    Update the core framework:

    git subtree pull --prefix=core https://github.com/magicoli/agnstk.git master --squash

    This uses git subtree to pull the latest changes from agnstk while preserving your application code.


    Need help? Check the main README.md in the application root or visit https://agnstk.org

  • WooCommerce Domain Names

    This plugin is designed for domain names resellers. Currently, it only provides the sale part, actual registration has to be done manually.

  • magicoli/woocommerce-bookings-sync-unpaid

    Include unpaid bookings in Google Calendar synchronization, to ensure bookings waiting for payments are already blocked in external calendars.

    Useful if your policy is to set an option for booking requests, or if you collect payments later.

    This is a simple implementation, as documented on https://woocommerce.com/document/google-calendar-integration/#section-7

  • WallOli

    WallOli is a cross-platform tool designed to display a grid of videos across one or multiple screens. Leveraging VLC for video playback, this application ensures smooth and synchronized video presentations.

  • Ranger

    Ranger is a formatter for date and time ranges, based (somewhat loosely) on Adam Shaw’s formatRange algorithm in fullCalendar.

    Some Examples

    
    <?php
    use OpenPsaRangerRanger;

    $ranger = new Ranger(‘en’); echo $ranger->format(‘2013-10-05’, ‘2013-10-20’); // Oct 5–20, 2013 echo $ranger->format(‘2013-10-05’, ‘2013-11-20’); // Oct 5 – Nov 20, 2013

    $ranger = new Ranger(‘en_GB’); echo $ranger->format(‘2013-10-05’, ‘2013-10-20’); // 5–20 Oct 2013 echo $ranger->format(‘2013-10-05’, ‘2013-11-20’); // 5 Oct – 20 Nov 2013

    $ranger = new Ranger(‘de’); echo $ranger->format(‘2013-10-05’, ‘2013-10-20’); // 05.–20.10.2013 echo $ranger->format(‘2013-10-05’, ‘2013-11-20’); // 05.10.–20.11.2013

    Usage

    To use Ranger in any other locale than "en", you will need to have the php-intl extension installed.

    Instantiate ranger with the name of your locale as the parameter. You can also pass null to use the ini.default_locale setting. Afterwards, you can call format() with two date parameters. Accepted types are

    • DateTime objects
      • strings (any format that DateTime can read)
      • Unix timestamps
      • null (which means current date).

    Output Customization

    
    <?php
    use OpenPsaRangerRanger;
    use IntlDateFormatter;

    $ranger = new Ranger(‘en’); $ranger ->setRangeSeparator(‘ and ‘) ->setDateTimeSeparator(‘, between ‘) ->setDateType(IntlDateFormatter::LONG) ->setTimeType(IntlDateFormatter::SHORT);

    echo $ranger->format(‘2013-10-05 10:00:01’, ‘2013-10-05 13:30:00’); // October 5, 2013, between 10:00 AM and 1:30 PM

  • Project Donations for WooCommerce

    Collect donations for different projects with a WooCommerce product.

    If you are like me, you work on several projects and would like to simply collect donations for them, without bothering creating and configuring a product for each project.

    This plugin is mostly intended to be easy to set up. It is mostly usefull if you want to get donations and need or already use WooCommerce platform.

  • PHP Library for Project Version Management

    Version Stable License

    This library provides tasks for automating versioning of your PHP projects.

    It allows you to increment the version based on different levels (major, minor, patch, dev, beta, rc), and update version references in various files such as PHP files, README.md, package.json, and readme.txt.

    Installation

    Run the following command in your project directory:

    composer require --dev magicoli/php-bump-library

    And add the following script to your composer.json file:

     "scripts": {
        "bump-version": "robo --load-from=vendor/magicoli/php-bump-library/RoboFile.php bump:version"
      }

    Usage

    composer bump-version [level]

    Replace [level] with the desired level of version increment, such as major, minor, patch, rc, beta, or dev. If you ommit it, the default level is patch.

    Alternatively, you can run the script directly with the following command:

    robo bump:version
    # or
    robo --load-from=path/to/RoboFile.php bump:version

    Make sure to adjust RoboFile.php to the actual path of the file in your project.

    About Versioning

    Semantic Versioning follows a specific order of version increments:

    Development stages (M.m.p-stage):

    • Dev: development versions that are not yet stable or released.
    • Beta: pre-release versions that are closer to the stable release but may still have minor issues.
    • RC: release candidates, which are close to the final release but may require additional testing.

    Releases (M.m.p):

    • Patch: backward-compatible bug fixes.
    • Minor: added functionality, still backward-compatible manner.
    • Major: big bada boom.

    Note that dev, beta, and rc versions are considered inferior to the normal versions and are typically used in pre-release stages or development cycles: 1.0-dev < 1.0-beta < 1.0-rc < 1.0.

    For example, if your version is 1.0.0 and you bump it on the dev level, new version will be 1.0.1-dev (note the pach increment). If you bump the dev to beta, it will keep its main version and become 1.0.1-beta. And if you bump 1.0.1-beta without arguments, the new version will be 1.0.1.

    License

    This library is licensed under the AGPL-v3 License.

  • Oli’s Breadcrumbs

    Several ways to add breadcrumbs to your pages, if your theme does not support them. If you theme already supports breadcrumbs, you probably don’t need this plugin, as it is likely to have less options.

    You can add breadcrumbs with any of these methods:

    • [breadcrumbs] shortcode
    • Breadcrumbs widget
    • Breadcrumbs Divi Module (for Divi Themes or with Divi plugin)
    • Breadcrumbs Element WPBakery Page Builder (aka js_composer aka Visual Composer)

    Here are the options for the shordcode.

    • [breadcrumbs exclude-home="true"] do not start the breadcrumbs with home page, default false
    • [breadcrumbs exclude-archives="true"] do not include main articles archive link, default false
    • [breadcrumbs exclude-title="true"] do not end the breadcrumbs with the post title, default false
    • [breadcrumbs separator="×"] separator, default "/"

    Equivalent options are available in the widget and the Divi Module.

  • No ‘(no title)’

    This plugin is intended for websites publishing posts without title, to avoid a long list of ‘(no title’) in admin screen, which makes searches very difficult.

    Only in admin posts list, and only if the post title is empty, show firsts words of the content instead.

    This plugin leaves the post unchanged and does not replace the actual title, so the post would display as intended on posts and archives.

    Inspired by a solution on https://wordpress.stackexchange.com/questions/189671/show-excerpt-if-no-title-in-admin-view

    I added a filter to replace line breaks with spaces, to avoid collapsing words when the content starts with short lines.