We released today the fifth bugfix version of BEdita 3.1 and a preview and unstable version of BEdita 3.2.
BEdita 3.1.5 (code name ulmus*) introduces a new method to define inverse semantic relations between objects and solves many bugs.
The most important changes are:
See the changelog for a full list of changes.
BEdita 3.2 beta (code name populus**): working hard on the next release, many improvements and features have been introduced. Some are:
See the changelog for all changes.
Important: have a look at the install guide or if you are upgrading from 3.1 series, have a look at the upgrade guide (upgrade is still not recommended in production environments).
Explore and follow BEdita also on:
(*) “ulmus” : [ pronounce /ˈəl-məs ] aka elm, a tall deciduous tree that typically has rough serrated leaves and propagates from root suckers, Genus Ulmus, family Ulmaceae.
(**) “populus” : [ pronounce \ˈpä-pyə-ləs\ ], aka poplar, is a genus of 25–35 species of deciduous flowering plants in the family Salicaceae, native to most of the Northern Hemisphere..
// render compiled template
//
$_template->properties['unifunc']($_template);
$_smarty_tpl = Smarty_Internal_Template Smarty_Internal_Template::$cache_id = NULL Smarty_Internal_Template::$compile_id = "Pages" Smarty_Internal_Template::$caching = false Smarty_Internal_Template::$cache_lifetime = 3600 Smarty_Internal_Template::$template_resource = "/home/bedita3/bedita.net/frontends/staging.bedita.com/views/elements/content.tpl" Smarty_Internal_Template::$mustCompile = false Smarty_Internal_Template::$has_nocache_code = false Smarty_Internal_Template::$properties = array Smarty_Internal_Template::$required_plugins = array Smarty_Internal_Template::$smarty = Smarty object Smarty_Internal_Template::$block_data = array Smarty_Internal_Template::$variable_filters = array Smarty_Internal_Template::$used_tags = array Smarty_Internal_Template::$allow_relative_path = false Smarty_Internal_Template::$_capture_stack = array Smarty_Internal_Template::$template_class = "Smarty_Internal_Template" Smarty_Internal_Template::$tpl_vars = array Smarty_Internal_Template::$parent = Smarty object Smarty_Internal_Template::$config_vars = array Smarty_Internal_Template::$source = Smarty_Template_Source object Smarty_Internal_Template::$compiled = Smarty_Template_Compiled object $tmp = "/f5/aa/BEdita-3.2.beta2.3867.popolus.tar.gz" $_from = array( array( "id" => "1897", "start_date" => null, "end_date" => null, "subject" => null, "abstract" => "<p> </p> <p> </p>", "body" => "<p><strong>3.2.beta</strong><strong> </strong>release -- 05-03-2011</p> <p><span style="text-decoration: underline;">User-visible changes</span>:</p> <p>* #137 - installation wizard</p> <ul> <li> setup: partially formatted database.php</li> </ul> <p>* #279 admin: mail queue and mail check</p> <ul> <li> email info page</li> <li> change menu labels</li> </ul> <p>* #283 basic XML export/import from publications module</p> <ul> <li> import/export filter models</li> <li> xml import, allow import of files already present</li> </ul> <p>* #268 admin: configuration page</p> <ul> <li> lang selection layout</li> <li> added button "test smtp"</li> </ul> <p>* #301 admin: view backend and frontends log files<br /> * #276 Sections enhancement</p> <ul> <li> GeoTag</li> </ul> <p>* #303 new BE home<br /> * #210 frontend menu - backend interface</p> <ul> <li> trees.menu not nullable, view in publications module</li> <li> icon for hidden sections</li> <li> save trees.menu user selection ("visibility" checkbox)</li> <li> Publication module - list sections: fixed wrong label and icon visibility conditions for hidden sections</li> <li> added "menuhidden" class to left side tree items</li> <li> init data publication/section with menu = 1</li> </ul> <p>* #233 highlight objects with permissions</p> <ul> <li> wrong protected class set to publications fixed</li> <li> locked icon on .protected elements in .publishingtree</li> <li> fixed double icon in detail doc</li> </ul> <p>* #307 relations: handle inverse relations</p> <ul> <li> handle inverse relations in obj save and in obj view</li> <li> delete inverse relations before insert</li> <li> fix "inverse" relations delete</li> <li> fix "inverse" relations priority</li> </ul> <p>* #117 multimedia: handle existing file/url<br /> * #295 admin: add utility functions</p> <ul> <li> UI for admin / utility module</li> <li> core modules management (on-off)</li> </ul> <p>* #296 Create new Users module to manage users and groups</p> <ul> <li> immutable groups + asc desc in user list</li> <li> added search and pagination toolbar in Users module</li> </ul> <p>* #150 ui: show ascending/descending order for columns object lists<br /> * #308 - view categories in alphabetical order<br /> * other:</p> <ul> <li>editor css</li> <li> ckeditor</li> <li> error display / new view</li> <li> bigger pub tree area</li> </ul> <p><span style="text-decoration: underline;">Frontend changes</span>:</p> <p>* #304 category 'off' should not be visible in frontend<br /> * frontends - debug.example.com: removed comment<br /> * fixes on dummy.example.com, site.example.com, pages_controller<br /> * add tag_cloud element in dummy.example.com and debug.example.com<br /> * set parentAuthorized = authorized in FrontendController::setCanonicalPath() for publication to avoid warning in FrontendController::section() method (merged from ulmus)<br /> * FrontendController::loadObjectsByCategory changed from public to protected<br /> * FrontendController - add setCanonicalPath in objects selected by tag or category and removed forced baseLevel for bindings<br /> * FrontendController::loadObjectsByTagCategory() - add try catch block to avoid 404 error when get contents on draft branch tree<br /> * BeFront::menu() - comment corrected<br /> * BeFront::chooseTemplate() fix 'Check frontendMap currentContent nickname' when currentContent is populated but no content has been selected<br /> * BeFront::chooseTemplate() fix 'object type template' choose when currentContent is populated but no content has been selected</p> <p><span style="text-decoration: underline;">Developer-visibile changes</span>:</p> <p>* #291 multimedia: url friendly file names</p> <ul> <li> added field 'original_name' to streams table</li> </ul> <p>* #274 frontend: generic /category method to load categorized objects</p> <ul> <li> added category tpl to examples</li> </ul> <p>* #305 apidoc corrections/improvements<br /> * added alpha suffix in changelog<br /> * changed default limit value $dim = 100000 in BEAppModel::findObjects() to $dim = null (get all objects with no limit)<br /> * add sql_dump.tpl for Smarty to show SQL output<br /> * upload: fix mediaType detection<br /> * texteditor script in a separate element view<br /> * BEObject::beforeValidate() - check that property_type is not empty before check if its value is 'date' to format property_value to avoid warning (merged from ulmus)<br /> * de{literal}ize smarty/javascript code<br /> * removed space in .htaccess<br /> * ui: fix js bug - write open fieldset cookie only if "id" is set<br /> * fixed PagesController::showObject() to get correctely objects in relations tab<br /> * fix on search text save for new sections<br /> * fix search bug: don't use "id" in order by! - trunk<br /> * remove unused model<br /> * New HTML5 dummy fronted (based on http://html5boilerplate.com/)<br /> * Added ignore rules for /tmp in html5.example.com<br /> * added tag {t} in "matching the query" string<br /> * generalized search form action attribute using $view->action<br /> * #265 - use and handle SmartyException<br /> * #248 - fix translations and multimedia on postgres<br /> * #287</p> <ul> <li> postgres search working (quite...) </li> <li> fix multiple results in postgres search (with AND)</li> <li> fix postgres search like mysql - with OR</li> </ul>", "duration" => null, "object_type_id" => "22", "status" => "on", "created" => "2012-02-24 14:07:50", "modified" => "2012-03-05 16:34:22", "title" => "ChangeLog 3.2.beta populus", "nickname" => "changelog-32beta-populus", "description" => "", "valid" => "1", "lang" => "eng", "ip_created" => "93.57.122.168", "user_created" => "4", "user_modified" => "5", "rights" => "", "license" => "", "creator" => "", "publisher" => "", "note" => null, "fixed" => "0", "comments" => "off", "UserCreated" => array(), "ObjectProperty" => array(), "Annotation" => array(), "RelatedObject" => array(), "GeoTag" => array(), "Category" => array(), "Tag" => array(), "object_type" => "Document", "free_access" => true, "authorized" => true, "priority" => "1", "params" => array(), "languages" => array() ), array( "id" => "1841", "start_date" => null, "end_date" => null, "subject" => null, "abstract" => "<p>Instructions to manually upgrade your BEdita installation from 3.1 to 3.2</p>", "body" => "<p>Currently BEdita has not an automatic system to upgrade from a version to another but you can follow the steps below to upgrade BEdita 3.1 to BEdita 3.2.</p> <ol> <li>backup your old BEdita installation</li> <li>remove the old version of BEdita and extract the new version in the same folder</li> <li>restore from your BEdita backup <code>bedita-app/config/database.php</code></li> <li>copy <code>bedita-app/config/core.php.sample</code> to <code>bedita-app/config/core.php</code></li> <li>copy <code>bedita-app/config/bedita.cfg.php.sample</code> to <code>bedita-app/config/bedita.cfg.php</code> and restore config vars <strong>beditaUrl</strong>, <strong>mediaUrl</strong>, <strong>mediaRoot</strong> from bedita.sys.php and any other configurations you did in old bedita.cfg.php. You can edit some of these configurations through the Admin module.</li> <li>make sure that <code>bedita-app/tmp</code> (and subfolders) and <strong>mediaRoot</strong> are writable by web server</li> <li>check if these two files exist:<br /> <ul> <li><code>bedita-app/config/sql/upgrade/0.3.1-to-3.2-data.sql</code></li> <li><code>bedita-app/config/sql/upgrade/1.3.1-to3.2-schema.sql</code></li> </ul> and execute the queries of first file and then of second file. If some of these files are missing don't worry, it means that no relative queries for data and/or schema needs.</li> <li>restore your frontends in <code>frontends</code> folder and follow the <a href="/migrating-from-bedita-3-2-from-3-1">migration guide</a> to make your frontends compatible with BEdita 3.2</li> </ol>", "duration" => null, "object_type_id" => "22", "status" => "on", "created" => "2011-12-23 11:02:10", "modified" => "2012-05-15 11:59:58", "title" => "Upgrade from BEdita 3.1 to BEdita 3.2", "nickname" => "upgrade-from-bedita-3-1-to-bedita-3-2", "description" => "Instructions to manually upgrade your BEdita installation from 3.1 to 3.2", "valid" => "1", "lang" => "eng", "ip_created" => "93.57.122.168", "user_created" => "5", "user_modified" => "18", "rights" => "", "license" => "", "creator" => "", "publisher" => "", "note" => null, "fixed" => "0", "comments" => "off", "UserCreated" => array(), "ObjectProperty" => array(), "Annotation" => array(), "RelatedObject" => array(), "GeoTag" => array(), "Category" => array(), "Tag" => array(), "object_type" => "Document", "free_access" => true, "authorized" => true, "priority" => "9", "params" => array(), "languages" => array() ), array( "id" => "1489", "start_date" => null, "end_date" => null, "subject" => null, "abstract" => "<p>A brief guide to upgrade your frontends from 3.1</p>", "body" => "<p>BEdita 3.2 comes with CakePHP 1.3.x series that introduces some changes. You can see a full guide to migrate CakePHP 1.2.x to 1.3.x in <a href="http://book.cakephp.org/#!/view/1561/Migrating-from-CakePHP-1-2-to-1-3" target="_blank">CakePHP cook book</a>, here instead we'll discuss what you have to change in your frontend apps to work properly.</p> <p>First of all replace in your frontend apps <strong>config/core.php</strong> and <strong>webroot/index.php</strong>. You can use the corresponding files bundles in BEdita 3.2, for example copy <strong>frontends/dummy.example.com/config/core.php</strong> and <strong>frontends/dummy.example.com/webroot/index.php</strong> to the corresponding paths of your frontend apps.</p> <h1>Router</h1> <p>A small change has also been done to routing params. Routed params should now only consist of alphanumeric chars, - and _ or <code>/[A-Z0-9-_+]+/</code>. This involve <strong>frontend-app/config/route.php</strong> because the old rule:</p> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">Router::connect( '/(?!pages)(.*)', array( 'controller' => 'pages', "action" => "route" ) );</pre> <p>will not work anymore. Replace it with:</p> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">Router::connect( '/*', array( 'controller' => 'pages', 'action' => 'route' ) );</pre> <p>It has to be the last router rule and it delegates routing to FrontendController::route() method.</p> <h1><br />Config</h1> <p>The bootstrap chain is changed, now all necessary configurations file are included from bedita.ini.php, so edit <strong>frontend-app/config/frontend.ini.php</strong> replacing:</p> <pre class="brush: php; first-line: 1; tab-size: 4; toolbar: false; ">require_once(BEDITA_CORE_PATH . DS . "config" . DS . "bedita.ini.php") ; if (file_exists (BEDITA_CORE_PATH . DS . "config" . DS . "bedita.cfg.php") ) { include(BEDITA_CORE_PATH . DS . "config" . DS . "bedita.cfg.php") ; } if (file_exists (APP. "config" . DS . "mapping.cfg.php") ) { include(APP. "config" . DS . "mapping.cfg.php") ; }</pre> <p>with:</p> <pre class="brush: php; first-line: 1; tab-size: 4; toolbar: false; ">require BEDITA_CORE_PATH . DS . "config" . DS . "bedita.ini.php"; include(APP. "config" . DS . "mapping.cfg.php");</pre> <p>The modelBinding structure has changed: GeoTag is part of BEObject. In <strong>frontend-app/config/frontend.ini.php</strong> use GeoTag 'inside' BEObject, like in the following example:</p> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">$config['modelBindings'] = array( 'Document'=>array( 'BEObject'=>array( "LangText", "RelatedObject", "GeoTag" ) ), //... );</pre> <p> </p> <h1>View and Helpers</h1> <ul> <li><code>HtmlHelper::css()</code> no longer has an <code>$inline</code> parameter. Use <code>$options['inline']</code> instead, for example if you had:<br /> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">{$html->css("ui.datepicker", null, null, false)}</pre> you have to change it to:<br /> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">{$html->css("ui.datepicker", null, ['inline'=>false])}</pre> </li> <li><code>flash()</code> no longer auto echos. If you used Smarty as a template engine you should replace:<br /> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">{if $session->flash('error')}{/if}</pre> with:<br /> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">{$session->flash('error')}</pre> and similar. <br />Moreover in <code>SessionComponent::setFlash()</code> second param is used for setting an element instead of layout, so in your applications you will need to:<br /><ol> <li>Move <strong>message.tpl</strong> from <strong>views/layouts</strong> into <strong>views/elements</strong></li> <li>In <strong>message.tpl</strong> rename <code>$content_for_layout</code> variable to <code>$message</code></li> </ol></li> <li>JavascriptHelper is deprecated, you should replace: <br /> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">$javascript->link() </pre> with: <br /> <pre class="brush: php; first-line: 1; gutter: false; tab-size: 4; toolbar: false; ">$html->script()</pre> </li> <li>The array of smarty <code>assign_concat </code>function now must begin from 1</li> <li><code>MediaProviderHelper::$themeWeb</code> no longer exist</li> </ul> <h1>BEdita modules (CakePHP plugins)</h1> <p>Support for <strong>vendors/css, vendors/js, and vendors/img </strong> in plugin (bedita module) has been removed. They have been replaced with plugin (bedita module) webroot directories. <br />If you are using some additional modules you should update them. <br />If you created a personalized module you have to move your_module/vendors/css, your_module/vendors/js, your_module/vendors/img folders in your_module/webroot relative folders.</p> <h1>Frontend callbacks</h1> <p>If you used the nickname's callback feature in your PagesController you have to change the name because now the nickname is camelized to make the callbacks consistent with other methods names. In practice:</p> <h2>3.1 (old)</h2> <p>With <code>this-is-my-content</code> it called <code>this_is_my_contentBeforeFilter()</code>, ....</p> <h2>3.2 (new)</h2> <p>With <code>this-is-my-</code><code>content</code> it calls <code>thisIsMyContentBeforeFilter()</code>, ...</p>", "duration" => null, "object_type_id" => "22", "status" => "on", "created" => "2011-02-17 12:19:46", "modified" => "2012-05-15 17:06:35", "title" => "Migrating frontends from BEdita 3.1 to 3.2", "nickname" => "migrating-frontends-from-3-2-to-3-1", "description" => "A brief guide to upgrade your frontends from 3.1", "valid" => "1", "lang" => "eng", "ip_created" => "93.39.243.149", "user_created" => "5", "user_modified" => "18", "rights" => "", "license" => "", "creator" => "", "publisher" => "", "note" => null, "fixed" => "0", "comments" => "off", "UserCreated" => array(), "ObjectProperty" => array(), "Annotation" => array(), "RelatedObject" => array(), "GeoTag" => array(), "Category" => array(), "Tag" => array(), "object_type" => "Document", "free_access" => true, "authorized" => true, "priority" => "10", "params" => array(), "languages" => array() ), array( "id" => "1842", "start_date" => null, "end_date" => null, "subject" => null, "abstract" => "<p>From version 3.2 <strong>BEdita</strong> comes with a new web based wizard installer</p> ", "body" => "<p>Follow the instructions below to start working with BEdita</p> <ol> <li>make sure your host meets <a href="requirements">BEdita requirements</a>;</li> <li>download the <a href="/download/beditaopen3-unstable">package</a>;</li> <li>unpack the package in a directory served by the web server. For instance (shell example): <pre class="brush: bash; first-line: 1; tab-size: 4; toolbar: false; "> tar -xvpzf package.tar.gz /var/www/bedita</pre> (assuming that DocumentRoot is /var/www);</li> <li>point your web browser to the url relative at your bedita folder (the system will show you a web wizard installer); following the above example, url would be something like <code>http://localhost/bedita</code></li> <li>follow these basci steps and configure BEdita <ul> <li>Filesystem: set/check permissions</li> <li>Database: setup your BEdita database</li> <li>Admin User: create admin user for BEdita</li> </ul> </li> </ol> ", "duration" => null, "object_type_id" => "22", "status" => "on", "created" => "2011-12-23 15:22:43", "modified" => "2014-05-16 13:46:32", "title" => "Install BEdita", "nickname" => "install-bedita", "description" => "<div> <p>From BEdita 3.2 comes with a new web based wizard installer</p> </div> ", "valid" => "1", "lang" => "eng", "ip_created" => "93.57.122.168", "user_created" => "5", "user_modified" => "4", "rights" => "", "license" => "", "creator" => "", "publisher" => "", "note" => "", "fixed" => "0", "comments" => "off", "UserCreated" => array(), "ObjectProperty" => array(), "Annotation" => array(), "RelatedObject" => array(), "GeoTag" => array(), "Category" => array(), "Tag" => array(), "object_type" => "Document", "free_access" => true, "authorized" => true, "priority" => "20", "params" => array(), "languages" => array() ) )
content_5982cfc56cc4d1_97000323 - APP/tmp/smarty/compile/Pages^92df61132b5db5acd0bccec933ee0a0a0282d97d.file.content.tpl.php, line 142 Smarty_Internal_TemplateBase::fetch() - /home/bedita3/bedita.net/vendors/smarty/libs/sysplugins/smarty_internal_templatebase.php, line 182 SmartyView::_render() - /home/bedita3/bedita.net/bedita-app/views/smarty.php, line 127 View::element() - CORE/cake/libs/view/view.php, line 397 content_5982cfc565a520_40812317 - APP/tmp/smarty/compile/Pages^1813690fa0c7f8b8a8711c1241ef5b64627f7de5.file.generic_section.tpl.php, line 36 Smarty_Internal_TemplateBase::fetch() - /home/bedita3/bedita.net/vendors/smarty/libs/sysplugins/smarty_internal_templatebase.php, line 182 Smarty_Internal_Template::getSubTemplate() - /home/bedita3/bedita.net/vendors/smarty/libs/sysplugins/smarty_internal_template.php, line 284 content_5982cfc5635ea6_85666999 - APP/tmp/smarty/compile/Pages^bdba5c2d7b764545398cea4e31040bc76139281a.file.section.tpl.php, line 26 Smarty_Internal_TemplateBase::fetch() - /home/bedita3/bedita.net/vendors/smarty/libs/sysplugins/smarty_internal_templatebase.php, line 182 SmartyView::_render() - /home/bedita3/bedita.net/bedita-app/views/smarty.php, line 127 View::render() - CORE/cake/libs/view/view.php, line 431 Controller::render() - CORE/cake/libs/controller/controller.php, line 909 Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 207 Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171 [main] - APP/webroot/index.php, line 96