Module Migration Guide (Outdated)
Starting with version 1.16, the migration instructions are available in the Git repository at: https://github.com/humhub/humhub/blob/develop/MIGRATE-DEV.md.
Migration Notes for Older Versions
Version 1.15
- New
PolymorphicRelation::getObjectModel()
: should replaceget_class()
- This version enables Javascript nonces by default for advanced CSRF protection. Make sure that all inserted javascript contains the current nonce. This is done automatically e.g. via the
Html
helper.
Version 1.14
-
New content soft delete mechanism. Do not use
directly. Exceptions:ContentActiveRecord::delete()
- Make sure to hard delete module content on module disable (e.g. Example)
- Hard Delete should be also used in Integrity Checker callbacks
-
New
Content::$state
feature (Drafts, Soft Delete) -
New Deprecations:
protected/humhub/modules/user/authclient/{Facebook,GitHub,Google,LinkedIn,Live,Twitter}.php
humhub/modules/user/authclient/AuthClientHelper
humhub/modules/user/components/User::canDeleteAccount()
humhub/modules/user/components/User::canChangePassword()
(deleted)humhub/modules/user/components/User::canChangeEmail()
(deleted)humhub/modules/user/components/User::canChangeUsername()
(deleted)humhub/modules/user/components/User::getAuthClients()
(deleted)
Version 1.13
- New method
ContentContainerModule::getContentClasses()
- New
ContentActiveRecord::$createPermission
- New
WallStreamModuleEntryWidget::$createRoute
and::$createFormSortOrder
and::$createFormClass
- To check if a content can be created, please use now:
(new Post($container))->content->canEdit()
- Deprecated JS "Regular" checkboxes/options replaced with CSS
- Moved config param
tour.acceptableNames
tohumhub\modules\tour\Module::$acceptableNames
- Removed Deprecations
- components/validators/AbstractDateValidator
- components/validators/PastDateValidator
- CompatModuleManager (e.g. Module isEnabled on ContentContainer records, use ModuleManager instead)
- SettingsBehavior (
getSetting
andsetSetting
on ContentContainer records) - humhub/widgets/ActiveField (Renamed)
- humhub/widgets/BasePickerField (Renamed)
- humhub/widgets/BaseSidebarItem
- humhub/widgets/InputWidget (Renamed)
- humhub/widgets/MultiSelectField
- humhub/widgets/RichTextEditor
$space->isModuleEnabled($id)
will be removed soon! Use:$space->moduleManager->isEnabled($id)
instead.- New CSS class
btn-icon-only
for Bootstrap buttons with icons without text.
Version 1.12
- Added new parameter to
humhub\modules\user\models\fieldtype\BaseType::getFieldFormDefinition(User $user)
- Renamed
WallStreamFilterNavigation::PANEL_POSITION_*
constants - Style classes started with
.regular-checkbox
and.regular-radio
are deprecated, because they were generated by JavaScript, they will be deleted in v1.13. Please update selectors in JS and CSS to simpleinput[type=checkbox]
andinput[type=radio]
, also they may be contained inside containers with selectorsdiv.form-group
,div.checkbox
anddiv.radio
. - The bundled Twig library is now version 3.x
Version 1.11
The following deprecated classes have been permanently deleted.
- protected/humhub/compat/CActiveForm.php
- protected/humhub/compat/CHtml.php
- protected/humhub/modules/space/models/Setting.php
- protected/humhub/modules/user/models/Setting.php
- protected/humhub/modules/directory/*
**New Deprecations: **
- protected/humhub/modules/content/components/behaviors/CompatModuleManager.php
Version 1.10
- Removed
Followable
behavior methodsgetFollowingCount()
,getFollowingObjects($query)
,getFollowers()
- File versioning support has been introduced. Use
$file->setStoredFile()
instead ofSee File module documentation.$file->store->set()
- Removed user's name encoding in
UserPicker
Version 1.9
- New Ajax Validator for ControllerAccess to force Ajax requests.
- New setting "Default Timezone"
Yii::$app->settings->get('defaultTimeZone')
instead of the deprecated setting "Server Timezone"Yii::$app->settings->get('timeZone')
. - CodeMirror is now directly bundled with HumHub core from
humhub\modules\ui\form\widgets\CodeMirrorInputWidget
and can be applied to any textarea field with code like$form->field($model, 'textareaFieldName')->widget(CodeMirrorInputWidget::class)
. - Updated to PHPUnit 8.5 (#4757)
- Added
EVENT_BEFORE_CHECKING_USER_STATUS
inAuthController
Version 1.8
- AdminMenu: A visibility must always be specified for custom menu entries. See example code.
- User Account "Security" page renamed to "Permissions". (Changed action id and views)
- Removed unused legacy widget
modules/admin/widgets/UserSettingMenu.php
- Groups can now have multiple default spaces. The
Group::getSpace()
method has been removed and replaced byGroup::getGroupSpaces()
.
Richtext changes
In 1.8 we've introduced some changes in the Richtext API by introducing converter classes as:
RichTextToShortTextConverter
: Used to convert Richtext to a html preview without text formatting.RichTextToHtmlTextConverter
: Used to convert Richtext to plain html e.g. in html mailsRichTextToMarkdownTextConverter
: Used to convert Richtext to plain markdown without HumHub richtext extensionsRichTextToPlainTextConverter
: Used to convert Richtext to plain text e.g. for text mails
Richtext conversion can also be achieved by the RichText::convert()
function.
In this step we've added the following deprecations:
humhub\libs\Markdown
is deprecated in favor ofRichTextToHtmlConverter
orRichText::convert()
humhub\libs\MarkdownPreview
is deprecated in favor ofRichTextToShortTextConverter
orRichText::convert()
RichText:$minimal
option was deprecated in favor ofRichTextToShortTextConverter
orRichText::convert()
should be used for previews.RichText:$maxLength
option was deprecated, Richtext content should not be cut anymore, onlyRichTextToShortTextConverter
should be used for previews.ProsemirrorRichText::parseOutput()
was used for additional Richtext extensions and should be replaced with aRichTextExtension
implementationProsemirrorRichText::scanLinkExtension()
is deprecated in favor of aRichTextExtension
implementationProsemirrorRichText::replaceLinkExtension()
is deprecated in favor of aRichTextExtension
implementation
Richtext compatibility parser
Prior to this update the Richtext compatibility parser responsible for supporting richtext syntax of HumHub < 1.3 was active by default and could not easily be deactivated. In HumHub 1.8 this parser is deactivated for new installations and can be deactivated for existing installation, which do not need to support richtext created with HumHub < 1.3. The compatibility parser can be deactivated in order to improve performance by configuration file:
return [
'modules' => [
'content' => [
'richtextCompatMode' => false
]
]
];
Version 1.7
New WallEntry Layouts
The new humhub\modules\content\widgets\stream\StreamEntryWidget
classes replaces the old humhub\modules\content\widgets\WallEntry
.
Beside the StreamEntryWidget
, which is now the base class for all kinds of stream entries, there are two different widget types for
wall streams (e.g. Dashboard, Space, Profile) the humhub\modules\content\widgets\stream\WallStreamEntryWidget
and humhub\modules\content\widgets\stream\WallStreamModuleEntryWidget
.
humhub\modules\content\widgets\stream\WallStreamEntryWidget
The WallStreamEntryWidget
renders a similar as the current but enhanced stream entry layout with the user
image and user name in the head section of the stream entry. This widget type should be used for content which
emphasizes the author of the content and contains mainly personal (not collaborative) content.
humhub\modules\content\widgets\stream\WallStreamModuleEntryWidget
The WallStreamModuleEntryWidget
on the other hand is new and does not emphasize the user, but instead the content
type and the content title. This widget should be used for content types in which the author is not that important
as for example a wiki or other collaborative content.
Migration
The old humhub\modules\content\widgets\WallEntry
widget was deprecated and modules should be migrated as soon as possible.
Old Post WallEntry:
namespace humhub\modules\post\widgets;
class WallEntry extends \humhub\modules\content\widgets\WallEntry
{
public $editRoute = '/post/post/edit';
public function run()
{
return $this->render('wallEntry', ['post' => $this->contentObject, 'justEdited' => $this->justEdited]);
}
}
New Post WallEntry:
use humhub\modules\content\widgets\stream\WallStreamEntryWidget;
class WallEntry extends WallStreamEntryWidget
{
public $editRoute = '/post/post/edit';
protected function renderContent()
{
return $this->render('wallEntry', ['post' => $this->model, 'justEdited' => $this->renderOptions->isJustEdited()]);
}
}
Example of WallStreamModuleEntryWidget:
use humhub\modules\content\widgets\stream\WallStreamModuleEntryWidget;
class WallEntry extends WallStreamModuleEntryWidget
{
public $editRoute = '/mymodule/mycontent/edit';
protected function renderContent()
{
return $this->render('wallEntry', ['model' => $this->model, 'renderOptions' => $this->renderOptions]);
}
protected function getIcon()
{
// By default we do not have to define an icon unless we want to overwrite the default ContentActiveRecord::$icon
return 'tasks';
}
protected function getTitle()
{
return $this->model->title;
}
}
Integration of other ContentTags
In the old WallEntry widget all content labels returned by ContentActiveRecord::getLabels()
as topics
and content specific badges were added to the head section of the stream entry.
In the new layout the topics are the only content tags which are automatically rendered.
Content specific tags now need to be manually integrated into the body part of the stream entry.
Example:
- Closed Poll
- Task state
- Wiki category
- Canceled event
- Calendar Type
WallEntry::run()
Sub classes of WallStreamEntryWidget
need to implement the renderContent
instead of run
.
WallEntry::getContextMenu()
In the old WallEntry::getContextMenu()
was renamed to WallStreamEntryWidget::getControlsMenuEntries()
widget class context entries should be added as follows
public function getContextMenu()
{
$result = parent::getContextMenu();
$this->addControl($result, [SomeLink::class, ['content' => $this->contentObject], ['sortOrder' => 200]]);
return $result;
In the new WallStreamEntryWidget class you should directly add the widget or array definition to the result array e.g.:
public function getControlsMenuEntries()
{
$result = parent::getContextMenu();
$result[] = [SomeLink::class, ['content' => $this->contentObject], ['sortOrder' => 200]];
return $result;
The WallEntry::controlsOptions
is not available anymore replace:
$controlsOptions['prevent']
with$this->renderOptions->disableControlsEntry()
$controlsOptions['add']
with simple$result[] = $linkdefinition
WallStreamEntryOptions
Within your WallStreamEntryWidget
you now can use WallStreamEntryOptions
to change the behavior or appearance of
your WallStreamEntryWidget
depending on the view context.
Here are some usecases:
- We may want to disable some menu items in the modal or search view since they do not work or are not expected in this context
- You want to display the whole content of a post (without read more) in the single stream entry view, but not in the container or dashboard stream
- A dashboard stream entry adds some additional information as the target container while this information is not rendered in container streams.
- We may want to disable stream entry addons and most of the controls on archived content
- We want to implement a custom stream and overwrite the default widget class bound to the ContentActiveRecord
- Content which was edited can be highlighted
- You want to disable the default edit link, and replace it with your own implementation
Deprecations in stream and stream action logic
The following deprecations were added to the Stream class and moved to a humhub\modules\stream\actions\LegacyStreamTrait
humhub\modules\stream\actions\Stream::$mode
(which is not in use since 1.5)humhub\modules\stream\actions\Stream::$from
was replaced withStreamQuery::from
(which is not new the old property is just deprecated and was not in use)humhub\modules\stream\actions\Stream::$to
was replaced withStreamQuery::to
(which is not new the old property is just deprecated and was not in use)humhub\modules\stream\actions\Stream::$activeQuery
-StreamQuery::query()
should be used to access activeQuery directlyhumhub\modules\stream\actions\Stream::getContentResultEntry()
was deprecated and replaced withStreamEntryResponse::asArray()
orStreamEntryResponse::asJson()
should be usedhumhub\modules\stream\actions\Stream::renderEntry()
was deprecated and replaced withStreamEntryWidget::renderEntry()
humhub\modules\stream\actions\Stream::setupCriteria()
andsetupFilters()
are deprecated, in order to set filters or manipulate the query you should overwriteStream::beforeApplyFilters()
orStream::afterApplyFilters()
humhub\modules\stream\actions\Stream::MODE_NORMAL
,Stream::MODE_ACTIVITY
,Stream::FROM_DASHBOARD
are replaced withStreamEntryOptions::viewMode
(only the FROM_DASHBOARD was active anyways)humhub\modules\content\components\ContentActiveRecord::getWallOut()
was replaced withStreamEntryWidget::renderEntry()
Other 1.7 Migration Issues
-
The sort order for Menu Entries or BaseStack (e.g. Sidebars) classes should now be set to a maximum of 10000. If no sort order is specified, the sort order is set to 9000.
-
Classes (LDAP, HTTP Client) from the deprecated Zend Framework have been replaced by the compatible Laminas Framework. There is a compatibility layer but classes should be replaced up to HumHub 1.8.
-
Removed
humhub\modules\space\widgets\Picker
which is deprecated sincev1.2
. -
Removed class
humhub\widgets\RichtextField
which is deprecated sincev1.4
.
Version 1.6
No breaking changes.
Version 1.5
Asset Management
In HumHub 1.5 the loading of core assets was optimized by splitting the main humhub\assets\AppAsset
into two separate
bundles. The old AppAsset, which was reduced to only a few core scripts and stylesheets and a new humhub\assets\CoreBundleAsset
.
The CoreBundleAsset contains other core dependencies which are not as essential and will be loaded with a defer
script attribute, which means those assets are not available immediately within the html body while not blocking the site rendering process.
You'll have to follow one of the migration options described below in case your scripts depend on one of the following assets:
- JqueryColorAsset,
- JqueryHighlightAsset,
- JqueryAutosizeAsset,
- Select2Asset,
- Select2BootstrapAsset,
- JqueryWidgetAsset,
- NProgressAsset,
- JqueryNiceScrollAsset,
- BlueimpFileUploadAsset,
- BlueimpGalleryAsset,
- ClipboardJsAsset,
- ImagesLoadedAsset,
- HighlightJsAsset,
- SwipedEventsAssets,
- CoreExtensionAsset,
js/humhub/humhub.ui.modal.js
,js/humhub/humhub.ui.form.elements.js
,js/humhub/humhub.ui.form.js
,js/humhub/humhub.ui.showMore.js
,js/humhub/humhub.ui.panel.js
,js/humhub/humhub.ui.progress.js
,js/humhub/humhub.ui.gallery.js
,js/humhub/humhub.ui.picker.js
,js/humhub/humhub.oembed.js
,js/humhub/humhub.media.Jplayer.js
,js/humhub/humhub.client.pjax.js
,
- ProsemirrorEditorAsset,
- ProseMirrorRichTextAsset,
- UserAsset,
- LiveAsset,
- NotificationAsset,
- ContentAsset,
- ContentContainerAsset,
- UserPickerAsset,
- FileAsset,
- PostAsset,
- SpaceAsset,
- TopicAsset,
- FilterAsset,
- CommentAsset,
- LikeAsset,
- StreamAsset,
- ActivityAsset,
- SpaceChooserAsset
It is recommended to migrate to deferred scripts loading even if you don't depend on the CoreBundleAssets.
In case your scripts are exclusively loaded by ajax for example within the wall stream, you don't have to care about the CoreBundleAsset dependency.
AssetBundle Migration
If your AssetBundle depends on the CoreAssetBundle you'll need to add deferred script loading to your scripts.
HumHub >=1.5 only migration:
If you don't plant to stay compatible with older HumHub versions you can manage the script loading by
extending the humhub\components\assets\AssetBundle
, which will make use of deferred script loading by default.
Don't forget to update "humhub": {"minVersion": "1.5"}
within your module.json
.
use humhub\components\assets\AssetBundle;
class MyAssetBundle extends AssetBundle
{
//...
}
The new humhub\components\assets\AssetBundle
provides some new useful features and default settings besides the script loading management.
HumHub < 1.5 compatibility
In case you want to stay compatible with older HumHub versions, you can enable the defer
script loading by setting
a $defer
property as in the following example. This property will simply be ignored in HumHub versions < 1.5.
use yii\web\AssetBundle;
class MyAssetBundle extends AssetBundle
{
// Activate deferred script loading (this prop
public $defer = true;
//...
}
The following example enables deferred script loading even on HumHub versions < 1.5.
use yii\web\AssetBundle;
use yii\web\View;
class CoreBundleAsset extends AssetBundle
{
//...
public $jsOptions = [
// Make sure scripts are added after CoreBundleAsset
'position' => View::POS_BEGIN,
'defer' => 'defer'
];
}
Script Migration
The following options are available to migrate non deferred scripts as for example inline scripts which are dependent on CoreAssetBundle.
Use of humhub:ready
listener
The humhub:ready
event is triggered once all modules are loaded and initialized.
$(document).one('humhub:ready', function(event, isPjax, humhub) {
var stream = humhub.require('stream');
// do stuff...
});
You can also define modules within a humhub:ready
event handler,
this will also ensure all dependencies are available and may be useful when working with inline scripts.
$(document).one('humhub:ready', function(event) {
humhub.module('myModule', function(module, require) {
var stream = require('stream');
// do stuff...
});
});
By using one
instead of on
we make sure our handler is only executed once, otherwise the handler would be executed
on each pjax
page transition.
HumHub module module init()
The init
function of your HumHub javascript module will always be called once all scripts are available.
// myModule.js
humhub.module('myModule', function(module, require) {
/**
* Outside of init some modules may not be available, so make sure to follow one of the other migration options
* when using requiring a js module included in CoreAssetBundle.
*/
module.export({
init: function(isPjax) {
// All scripts are loaded and stream dependency is available
var Stream = require('stream').Stream;
}
})
});
Deactivate deferred script loading
If none of the above migration options makes you happy, you can disable the deferred script loading as follows:
Globally within config.php
/protected/config/common.php
return [
'components' => [
'assetManager' => [
'preventDefer' => true
]
]
]
Default lazy javascript module loading
In HumHub 1.5 modules required by humhub.require()
will be fetched lazily by default, which means a module will be
initialized by require()
in case it has not been loaded yet. In HumHub < 1.5 a lazy flag was required to be set in require
e.g. require('moduleId', true)
. This behavior was introduced in order to be more tolerant regarding script loading order
due to the core asset loading change. Since lazy loaded modules are rarely used on purpose a warning is logged to the console
once a module was loaded lazily for troubleshooting.
Lazy module loading only works on real modules and not on exported classes:
// Can be required lazily and will be available in init at the latest
var stream = require('stream');
// Can not be required lazily and won't be available if the module was not loaded already
var Stream = require('stream.Stream');
Other changes
Some assets bundles were removed from the AppAsset, in case one of them is required in your custom module, you should register them manually or even better include them in your custom module since they probably will be removed in an upcoming release:
Deprecated:
- Removed legacy
humhub\assets\PagedownConverterAsset
from AppAsset - Removed legacy
humhub\assets\JqueryCookieAsset
from AppAsset - Removed legacy
resources/file/fileuploader.js
from AppAsset - Removed legacy
resources/user/userpicker.js
from AppAsset - Removed legacy
js/humhub/legacy/jquery.loader.js
from CoreApiAsset - Removed legacy
js/humhub/legacy/app.js
from CoreApiAsset - Removed legacy
js/humhub/humhub.ui.markdown.js
from CoreApiAsset SocketIoAsset
is only registered on demand- Deprecated
humhub\modules\ui\form\widgets\MarkdownField
in order to favorhumhub\modules\content\widgets\richtext\RichTextField
Loaded on demand:
- Removed
humhub\assets\SocketIoAsset
from AppAsset
Version 1.4
CSP and Nonce support
Please test your modules against the security.strict.json
rules and mention possible incompatibilities in your module
description.
In order to support CSP nonces you should either completely avoid using inline scripts or use one of the techniques described in the Javascript Guide. Its furthermore recommended to avoid inline styles, as they may be restricted in the strict CSP rule in a future version as well.
Menus
The menu system has been revised, is mostly downward compatible, but the old API methods/views will be removed with the next HumHub 1.5 version.
Please adjust your module menus accordingly. More details can be found in the Menu chapter of the developer documentation.
Language codes
Following language codes has been changed.
If you're using any custom modules, please change the message directories accordingly.
Old language code | New language code |
---|---|
en | en-US |
en_gb | en-GB |
pt_br | pt-BR |
nb_no | nb-NO |
nn_no | nn-NO |
zh_cn | zh-CN |
zh_tw | zh-TW |
fa_ir | fa-IR |
Removed deprecated methods
The following deprecated method have been removed.
**Content model -removed methods **
- canWrite()
- canRead()
- canDelete()
- getSpace()
- getUser()
Removed class
- humhub\modules\space\modules\manage\widgets\Menu
Space class - removed methods
- canInvite()
- canShare()
Notification class - removed methods
- getSpace()
Version 1.3
New Stream Javascript API
In v1.3 we've reworked the Stream Javascript API. Please check the Javascript Stream documentation for more information.
ContentContainer Controller
The base controller attributes autoCheckContainerAccess
and hideSidebar
are not longer available.
Queuing
Queue related classes has been moved into an own module humhub\modules\queue
.
The existing humhub\components\queue\ActiveJob
is declared as deprecated and will be removed in 1.4.
Partial user deletion (Soft Delete)
Added new user status (User::SOFT_DELETED). You can find more information here: Users
Widgets
Moved all form and field related widgets from humhub\widgets
to humhub\modules\ui\form\widgets
namespace.
There is a compatibility layer for the 1.3 release.
Social Activities (Notification & Activities)
- Added new 'requireOriginator' flag with default to true
- Added new 'requireSoruce' flag with default to true
Deprecations
Removed Deprecated
- formatterApp Application Component (Yii::$app->formatterApp)
New Deprecations
humhub\components\Theme.php
->humhub\modules\ui\view\components\Theme
humhub\components\View
->humhub\modules\ui\view\components\View
humhub\libs\ThemeHelper
->humhub\modules\ui\view\components\ThemeHelper
humhub\modules\content\widgets\richtext\HumHubRichText
-> Compatibility class for the legacy rich-text, which was replaced with prosemirror richtext.humhub\modules\content\widgets\richtext\HumHubRichTextEditor
-> Compatibility class for the legacy rich-text, which was replaced with prosemirror richtext editor.humhub\widgets\RichText
->humhub\modules\content\widgets\richtext\RichText
humhub\widgets\RichTextField
->humhub\modules\content\widgets\richtext\RichTextField
humhub\modules\user\models\Mentioning::parse()
->humhub\modules\content\widgets\richtext\RichText::processText()
We moved most of the humhub\widgets
into the new ui
core module as:
humhub\widgets\ActiveField
humhub\widgets\ActiveForm
humhub\widgets\BasePickerField
humhub\widgets\ColorPickerField
humhub\widgets\ContentTagDropDown
humhub\widgets\DatePicker
humhub\widgets\DurationPicker
humhub\widgets\InputWidget
humhub\widgets\MarkdownField
humhub\widgets\MarkdownFieldModals
humhub\widgets\MultiSelectField
humhub\widgets\TimePicker
Version 1.2
Stream / Content Changes
The models WallEntry and Wall were removed. So all corresponding methods like getFirstWallEntryId() are not longer available. The stream handling is now handled directly by the Content model. Also all stream classes (widgets, actions) are moved into the humhub\modules\stream package.
File module changes
Please refer the new File Handling documentation section for more details regarding the new file management API.
- Deprecated widgets:
- humhub\modules\user\widgets\UserPicker (replaced with humhub\modules\user\widgets\UserPickerField)
- humhub\modules\space\widgets\Picker (replaced with humhub\modules\space\widgets\SpackePickerField)
- humhub\widgets\DataSaved (replaced with humhub\components\View::saved)
- Removed Content models 'attachFileGuidsAfterSave' attribute and handling
- Deprecated File model methods
- \humhub\modules\file\models\File::attachPrecreated
- \humhub\modules\file\models\File::getFilesOfObject
- \humhub\modules\file\models\File::getStoredFilePath
- \humhub\modules\file\models\File::getPreviewImageUrl
- \humhub\modules\file\models\File::attachPrecreated
- \humhub\modules\file\models\File::getFilename
- \humhub\modules\file\models\File::getInfoArray
- \humhub\modules\file\models\File::getMimeBaseType
- \humhub\modules\file\models\File::getMimeSubType
- \humhub\modules\file\models\File::getExtension
- Removed configuration option 'showFilesWidgetBlacklist' use WallEntry showFiles attribute instead.
- File models title attributes is not longer automatically populated with the filename when empty
- Moved file upload capabilities (UploadedFile) from File model to FileUpload model
- Moved file store content by attribute capabilities from File model to FileContent model
- Created UploadAction/DownloadAction classes
Pjax + TopNavigation:
Use
public $topMenuRoute = '/dashboard/dashboard';
within your controller for pjax topmenu support.
Version 1.1
-
Dropped unused space attribute "website"
-
ContentContainer Model Changes
- Removed canWrite method (now requires own implementation using permissions)
-
Content Model Changes
- Removed space_id / user_id columns - added contentcontainer_id
- Not longer validates content visibility (private/public) permissions
-
system_admin attribute in user table was removed see
humhub\modules\user\models\User::isSystemAdmin
-
Renamed space header settings menu dropdown class from
humhub\modules\space\modules\manage\widgets\Menu
tohumhub\modules\space\widgets\HeaderControlsMenu
-
Refactored settings system. see Settings Documentation for more details. Old settings api is still available in 1.1.x
-
Refactored user group system
-
New administration menu structure
Version 1.0
Migrate from 0.12 to 0.20
Important: This release upgrades from Yii1 to Yii2 Framework!
This requires an extensive migration of all custom modules/themes. Find more details here: HumHub 0.20 Migration