Module Migration Guide to HumHub 0.20

This document briefly describes the module api changes in HumHub 0.20.

Since HumHub 0.20 is now based on Yii 2 you also need to migrate your modules to it.

See more information about Yii 2.0 here:

Migration

General

  • Namespace classes e.g. module\example or create own Namespace
  • Migrate to Yii 2.0 (Controllers, Models, Views, Assets, ...)
  • Migrate to HumHub Namespaced classes
  • Raname e.g. ExampleModule.php && ExampleEvents.php to Module.php / Events.php
  • Changed former autostart.php to config.php: config.php
  • Migrate database (see below)

Database / Migrations

Also the existing migration script needs to use Namespaces now.

Because also class names of your module may stored in database (e.g. for Activities, Likes, Notification, ...) It's neccessary to create a new migration derived from humhub\components\Migration which uses renameClass method class to fix these records.

Example Migration:

<?php

use humhub\components\Migration;
use module\wiki\models\WikiPage;
use module\wiki\models\WikiPageRevision;

class m150705_081309_namespace extends Migration
{

    public function up()
    {
        $this->renameClass('WikiPage', WikiPage::className());
        $this->renameClass('WikiPageRevision', WikiPageRevision::className());
    }

    public function down()
    {
        echo "m150705_081309_namespace cannot be reverted.\n";

        return false;
    }

}

Content & ContentAddon

getContentTitle is now divided into

  • getContentTitle
  • getContentPreview

autostart.php

TBD

  • Renamed to config.php
  • Removed imports
  • Return array
  • Namespaces

Urls

\humhub\modules\content\components\activerecords\ContentContainer::createUrl (Space/User) still provides the method createUrl to build URLs in container context (sguid/uguid).

Use http://www.yiiframework.com/doc-2.0/yii-helpers-url.html for other URLs.

Activities

Please recreate Activities as described here: [[dev-module-activities.md]]

Since 0.20 there is an automatic "created" Activity for Content.

To migrate existing Activities to the new Scheme you need to create an migration.

Example Migration:

// Rename Custom Activities
$this->update('activity', ['class' => 'exampleModule\activities\MyActivity'], ['class' => 'OldActivityName']);

// Rename own "Created" Activities to core 
$this->update('activity', ['class' => 'humhub\modules\content\activities\ContentCreated', 'module' => 'content'], ['class' => 'PollCreated']);

Assets

The asset/resources folder will not longer automatically published.

Find more details about assets here: http://www.yiiframework.com/doc-2.0/guide-structure-assets.html

The default path for module resources (javascripts, images, css, ...) was changed from asset to resources. ('/modules/example/resources'). Also all HumHub module related files like Module Image or Screenshots should be located there.

You can change this path back to 'assets' by overwriting the 'resourcesPath' Attribute in your Module class.

e.g.

class Module extends \humhub\components\Module
{

    public $resourcesPath = 'assets';

Module Configuration

The URL handling to configure your module in Administration -> Module has changed.

The method "getConfigUrl" in Module class is not longer used. Set configRoute attribute instead.

e.g.

class Module extends \humhub\components\Module
{
    public $configRoute = '/example/admin-config';

(Incomplete) List of changed Helpers/Widgets:

EnrichText

// New
echo humhub\widgets\RichText::widget(['text' => $text]);

// Old
echo HHtml::enrichTest($text);

TimeAgo

// New
echo \humhub\widgets\TimeAgo::widget(['timestamp' => $time]);

// Old
echo HHtml::timeAgo($time);

PostLink

// New
echo Html::a($label, $url, ['data-method'=>'POST']);

// Old:
echo HHtml::postLink(...);

AjaxButton/Submit/...

echo \humhub\widgets\AjaxButton::widget([
    'label' => "Save",
    'ajaxOptions' => [
        'type' => 'POST',
        'beforeSend' => new yii\web\JsExpression('function(){ setModalLoader(); }'),
        'success' => new yii\web\JsExpression('function(html){ $("#globalModal").html(html); }'),
        'url' => $space->createUrl('/space/admin-crop-image'),
    ],
    'htmlOptions' => [
        'class' => 'btn btn-primary'
    ]
]);

Yii::app()->input->stripClean

Stripclean is not longer available. use Html::encode() user input on output and create validators.