Power Tools
Introduction
Power Tools is a third party command line utility for Invision Power Suite developers. It aims to aid in development by packaging several useful command line script and applications together in one easy to use application.
☕ Found this useful? Want to support further development? Show your support by buying me a coffee!
- https://ko-fi.com/makoto_dev
Installation
If you are on Linux, there is an optional executable included in the release package which you can extract and copy to /usr/local/bin for convenience.
Otherwise, just extract the included ptools.phar file to the directory of your IPS installation. Then, from your terminal window, navigate to the applications directory and run ptools.phar as you would any other PHP script from the command line,
$ php ptools.phar
Power Tools version 1.0.1
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
classmap Generate a map of error codes for classes in an IPS application
help Displays help for a command
list Lists commands
tinker Launches an interactive shell interpreter for an IPS installation
generate
generate:activerecord Generates an Active Record boilerplate class
generate:content-comment Generates a Content Comment boilerplate class
generate:content-item Generates a Content Item boilerplate class
generate:content-node Generates a Content Node boilerplate class
proxy
proxy:regen (Re)generates all proxy classes for the application
Features
Tinker
Tinker is one of Power Tools most.. well, powerful features! The name tinker was inspired by Laravel's own "tinker" command, and it essentially operates in the same manner.
Both are powered by PsySH, an application that provides an extremely powerful PHP REPL for your applications.
Stop making your life difficult by executing arbitrary code in random modules for testing, or worse yet, actually trying to use the native PHP CLI interpreter.
Need to test if your Item class is working correctly? Just pop into the REPL and give it a whirl!
Everything in the tinker shell essentially works as your application does when run through the web browser. You can even get documentation on class methods right from within the interpreter,
PsySh is a truly awesome tool. To learn more about it and all the features it offers you, check it out on PsySh.org.
Proxy Classes
Due to IPS 4.x's monkey-patching based framework, several useful features of your IDE will be rendered non-functional (suggestions, code completion, etc). This command generates proxy classes for your your IDE (including support for 3rd-party applications), so it will be able to properly reference IPS' classes regardless of monkey-patching.
The proxy class generator can even automagically generate property mappings to all your database columns!
Class Generators
Power Tools comes with several powerful and fully featured class generators for IPS Nodes, Items, Comments and generic Active Record classes. These generators take care of all the necessary boilerplate for you automatically.
For example, generating a new Content Item class is as simple as running a single command and following the on-screen input prompts:
<?php namespace IPS\induction\Test; /* To prevent PHP errors (extending class does not exist) revealing path */ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { header( ( isset( $_SERVER[ 'SERVER_PROTOCOL' ] ) ? $_SERVER[ 'SERVER_PROTOCOL' ] : 'HTTP/1.0' ) . ' 403 Forbidden' ); exit; } class _Item extends \IPS\Content\Item { /** * @brief Application */ public static $application = 'induction'; /** * @brief Module */ public static $module = 'induction'; /** * @brief Database Table */ public static $databaseTable = 'induction_items'; /** * @brief Database Prefix */ public static $databasePrefix = ''; /** * @brief Multiton Store */ protected static $multitons; /** * @brief [ActiveRecord] ID Database Column */ public static $databaseColumnId = 'id'; /** * @brief Default Values */ protected static $defaultValues = NULL; /** * @brief Node Class */ public static $containerNodeClass = NULL; /** * @brief Comment Class */ public static $commentClass = NULL; /** * @brief Review Class */ public static $reviewClass = NULL; /** * @brief Database Column Map */ public static $databaseColumnMap = array( 'container' => 'category_id', 'author' => 'author_id', 'views' => 'views', 'title' => 'title', 'content' => 'content', 'num_comments' => 'num_comments', 'last_comment' => 'last_comment', 'last_comment_by' => 'last_comment_by', 'last_comment_name' => 'last_comment_name', 'last_review' => 'last_review', 'date' => 'date', 'updated' => 'updated', 'approved' => 'approved', 'approved_by' => 'approved_by', 'approved_date' => 'approved_date', 'pinned' => 'pinned', 'featured' => 'featured', 'locked' => 'locked', 'ip_address' => 'ipaddress' ); /** * @brief Title */ public static $title = NULL; /** * @brief Icon */ public static $icon = 'file'; /** * @brief [Content] Key for hide reasons */ public static $hideLogKey = NULL; /** * @brief Form Lang Prefix */ public static $formLangPrefix = 'induction_'; /** * @brief Reputation Type */ public static $reputationType = 'id'; }
Class Mapping
The classmap command maps unique ID numbers to your applications class files. These ID numbers are then stored and maintained for use in error codes.
By maintaining and actively using a proper error code scheme, you can easily and transparently map the location of errors that are triggered in production.
This application is available under the Mozilla Public License 2.0. I welcome developers to extend and enhance this tool as they wish, but please make sure you understand the licensing requirements before doing so.
What's New in Version 1.0.1 See changelog
Released
Licensing changes
Bugs / feature suggestions should be made here:
https://dev.taiga.sh/makoto/IPS-Power-Tools/issues