IPS Staff
  • Content count

  • Joined

  • Last visited

About Mark

  • Rank
    I dropped the "iggy"
  • Birthday March 04

IPS Marketplace

  • Resources Contributor Total file submissions: 5

Profile Information

  • Gender Male
  • Location Colchester, UK

Recent Profile Visitors

130,119 profile views

Mark's Activity

  1. Mark added a post in a topic IPS 4.0: The current state of BBCode and its future. Is BBCODE officially abandoned?   

    Not at all. As I said right at the start of this topic we support BBCode. In the bug report linked to, a simple mistake was made, and, since you pointed it out, I corrected that. You could have just replied to the bug report saying something like "Hey, I think you may have misunderstood" and it would have been reopened too.
    As I said before, if you are experiencing any other issues, please do let us know about them and we will endeavour to resolve them.
  2. Mark added a post in a topic IPS 4.0: The current state of BBCode and its future. Is BBCODE officially abandoned?   

    IPS4 supports BBCode and we have no intention to remove that in the foreseeable future. If you see any issues, please open a bug report or file a support request. It looks like that bug report was closed in error, and I've re-opened it - thanks for letting us know about that  
  3. Mark added a article in Knowledgebase   

    [4.0.9-4.0.10] Upgrade stuck at "Preparing your update"
    An issue has been identified in IPS Community Suite through to version where, when attempting to upgrade, the system may display "Preparing your update" and never actually download the update file.
    There are two ways to resolve this issue:
    You can go the client area and download the full package.You can upload this file, overwriting the existing one, after which the update should download without issue: applications/core/modules/admin/overview/dashboard.php 
    After you have upgraded to IPS Community Suite 4.0.10, or applied the patch, subsequent updates should not have an issue.
    • 0 replies
  4. Mark added a post in a topic Edit title in topic list   

    This will be in 4.0.9.

  5. Mark added a post in a topic Annoying - New version news in ACP   

    Even if we made it dismissible you'd have to upgrade to get that  
    But yes, it shouldn't show future versions. They should be gone now.
  6. Mark added a post in a topic Is it possible to run IPS in an intranet?   

    You need to have an external connection for the license check and some features. However, you can still have an installation that does not accept inbound connections, behind a VPN or limited to an internal network for example. Actually, we have this set up ourselves, as do several clients  
  7. Mark added a post in a topic 3.4 Features missing in 4.0   

    We add stuff here once we know we're doing it:  
  8. Mark added a post in a topic IP. Nexus 5.0?   

    It's quite a seamless process though - on the form where you provide your billing details, it will just also ask for your email and a password.
  9. Mark added a post in a topic Syntax highlighting - plain code option please!   

    I'll see if we can get it added  
  10. Mark added a post in a topic Error Code List   

    We don't have a list - the error codes are just so we can do a search of the code and find it easily. We try to make the error messages themselves provide as much information as necessary. If you post the code here though, I can look it up for you.
  11. Mark added a post in a topic 3.4 Features missing in 4.0   

    We rewrote the whole suite. We don't have a list of things we removed because we don't think in those terms. I promise you we didn't sit around a whiteboard one day and brainstorm what should be "removed". We redesigned and reimagined everything, obviously lots of things are done different, we think, and hope you agree, they're done much better. To make a list of every area we changed functionality in some way would not be feasible, and would amount to a list of everything in the whole suite.
    As a random example, one could say we "removed" the "More Reply Options" button from the "Quick Reply" feature, which is how you had to add attachments to posts - but that's because in IPS4, all the options are already there, you can upload attachments from the "quick reply". We think that's a clear improvement, and the same goes for many of the things raised in this topic,
    Now if there is something which you preferred the way 3 did, please let us know (ideally with a new topic). We often change things based on feedback and will continue to do so.
  12. Mark added a post in a topic 3.4 Features missing in 4.0   

     That's possible, click on the button you want to edit permissions for at Customisation > Editor > Toolbars.

    These are still available by creating a constants.php file (we relegated it here because unless you're using a custom SSO setup, changing them is not only unnecessary but will cause problems).
    These are all present (along with options to configure the storage options for any upload type) at System > Overview > Files > Storage Settings 
  13. Mark added a post in a topic The Follow settings are confusing, can someone help? (And suggestion to make clearer)   

    When you click "Change how the notification is sent" the relevant option is highlighted.

  14. Mark added a article in Development   

    Commerce: Custom Actions
    IP.Nexus for IP.Board allowed each Package to specify a "Custom module" - a PHP script which could specify custom code to run when purchases of that package were made, expired, cancelled, etc.
    In IPS Community Suite 4, it is possible to overload any class in the suite, so this is no longer a specific option for packages. But it is easy to recreate.
    Step 1: Create a plugin
    You will need to create a plugin, which requires you to have developer mode enabled. We strongly advise against installing developer mode on a live installation so do this, and your development on a test installation.
    Once developer mode is enabled, a "Create Plugin" button will appear in the Admin CP under System --> Site Features --> Plugin. Use this tool to create your plugin, after which you'll be taken into the Plugin Developer Center.
    Once in the Plugin Developer Center you will create a Code Hook on the \IPS\nexus\Package class (for more information about Code Hooks and other Plugin features see
    Step 2: Write your code
    The content of the plugin will be very similar to the custom module from before, however there are some key differences:
    The parameters for the methods are different. Rather than arrays, you will be passed objects for purchase and other data. Since your code is running on an instance of a package, you will not be passed $package and should use $this instead. A full list of the available methods and their signatures are below.Because your code will run for every package, you must first check the ID number ($this->id) to see if it is a package you want to run the code for.You are overloading a method which may be doing things itself, so you need to call the parent:: method within your code.If you were using the IP.Board 3 API, you will of course need to update your calls to use the IPS Community Suite 4 API.For example, if this was your custom module on IP.Nexus for IP.Board 3:
    <?php class custom_actions_FOO { /** * Purchase record generated (run after onPaid) * * @param array The member purchasing * @param array Package data (combined array with row from nexus_packages and nexus_packages_*, depending on the package type) * @param invoice Invoice Model * @param array Row from nexus_purchases [since Nexus 1.5] * @return void */ public function onPurchaseGenerated( $member, $package, $invoice, $purchase ) { ipsRegistry::DB()->insert( 'purchase_log', array( 'member' => $member['member_id'], 'package' => $package['p_id'], 'purchase' => $purchase['ps_id'], 'time' => time() ) ); } }Then your code hook for IPS4 will look something like:
    <?php class hook { /** * On Purchase Generated * * @param \IPS\nexus\Purchase $purchase The purchase * @param \IPS\nexus\Invoice $invoice The invoice * @return void */ public function onPurchaseGenerated( \IPS\nexus\Purchase $purchase, \IPS\nexus\Invoice $invoice ) { if ( in_array( $this->id, array( 1, 2, 3 ) ) ) { \IPS\Db::i()->insert( 'purchase_log', array( 'member' => $purchase->member->member_id, 'package' => $this->id, 'purchase' => $purchase->id, 'time' => time() ) ); } return parent::onPurchaseGenerated( $purchase, $invoice ); } } 
    Step 3: Download the plugin and install
    Once you're ready, download your plugin from the Plugin Developer Center which will generate an xml file. Go to your live installation and install this plugin there.
    Appendix: Available Methods
    You are overloading \IPS\nexus\Package, so you can specify any methods which are part of that. The most common use-cases however are:
    /** * On Purchase Generated * * @param \IPS\nexus\Purchase $purchase The purchase * @param \IPS\nexus\Invoice $invoice The invoice * @return void */ public function onPurchaseGenerated( \IPS\nexus\Purchase $purchase, \IPS\nexus\Invoice $invoice ) { }     /**      * On Renew (Renewal invoice paid. Is not called if expiry data is manually changed)      *      * @param    \IPS\nexus\Purchase    $purchase    The purchase      * @param    int                    $cycles        Cycles      * @return    void      */     public function onRenew( \IPS\nexus\Purchase $purchase, $cycles )     {         // This method is only available since 4.0.8     } /** * On Expiration Date Change * * @param \IPS\nexus\Purchase $purchase The purchase * @return void */ public function onExpirationDateChange( \IPS\nexus\Purchase $purchase ) { } /** * On Purchase Expired * * @param \IPS\nexus\Purchase $purchase The purchase * @return void */ public function onExpire( \IPS\nexus\Purchase $purchase ) { } /** * On Purchase Canceled * * @param \IPS\nexus\Purchase $purchase The purchase * @return void */ public function onCancel( \IPS\nexus\Purchase $purchase ) { } /** * On Purchase Deleted * * @param \IPS\nexus\Purchase $purchase The purchase * @return void */ public function onDelete( \IPS\nexus\Purchase $purchase ) { } /** * On Purchase Reactivated (renewed after being expired or reactivated after being canceled) * * @param \IPS\nexus\Purchase $purchase The purchase * @return void */ public function onReactivate( \IPS\nexus\Purchase $purchase ) { } /** * On Transfer (is ran before transferring) * * @param \IPS\nexus\Purchase $purchase The purchase * @param \IPS\Member $newCustomer New Customer * @return void */ public function onTransfer( \IPS\nexus\Purchase $purchase, \IPS\Member $newCustomer ) { } /** * On Upgrade/Downgrade * * @param \IPS\nexus\Purchase $purchase The purchase * @param \IPS\nexus\Package $newPackage The package to upgrade to * @param int|NULL|\IPS\nexus\Purchase\RenewalTerm $chosenRenewalOption The chosen renewal option * @return void */ public function onChange( \IPS\nexus\Purchase $purchase, \IPS\nexus\Package $newPackage, $chosenRenewalOption = NULL ) { }  
    • 0 replies