From d24ac0b2737ff45388d80bfaf18fc6edd1b31fd9 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Wed, 3 May 2006 00:11:54 +0000 Subject: [PATCH] fixing a problem with hex and JSON gettign rid of the migration.txt script, because it's now published on the site instead since all changes are complete --- docs/gotcha.txt | 1 - docs/migration.txt | 939 ------------------ docs/upgrades/upgrade_6.8.8-6.99.0.pl | 1 + .../Asset/Wobject/EventManagementSystem.pm | 2 +- lib/WebGUI/AssetPackage.pm | 2 +- lib/WebGUI/Config.pm | 4 +- lib/WebGUI/Session/ErrorHandler.pm | 2 +- lib/WebGUI/Session/Id.pm | 3 - lib/WebGUI/Workflow/Cron.pm | 2 +- lib/WebGUI/Workflow/Instance.pm | 4 +- sbin/upgrade.pl | 2 +- 11 files changed, 10 insertions(+), 952 deletions(-) delete mode 100644 docs/migration.txt diff --git a/docs/gotcha.txt b/docs/gotcha.txt index b28990986..61630470c 100644 --- a/docs/gotcha.txt +++ b/docs/gotcha.txt @@ -42,7 +42,6 @@ save you many hours of grief. Net::Subnets DateTime::Format::Mail Net::POP3 - POSIX List::Util Color::Calc diff --git a/docs/migration.txt b/docs/migration.txt deleted file mode 100644 index d0e03db35..000000000 --- a/docs/migration.txt +++ /dev/null @@ -1,939 +0,0 @@ -WebGUI 6.x Plugin Migration Guide ---------------------------------- - -This document is provided by the WebGUI 6.x development team in order to help -you migrate your WebGUI 5.x plugins to the new API's. If you are not a WebGUI -developer then this file won't make a lot of sense. - -CONTENTS - -1. Wobject/Asset Migration -2. Macro Migration -3. Authentication Migration -4. Scheduler Migration -5. System Changes Affecting Migration -6. Automatic list of Assets in Help System. -7. Group Membership - - -1. Wobject/Asset Migration --------------------------- - -1.1 Global Unique Wobject IDs - -In 6.2 we changed wobjects to use the new Global Unique ID system. See WebGUI::Id for -details. This change means that wobject Ids are now 22 character text strings rather -than integers. That means you'll need to update your database tables and code to account -for the Ids being strings. Also, anything using the setCollateral method will start using -GUIDs as well. - - -1.2 Converting Wobjects To Asset Wobjects - -In WebGUI 6.3 we made the first major change to the Wobject API. This should -be the last major change until versioning is introduced in 6.7. In order to -migrate your wobjects you will probably want to look at lib/WebGUI/Asset.pm, -and lib/WebGUI/Asset/Wobject.pm as well as the wobjects that come with WebGUI. - -NOTE: Interweaved in the tips below are VIM regular expressions that can help -the conversion process. - -The following tips should also help make your migration easer: - - 1.2.1 The wobjectId field has been changed to assetId. In addition the Wobject ID - should no longer be passed in the URL as wid. Instead all wobjects now have - their own unique URL. Use this to call your methods. - - Old: WebGUI::URL::page("func=edit&wid=".$self->get("wobjectId")) - New: $self->getUrl("func=edit") - - Remove wid part from urls. Wid part at end: - :%s/&wid=["']\.\(\$self\|\$_\[0\]\)->get(['"]wobjectId["']))/')/gc - - Remove wid part from urls. Wid not at end: - :%s/&wid=["']\.\(\$self\|\$_\[0\]\)->get(['"]wobjectId["']).['"]//gc - - Wid first form param: - :%s/['"]wid=["']\.\(\$self\|\$_\[0\]\)->get(['"]wobjectId["']).\(['"]\)&/\2/gc - - Find remaining wids in URLs: - /wid= - - 1.2.2 You can no longer assume that your forms and links are on the page they need - to be to be called. Therefore use the getUrl() method inherited from Asset to - build your forms and links. - - EXAMPLE: WebGUI::Form::formHeader({action=>$self->getUrl}); - - :%s/WebGUI::URL::page/$self->getUrl/gc - :%s/WebGUI::URL::page/$_[0]->getUrl/gc - :%s/WebGUI::HTMLForm->new\(();\|;\)/WebGUI::HTMLForm->new(-action=>$self->getUrl);/gc - :%s/WebGUI::Form::formHeader\(();\|;\)/WebGUI::Form::formHeader({-action=>$self->getUrl});/gc - - 1.2.3 Your wobject instance data (the data in the wobject table and the namespace - table) will automatically be assigned an assetId. The wobjectId field in the - namespace table will be left in place so that you have a reference of what the - old ID was. Use this information (the assetId and wobjectId) to write a - conversion script to convert the wobject data (if necessary). - - 1.2.4 Use the definition of the the fields in your old new() method to create a - new definition method. See other wobjects as an example. - - 1.2.5 The concept of namespace no longer exists. While it still works very well - in practice, it is no longer required that you call your table by the same - name as your class. And the same goes for help, internationalization, etc. We - still recommend using something like that, it's just not required. - - 1.2.6 Because namespace no longer exists you can't call the namespace to get - international ids etc. Instead, hard code the international namespace. This is - important for a number of reasons, but the most pressing is inheritance. - Wobjects are now truely objects in that they support inheritance. To avoid - subclass wobjects having to define a whole new international file with the - exact same labels you have in your your international file, you need to hard - code your namespace. - - Old: WebGUI::International::get("label",$self->get("namespace")); - New: WebGUI::International::get("label","Example"); - - :%s/\($self\|$_\[0\]\)->get(["']namespace["'])/'Survey'/gc - - 1.2.7 Convert your www_edit() method into the two methods getEditForm() and - www_edit(). See other wobjects for details. - - 1.2.8 Convert your www_view() method into a view() method. It should no longer - have a check to see if the user can view it. The www_view() method in the - Wobject superclass will do that. - - 1.2.9 Add a getIcon() method to your wobject. See other wobjects for examples. - If you don't wish to make icons, then exclude this method, it will be - inherited from the Asset superclass with the generic asset icon. - - 1.2.10 Rename your uiLevel() method to getUiLevel(). - - 1.2.11 Rename your name() method to getName(). - - 1.2.12 If your wobject used the forum system, then check out the new - lib/WebGUI/Asset/Wobject/Collaboration.pm system. - - 1.2.13 If your wobject used attachments, then check lib/WebGUI/Storage.pm and - lib/WebGUI/Storage/Image.pm - - 1.2.14 The parameters for the wobject processTemplate() method have changed. - - :%s/processTemplate(\([^,]*\),\([^,]*\)\(,[^,]*\)\=)/processTemplate(\2,\1)/gc - - 1.2.15 If you were using the template system directly rather than - using the wobject processTemplate() method, please note that it has - been replaced by the WebGUI::Asset::Template asset. - - 1.2.16 Since all assets are now pages, you need to provide your own - view level security on your www_ methods like this: - - return WebGUI::Privilege::noAccess() unless ($self->canView); - - and like this: - - return WebGUI::Privilege::insufficient() unless ($self->canEdit); - - -1.3 Quick Read Assets - -As of 6.7.0 Quick Read Assets have been removed. If you adopted quick read -assets between 6.3.0 and 6.7.0 you'll need to change the getLineage rule from -returnQuickReadObjects to returnObjects. - - -1.4 Versioning - -If you're building any custom assets you'll need to write an upgrade script -for 6.6 to 6.7 that will add a revisionDate (bigint) field to your namespace -table. And you'll need to select the revisionDate from the asset table to -initially populate the field in your table. revisionDate along with assetId -should create a composite primary key for your table. Here are some example -SQL queries to get you started in your transition: - - alter table MyAsset add column revisionDate bigint not null; - alter table MyAsset drop primary key; - ...look up the revision date for each asset instance from the asset table... - alter table MyAsset add primary key (assetId,revisionDate); - -In addition, if you wish to version the attachments to your asset, you'll need -to add addRevision(), purge(), and purgeRevision() methods to your asset. See -WebGUI::Asset::File and WebGUI::Asset:Post for examples of what these methods -should look like. - -Also, if you have written any queries to go against the "asset" table, you -should note that the asset table has been split into two tables "asset" and -"assetData". So you'll need to change your queries appropriately. - -Other than that you shouldn't have to make any revisions to your asset to -support versioning. Your collateral tables need not have the revision date as -they'll be tied to the assetId regardless of the revision date. - - -1.5 Constructor API Change - -In 6.7.0 the new() and newByDynamicClass() API's in WebGUI::Asset changed -slightly. In most situations the changes will not cause any problems, but for -some asset developers there may be a slight change. - - -1.6 Binary GUIDs - -In 6.7.3 we noticed a problem with the GUID system. MySQL by default reads -varchar fields as case insensitive, which can cause a big overlap problem for -assetIds, userIds, and anything else that uses GUIDs. Therefore you need to -alter all your custom tables and add the binary operator to the GUID field -definitions like so: - -alter table MyTable change assetId assetId binary not null; - - -1.7 processMacros() Method Removed - -In 6.8 the long depricated method processMacros() was removed. No one should -be using this any longer anyway, but we thought we'd warn you anyway. - - -1.8 Output Chunking - -Starting in 6.99 WebGUI www_ asset methods are capable of having full control -over the output buffer. They can use $session->output->print() to send chunks -of content back to the browser before the page is entirely processed. The -advantage here is that the page appears to load more quickly to the end user. -The disadvantage is that you must set up any HTTP and HTML headers before you -start to send any content. The view() method now has a companion method called -prepareView() in which HTML and HTTP headers must be set. See any of the -existing assets and wobjects for implementation details. - - -1.9 Removed Page Caching - -The page caching system that was cacheTimeout and cacheTimeoutVisitor on -wobjects has been removed. Not everything caches in the same way and therefore -we can't use a generic caching mechanism as much as we'd like to. Likewise, -the www_view(1) cache override that has traditionally been used in wobjects is -now gone since it's useless. If your asset needs caching, you'll need to add -it yourself. See one of the dozen or so assets that come with WebGUI for -ideas. Examples include Article, SQL Report, File, and Folder. - - - -2. Macro Migration -------------------- - -2.1 Navigation Macros - -As of WebGUI 6.0 there is no longer a need to develop custom navigation macros. WebGUI -has an entirely new navigation system that is 100% configurable and templated. The -legacy navigation system has been removed. Any nav macros that you've written -will need to be removed from the system. Then just create a navigation -configuration to do what your old nav once did. - -If you absolutely must write a navigation macro for some reason that our nav -system does not accomodate you, then please check out the new API in -WebGUI::Navigation. - - -2.2 Navigation Macros Revisited - -As of 6.3 check out lib/WebGUI/Asset/Wobject/Navigation.pm if you want to -write custom navigation macros. - - -2.3 Macro API Changed - -In 6.8 we modified the macro API to be more user friendly, and more -importantly to use a lot less memory. This has two results. If you use the -macro methods like filter(), negate(), or process() then you need to start -passing your content in as a scalar reference instead of a regular scalar. If -you write your own macros, you no longer need to call getParams() to retreive -your parameters. That is automatically done for you now. - - - -3. Authentication Migration ------------------------------ - -3.1 Authentication Modules Changes - -Authentication in 6.0 is now completely Object Oriented. The superclass WebGUI::Auth defines a loose set of rules by which -to create authentication parameters. Subclasses MUST be WebGUI::Auth objects, however they can define thier own rules -for authentication. No methods are required to be overwritten as it is up to the user to decide which methods may be called -through WebGUI. The only method that MUST be calllable is the init routine which should define the starting point for authentication. -For instance, WebGUI's init method calls the displayLogin function. - -Methods which remain compatible the auth modules distributed with WebGUI: -www_createAccount -www_deactivateAccount -www_displayAccount -www_displayLogin -www_login -www_logout -www_recoverPassword - -There is no guarentee, however that any custom apps which call these routines will work for custom authentication instances. - -3.2 Auth Templates - -As of 6.3 you must add three new methods to your authentication modules. They are -getAccountTemplateId(), getCreateAccountTemplateId(), and -getLoginTemplateId(). If you are not using the superclass methods associated -with these, then you can skip this. Also the template parameters for the -associated methods has been removed in favor of these methods. And finally, -take a look a WebGUI::Asset::Template for changes in the template system API. - - -4. Scheduler Migration ------------------------ - -4.1 Converted to Workflow - -As of 6.99 we've converted the scheduler (runHourly.pl) and it's plugins -(sbin/Hourly/*) to the new WebGUI Workflow system. The program that replaces -runHourly.pl is sbin/spectre.pl, which is always running and therefore doesn't -need to be scheduled via crontab or Windows Scheduler. To see the new API for -the sbin/Hourly/* scripts, check out -lib/WebGUI/Workflow/Activity/_activity.skeleton - - -5. System Changes Affecting Migration -------------------------------------- - -5.1 Set Date Format Changes - -In 6.0 the "set date" format used by WebGUI::Form::date() and other methods -was changed from "MM/DD/YYYY" to "YYYY-MM-DD" and optionally "YYYY-MM-DD -HH:MM:SS". If you are using WebGUI::FormProcessor to handle processing of your -dates then you will notice no side effects from the format change. If you are -not, then you should convert your plugin to use WebGUI::FormProcessor. - -In addition to the format change above, we also made one related API change. -WebGUI::Form::DateTime() and WebGUI::HTMLForm->dateTime() no longer have -"dateExtras" and "timeExtras", but rather just "extras" properties. This is -because there is only one field to represent both the date and the time, -unlike before. - - -5.2 Database Links - -The database links API was changed in 6.0. The getHash function was removed and -replaced with a getList function that returns a hash reference. - - -5.3 Paginator - -In 6.0 almost all of the paginator methods were modified in an incompatible -way, including the constructor. We removed depricated parameters from the methods, -which will cause pagination not to function in items that have not been updated. - - -5.4 Dynamic Plug-in Loading - -In 6.1 plug-ins (Wobjects, Macros, and Auth) are all dynamically loaded. They -used to be statically loaded at session open time. If you are writing -something that uses a macro, wobject, or auth module outside of the usual -mechanisms that call those plug-ins, then you'll need to write a piece of code -to load the plug-in at use time. - - -5.5 Privilege API Change - -In 6.1 we moved isInGroup from WebGUI::Privilege to WebGUI::Grouping, where it -belongs. We also moved canViewPage and canEditPage to WebGUI::Page and renamed them -to canView and canEdit. And finally, we moved canEditWobject and -canViewWobject to WebGUI::Wobject and renamed them canView and canEdit and -converted them from regular functions into methods. - - -5.6 Template API Change - -In 6.1 we completely rewrote the underlying template framework to add template -caching. Any plug-ins that use WebGUI::Template, must be updated to reflect -the new API. Template caching is currently disabled, however. - - -5.7 Internationalization and Help Change - -In 6.1 we moved the internationalization out of the database and into compiled -perl modules. This helps tremendously in performance. It also allows for -text-based tags to be used instead of integers for international ids. If -you've written any plug-ins that use the internationalization system, you'll -need to migrate them to the new system. We've created a tool that will -auto-generate the new help and internationalization files from an existing 6.0 -database. You can get it from the "tools" module in CVS or in the user -contributions area on plainblack.com. The utility is called: -gen61i18nfrom60data.pl - -We also made the International API object oriented. The old procedural version -is still intact as well. See WebGUI::International for API changes. - -As a developer you can convert your translations (including English) and your -help files using a script we provide. You can find the script here: - -http://www.plainblack.com/translations/translations - - -5.8 WebGUI::Session Changes - -In 6.8 we removed $session{os}{slash}. This is due to requiring Windows 2000 -or higher. - -In 6.1 we changed the session API to remove functions that didn't really -belong in WebGUI::Session. The main changes of interest are that you no longer -do HTTP redirects and set cookies via session. Take a look at WebGUI::HTTP for -details. - - -5.9 Global Unique IDs - -In 6.2 we added global unique Ids to WebGUI. This means that a lot of the integer- -based incrementer IDs will now be replaced with 22 character text IDs. You should -update your code and database tables to take advantage of this. Some of the more -important ID's that have been changed are User Ids, Group Ids, and Wobject Ids. -See WebGUI::Id for more information. - - -5.10 POD - -In 6.2 we've switched to a new Plain Old Documentation (POD) format. See Ruling -WebGUI for details. - - -5.11 Internationalization and URLs - -In 6.3 we moved URL compliance to the language file. We did this because the -non-latin characterset languages were having trouble with WebGUI generated -URLs. So now they can write in their own handlers to deal with WebGUI -generated URLs. If your language uses a latin character set, you can just copy -the makeUrlCompliant subroutine from lib/WebGUI/i18n/English.pm into your -language file. - - -5.12 UTF-8 Required - -As of 6.3 we're now requiring that all WebGUI sites use the UTF-8 character -set. The language packs distributed from the WebGUI Worldwide members will now -be converted to UTF-8, and you can get instructions on their sites as to how -to convert your content, if necessary. - - -5.13 Form Changes - -The following form changes were made in 6.8: - -All forms types now use inheritance to build List type forms. This is -what the class hierarchy looks like: - -List - CheckList - RadioList - HiddenList - SelectList - Group - LdapLink - SelectBox - ComboBox - ContentType - DatabaseLink - FilterContent - Template - TimeZone - WhatNext - -The new SelectBox class behaves exactly like a SelectList but only supports single -select instead of multiple select and defaults to being 1 character high. By -default, all SelectLists are not 5 characters high. The size setting can -be used to override the defaults in all List type forms. - -All List type forms now also have a sortByValue property which defaults -to 0 (off). This made automatic testing of the Forms easy. - -getName is now in the Form::Control base class. It retreives whatever -is stored in the formName field of the definition field structure. - -The following form changes were made in 6.3: - -The interval subroutine in WebGUI::Form and WebGUI::HTMLForm had an API -change. See the documentation for WebGUI::Form and WebGUI::HTMLForm for -details. - -The select method in WebGUI::HTMLForm that has been depricated forever has -been removed. - -Most of the subroutines in WebGUI::HTMLForm and WebGUI::Form now have a -parameter called "defaultValue" which will be used in the event that "value" -is not specified. - -You can now dynamically add tabs to WebGUI::TabForms. - - -5.14 Persistent API Removed - -The never understood and not really used Persistent API has been removed. If -you want to store something in a tree, it probably belongs in the asset tree -anyway. - - -5.15 Node/Attachment System Replaced - -In 6.3 the file system storage mechanism of lib/WebGUI/Node.pm and -lib/WebGUI/Attachment.pm have been replaced in favor of lib/WebGUI/Storage.pm. -If you had anything using the old system we highly recommend migrating it into -the new system as it is much more flexible. Alternatively you can copy the old -system back into place (it should still work, but no guarantees). - - -5.16 Template System Replaced - -In 6.3 the template system has been replaced in favor of the new template -asset. Please see WebGUI::Asset::Template for details. - - -5.17 WebGUI::ErrorHandler API Changed - -In 6.6 we brought log4perl to bear on our debuging and logging needs. This had -a slight impact on the WebGUI::ErrorHandler API. Although there are many -changes, the only thing anyone should notice is that fatalError() was renamed -to fatal(). - - -5.18 Form API Changed - -In 6.7 we made the form controls pluggable so that new ones can be added -without changing the core code at all. This change is mostly transparent -unless you're still using the ancient deprecated WebGUI::HTMLForm syntax that -allows you to pass in form control properties as arrays like this: - -my $f = WebGUI::HTMLForm->new; -$f->text("nameGoesHere","value goes here","label goes here"); - -Instead you should be using something like this: - -$f->text( - name=>"nameGoesHere", - value=>"Value Goes Here", - label=>"Label goes here" - ); - -Note you can pass in the parameters as either a hash reference or a hash and -the param names can be tagged or not. Here are examples: - -$f->text(-name=>"nameGoesHere"); -$f->text({-name=>"nameGoesHere"}); -$f->text(name=>"nameGoesHere"); -$f->text({name=>"nameGoesHere"}); - -Also every form control now has an auto-generated ID attribute to aid in the -swift development of AJAX features. You can override the autogenerated one by -passing in an id parameter like this: - -$f->text(name=>"this",id==>"myownpersonalid"); - -Also, calls to WebGUI::Form::submit must be changed to WebGUI::Form::Submit. -Also, WebGUI::Form::Submit by itself doesn't work. WebGUI::Form::Submit() -must be used. - -See WebGUI::HTMLForm and WebGUI::Form::Control for additional information. - - -5.19 SQL Files For Upgrades Deprecated - -Starting with WebGUI 6.7.0 .sql files will no longer be used in core upgrades -of WebGUI sites. We also suggest not using them for upgrades of custom code. -The reason is that the database is becoming very complex, and it's easier to -introduce errors to the database when modifying it directly rather than using -the APIs. - - -5.20 Use ; instead of & in URLs - -In our effort to achieve full XHTML strict compliance we have switched -WebGUI's internals to expect a ; instead of a & as the URL query parameter -delimiter in 6.7.2. You must update your WebGUI plugins to reflect this new -URL style. - - -5.21 WebGUI::Search Removed - -The old WebGUI::Search package has been removed in 6.7.2. It hasn't been used -by any WebGUI core package since 6.3 and wasn't really used much prior to that. -If you were using it, just copy it's subs into your app. - - -5.22 DateTime API Changed Slightly - -In 6.8.0, as a result of migrating the DateTime API away from Date::Manip and -to DateTime we've eliminated the need for several utility functions, and -therefore removed them. This shouldn't affect almost anybody, but we're -mentioning it just in case you're using WebGUI::DateTime in an odd mannner. -They are: epochToDate, dateToEpoch, epochToArray, arrayToEpoch - - -5.22 CGI No Longer - -As of 6.8.0 we are no longer using CGI to handle our web interactions. Instead -we are using a native mod perl handler. If you used $session{cgi} object -you'll now need to convert your applications to use the methods provided by -Apache2::Request which is referenced through $session{modperl} and $session{req}. - - -5.23 Session System Replaced - -As of 6.99 we've removed the old global session system and replaced it with a -newer, safer, more modern, object oriented session system. Because session is -the glue that holds WebGUI together, it has basically affected every API in -the system. Here's a (hopefully complete) list of what's been changed and how -it affects you. - -%session no longer exists, so you can no longer do things like -$session{user}{userId}. Instead, you'll know have a $session object that will -be accessible in whatever plug-in environment you're working on. So to -retrieve the current user's userId you'd call $session->user->userId because -session loads the current user's user object, and then you can call the userId -method on that object. If you're working in an asset environment, you may -instead be calling something like $self->session->user->userId. - -Please see the WebGUI::Session API for details on what objects are available -through WebGUI::Session. The following unix command line tricks should fix 70% -of the things you need to change in your custom assets. You will need to -modify them slightly for other types of plugins (run these in order, and -replace fileNameGoesHere with the file you wish to run the command on): - -Fix $session{config} - -perl -pi.bak -e 's!\$session{config}{webguiRoot}!\$self->session->config->getWebguiRoot!g' fileNameGoesHere -perl -pi.bak -e 's!\$session{config}{configFile}!\$self->session->config->getFilename!g' fileNameGoesHere -perl -pi.bak -e 's!\$session{config}{(.*)}!\$self->session->config->get("$1")!g' fileNameGoesHere - -Fix $session{setting} - -perl -pi.bak -e 's!\$session{setting}{(.*)}!\$self->session->setting->get("$1")!g' fileNameGoesHere - -Fix $session{user} - -perl -pi.bak -e 's!\$session{user}{(username|userId)}!\$self->session->user->$1!g' fileNameGoesHere -perl -pi.bak -e 's!\$session{user}{(.*)}!\$self->session->user->profileField("$1")!g' fileNameGoesHere - -Fix $session{env} - -perl -pi.bak -e 's!\$session{env}{(.*)}!\$self->session->env->get("$1")!g' fileNameGoesHere - -Fix $session{os} - -perl -pi.bak -e 's!\$session{os}{(.*)}!\$self->session->os->get("$1")!g' fileNameGoesHere - -Fix $session{var} - -perl -pi.bak -e 's!\$session{var}{(.*)}!\$self->session->var->get("$1")!g' fileNameGoesHere - -Fix $session{req} - -perl -pi.bak -e 's!\$session{req}!\$self->session->request!g' fileNameGoesHere - -Fix $session{asset} - -perl -pi.bak -e 's!\$session{asset}!\$self->session->asset!g' fileNameGoesHere - -Fix $session{scratch} - -perl -pi.bak -e 's!WebGUI\:\:Session\:\:deleteAllScratch!\$self->session->scratch->deleteAll!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Session\:\:deleteScratch!\$self->session->scratch->delete!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Session\:\:setScratch!\$self->session->scratch->set!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Session\:\:getScratch!\$self->session->scratch->get!g' fileNameGoesHere -perl -pi.bak -e 's!\$session{scratch}{(.*)}!\$self->session->scratch->get("$1")!g' fileNameGoesHere - - -5.23.1 WebGUI::SQL API Refactored - -The SQL API has been made more object oriented in 6.99, so it now handles database -connections for you. You can get the default database connection via -$session->db or a random slave via $session->dbSlave or you can create your -own by my $db = WebGUI::SQL->connect($session, $dsn, $user, $pass); - -The following command line tricks should fix most of your database queries -(provided your querying the WebGUI database): - -perl -pi.bak -e 's!WebGUI\:\:SQL\-\>!\$self->session->db->!g' fileNameGoesHere -perl -pi.bak -e 's!quoteAndJoin\(!\$self->session->db->quoteAndJoin(!g' fileNameGoesHere -perl -pi.bak -e 's!quote\(!\$self->session->db->quote(!g' fileNameGoesHere - - -5.23.2 WebGUI::FormProcessor API Refactored - -Instead of accessing $session{form} or WebGUI::FormProcessor getting form data -is done through the new session system via $session->form->process("param","Text"); - -perl -pi.bak -e 's!\$session{form}{(.*)}!\$self->session->form->process("$1")!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:FormProcessor\:\:!\$self->session->form->!g' fileNameGoesHere - - -5.23.3 WebGUI::ErrorHandler API Refactored - -As of 6.99 WebGUI::ErrorHandler is now accessed through session. - -perl -pi.bak -e 's!WebGUI\:\:ErrorHandler\:\:!\$self->session->errorHandler->!g' fileNameGoesHere - - -5.23.4 WebGUI::Style API Refactored - -As of 6.99 the WebGUI::Style API has been convereted to OO and is accessed -through session. The following command line tricks will help you convert your -assets. - -perl -pi.bak -e 's!\$session{page}{useEmptyStyle} = (\d+);!\$self->session->style->useEmptyStyle("$1")!g' fileNameGoesHere -perl -pi.bak -e 's!\$session{page}{makePrintable} = (\d+);!\$self->session->style->makePrintable("$1")!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Style\:\:!\$self->session->style->!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Operation\:\:Shared\:\:userStyle\(!\$self->session->style->userStyle(!g' fileNameGoesHere - -5.23.5 WebGUI::Macro API Refactored - -You now need to pass in a reference to $session to the process function. - -perl -pi.bak -e 's!WebGUI\:\:Macro\:\:process\((.*)\)!WebGUI::Macro::process(\$self->session,$1)!g' fileNameGoesHere - - -5.23.6 WebGUI::URL API Refactored - -As of 6.99 WebGUI::URL is now accessed through session like $session->url - -perl -pi.bak -e 's!WebGUI\:\:URL\:\:!\$self->session->url->!g' fileNameGoesHere - - -5.23.7 WebGUI::Cache API Refactored - -As of 6.99 WebGUI::Cache requires you to pass in a reference to $session into -the constructor. - -perl -pi.bak -e 's!WebGUI\:\:Cache\-\>new\(!WebGUI::Cache->new(\$self->session,!g' fileNameGoesHere - - -5.23.8 WebGUI::AdminConsole Refactored - -As of 6.99 WebGUI::AdminConsole requires you to pass a reference to $session -into the constructor. - -perl -pi.bak -e 's!WebGUI\:\:AdminConsole\-\>new\(!WebGUI::AdminConsole->new(\$self->session,!g' fileNameGoesHere - - -5.23.9 WebGUI::DatabaseLink API Refactored - -As of 6.99 WebGUI::DatabaseLink requires you to pass in a reference to -$session into the constructor. Also, the API has been heavily refactored to be -more complete. Please see it's API docs for more info. - -perl -pi.bak -e 's!WebGUI\:\:DatabaseLink\-\>new\(!WebGUI::DatabaseLink->new(\$self->session,!g' fileNameGoesHere - - -5.23.10 WebGUI::Privilege API Refactored - -WebGUI::Privilege is now accessed through session like $session->privilege as -of 6.99. - -perl -pi.bak -e 's!WebGUI\:\:Privilege\:\:!\$self->session->privilege->!g' fileNameGoesHere - - -5.23.11 WebGUI::DateTime API Refactored - -WebGUI::DateTime is now accessed through $session. - -perl -pi.bak -e 's![^\:]monthStartEnd\(!\$self->session->datetime->monthStartEnd(!g' fileNameGoesHere -perl -pi.bak -e 's![^\:]setToEpoch\(!\$self->session->datetime->setToEpoch(!g' fileNameGoesHere -perl -pi.bak -e 's![^\:]humanToEpoch\(!\$self->session->datetime->humanToEpoch(!g' fileNameGoesHere -perl -pi.bak -e 's![^\:]epochToSet\(!\$self->session->datetime->epochToSet(!g' fileNameGoesHere -perl -pi.bak -e 's![^\:]epochToHuman\(!\$self->session->datetime->epochToHuman(!g' fileNameGoesHere -perl -pi.bak -e 's![^\:]addToDate\(!\$self->session->datetime->addToDate(!g' fileNameGoesHere -perl -pi.bak -e 's![^\:]addToTime\(!\$self->session->datetime->addToTime(!g' fileNameGoesHere -perl -pi.bak -e 's![^\:]localtime\(!\$self->session->datetime->localtime(!g' fileNameGoesHere -perl -pi.bak -e 's![^\:]time\(!\$self->session->datetime->time(!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:DateTime\:\:!\$self->session->datetime->!g' fileNameGoesHere - - -5.23.12 WebGUI::Form API Refactored - -In 6.99 the WebGUI::Form API was refactored to accept $session as the first -parameter to each method. - -perl -pi.bak -e 's!WebGUI\:\:Form\:\:(\w+)\((.*)\)!WebGUI::Form::$1(\$self->session,$2)!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Form\:\:(\w+)\($!WebGUI::Form::$1(\$self->session,!g' fileNameGoesHere - -5.23.13 WebGUI::Group and WebGUI::Grouping API Refactored - -WebGUI::Grouping has been merged into WebGUI::Group and WebGUI::User. -WebGUI::Group has also been refactored to use the new session system. - -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:isInGroup!\$self->session->user->isInGroup!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:getGroupsForUser!\$self->session->user->getGroups!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:addGroupsToGroups!\$group->addGroups!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:addUsersToGroups!\$group->addUsers!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:deleteGroupsFromGroups!\$group->deleteGroups!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:deleteUsersFromGroups!\$group->deleteUsers!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:getGroupsForGroup!\$group->getGroupsFor!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:getGroupsInGroup!\$group->getGroupsIn!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:getUsersInGroup!\$group->getUsers!g' fileNameGoesHere -perl -pi.bak -e 's!\-\>groupId!->getId!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:userGroupAdmin!\$group->userIsAdmin!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Grouping\:\:userGroupExpireDate!\$group->userGroupExpireDate!g' fileNameGoesHere - - -5.23.14 WebGUI::HTML API Refactored - -You now need to pass in a reference to $session to the makeAbsolute and -processReplacements functions. - -perl -pi.bak -e 's!WebGUI\:\:HTML\:\:makeAbsolute\(!WebGUI::HTML::makeAbsolute(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:HTML\:\:processReplacements\(!WebGUI::HTML::processReplacements(\$self->session,!g' fileNameGoesHere - - -5.23.15 WebGUI::HTMLForm API Refactored - -You now need to pass in a reference to session to the constructor. - -perl -pi.bak -e 's!WebGUI\:\:HTMLForm\-\>new\(!WebGUI::HTMLForm->new(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:HTMLForm\-\>new\;!WebGUI::HTMLForm->new(\$self->session);!g' fileNameGoesHere - - -5.23.15 WebGUI::Icon API Refactored - -WebGUI::Icon is now accessible through $session->icon. - -perl -pi.bak -e 's!WebGUI\:\:Icon\:\:(\w+)Icon\(!\$self->session->icon->$1(!g' fileNameGoesHere -perl -pi.bak -e 's!(help|become|cut|copy|delete|edit|manage|moveBottom|moveDown|moveLeft|moveRight|moveTop|moveUp|locked|drag|shortcut|paste|view|export)Icon\(!\$self->session->icon->$1(!g' fileNameGoesHere - - -5.23.16 WebGUI::Id API Refactored - -WebGUI::Id is now accessible through $session->id - -perl -pi.bak -e 's!WebGUI\:\:Id\:\:generate!\$self->session->id->generate!g' fileNameGoesHere - - -5.23.17 WebGUI::LDAPLink API Refactored - -WebGUI::LDAPLink has been modified to use the new session api. - -perl -pi.bak -e 's!WebGUI\:\:LDAPLink\-\>new\(!WebGUI::LDAPLink->new(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:LDAPLink\:\:getList\(!WebGUI::LDAPLink->getList(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:LDAPLink\:\:get\((.*)\)!WebGUI::LDAPLink->new(\$self->session,$1)->get!g' fileNameGoesHere - - -5.23.18 WebGUI::Paginator API Refactored - -WebGUI::Paginator API was changed to use the new session API. - -perl -pi.bak -e 's!WebGUI\:\:Paginator\-\>new\(!WebGUI::Paginator->new(\$self->session,!g' fileNameGoesHere - - -5.23.19 WebGUI::Product API Refactored - -WebGUI::Product now accepts session in the constructor. - -perl -pi.bak -e 's!WebGUI\:\:Product\-\>new\(!WebGUI::Product->new(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Product\-\>getByOptionId\(!WebGUI::Product->getByOptionId(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Product\-\>getByParameterId\(!WebGUI::Product->getByParameterId(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Product\-\>getByVariantId\(!WebGUI::Product->getByVariantId(\$self->session,!g' fileNameGoesHere - - -5.23.20 WebGUI::ProfileCategory and WebGUI::ProfileField Refactored - -These API's now accept session in their constructors. - -perl -pi.bak -e 's!WebGUI\:\:ProfileCategory\-\>new\(!WebGUI::ProfileCategory->new(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:ProfileCategory\-\>create\(!WebGUI::ProfileCategory->create(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:ProfileField\-\>new\(!WebGUI::ProfileField->new(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:ProfileField\-\>create\(!WebGUI::ProfileField->create(\$self->session,!g' fileNameGoesHere - - -5.23.21 WebGUI::Storage API Refactored - -The WebGUI::Storage API has been refactored to accept $session in it's -constructors. - -perl -pi.bak -e 's!WebGUI\:\:Storage\-\>get\(!WebGUI::Storage->get(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Storage\-\>create\(!WebGUI::Storage->create(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Storage\:\:Image\-\>get\(!WebGUI::Storage::Image->get(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Storage\:\:Image\-\>create\(!WebGUI::Storage::Image->create(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Storage\-\>createTemp\(!WebGUI::Storage->createTemp(\$self->session,!g' fileNameGoesHere -perl -pi.bak -e 's!WebGUI\:\:Storage\:\:Image\-\>createTemp\(!WebGUI::Storage::Image->createTemp(\$self->session,!g' fileNameGoesHere - - -5.23.22 WebGUI::Subscription API Refactored - -perl -pi.bak -e 's!WebGUI\:\:Subscription\-\>new\(!WebGUI::Subscription->new(\$self->session,!g' fileNameGoesHere - - -5.23.23 WebGUI::TabForm API Refactored - -perl -pi.bak -e 's!WebGUI\:\:TabForm\-\>new\(!WebGUI::TabForm->new(\$self->session,!g' fileNameGoesHere - - -5.23.24 WebGUI::International API Refactored - -The WebGUI::Paginator API was changed to use the session API, and was -changed to be solely object oriented, where before it would work in -either subroutine or OO modes. The latter change precludes writing -a script to make the changes. - -The changes are summarized here. For complete details, please read the POD -documentation in lib/WebGUI/International.pm - -WebGUI::International::get('key','namespace'); - my $i18n = WebGUI::International->new($session, 'namespace'); - $i18n->get('key'); - -WebGUI::International::getLanguage('English', 'property'); - my $i18n = WebGUI::International->new($session); - $i18n->getLanguage('key'); - -WebGUI::International::getLanguages(); - my $i18n = WebGUI::International->new($session); - $i18n->getLanguages(); - - -5.24 WebGUI::Mail Replaced - -The aging WebGUI::Mail package has been replaced with WebGUI::Mail::Send, -which has an object oriented API, and is capable of sending attachments, HTML -messages, and to multiple recipients, unlike WebGUI::Mail. Please see the API -for details. - - -5.25 WebGUI::MessageLog Replaced - -IN 6.99 the venerable WebGUI::MessageLog has been retired and replaced with -WebGUI::Inbox, which has an object oriented API, is more resource efficient, -is more flexible, is more reliable, and is compliant with the new mail system. - - - -6. Automatic list of Assets in Help System. -------------------------------------- -6.1 Starting in WebGUI 6.7, there is now an automatic list of all Assets -in each site's WebGUI configuration file. For this to work correctly, -each Asset should have a Help entry named "assetName add/edit". - - -7. Group Membership -------------------------------------- -Starting in WebGUI 7.0, there are several change to how group membership -works. The biggest change is that there are two methods for getting -the users in a group. - -$group->getUsers will return all users who have are members via the WebGUI API. - -$group->getAllUsers will return a list of all users who are members of the -current group or any of its subgroups via _any_ method. Previously, there -was no way to get a complete list of all users, and you had to request -a recursive fetch of users. getAllUsers is always recursive. - -So basically, you will want to convert your code to use getAllUsers instead -of getUsers. - -Next, there has been a long standing bug in WebGUI regarding the -dbCacheTimeout group property. It didn't work as a timeout, but rather -as an expiration property for adding users to groups via database queries -AND LDAP. In WebGUI 7.0, this property has been renamed groupCacheTimeout -and it actually functions as a cache timeout. Note that the timeout may -extend the amount of time that a member is in a group, so don't set an -arbitrarily long timeout. - diff --git a/docs/upgrades/upgrade_6.8.8-6.99.0.pl b/docs/upgrades/upgrade_6.8.8-6.99.0.pl index ae7b899a1..a012c8e6d 100644 --- a/docs/upgrades/upgrade_6.8.8-6.99.0.pl +++ b/docs/upgrades/upgrade_6.8.8-6.99.0.pl @@ -877,6 +877,7 @@ sub templateParsers { #------------------------------------------------- sub removeFiles { print "\tRemoving old unneeded files.\n" unless ($quiet); + unlink '../migration.txt'; unlink '../../lib/WebGUI/Help/Macro_StyleSheet.pm'; unlink '../../lib/WebGUI/Help/Macro_JavaScript.pm'; unlink '../../lib/WebGUI/Help/Macro_RawHeadTags.pm'; diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index eb58de9e2..6eaa3c708 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -795,7 +795,7 @@ sub getBadgeSelector { } } $js = ''; %options = (%options,%{$badges}); $output .= WebGUI::Form::selectBox($self->session,{ diff --git a/lib/WebGUI/AssetPackage.pm b/lib/WebGUI/AssetPackage.pm index 8c81d5da5..f6f595356 100644 --- a/lib/WebGUI/AssetPackage.pm +++ b/lib/WebGUI/AssetPackage.pm @@ -65,7 +65,7 @@ sub exportPackage { my $storage = WebGUI::Storage->createTemp($self->session); foreach my $asset (@{$self->getLineage(["self","descendants"],{returnObjects=>1})}) { my $data = $asset->exportAssetData; - $storage->addFileFromScalar($data->{properties}{lineage}.".json", JSON::objToJson($data)); + $storage->addFileFromScalar($data->{properties}{lineage}.".json", JSON::objToJson($data,{pretty => 1, indent => 4, autoconv=>0, skipinvalid=>1})); foreach my $storageId (@{$data->{storage}}) { my $assetStorage = WebGUI::Storage->get($self->session, $storageId); $assetStorage->tar($storageId.".storage", $storage); diff --git a/lib/WebGUI/Config.pm b/lib/WebGUI/Config.pm index e8fdccdfa..d2c225266 100644 --- a/lib/WebGUI/Config.pm +++ b/lib/WebGUI/Config.pm @@ -133,7 +133,7 @@ sub delete { my $param = shift; delete $self->{_config}{$param}; open(FILE,">".$self->getWebguiRoot.'/etc/'.$self->getFilename); - print FILE "# config-file-type: JSON 1\n".objToJson($self->{_config}, {pretty => 1, indent => 2}); + print FILE "# config-file-type: JSON 1\n".objToJson($self->{_config}, {pretty => 1, indent => 4, autoconv=>0, skipinvalid=>1}); close(FILE); } @@ -376,7 +376,7 @@ sub set { my $value = shift; $self->{_config}{$param} = $value; open(FILE,">".$self->getWebguiRoot.'/etc/'.$self->getFilename); - print FILE "# config-file-type: JSON 1\n".objToJson($self->{_config}, {pretty => 1, indent => 2}); + print FILE "# config-file-type: JSON 1\n".objToJson($self->{_config}, {pretty => 1, indent => 4, autoconv=>0, skipinvalid=>1}); close(FILE); } diff --git a/lib/WebGUI/Session/ErrorHandler.pm b/lib/WebGUI/Session/ErrorHandler.pm index 38d6a7f12..0fa717242 100644 --- a/lib/WebGUI/Session/ErrorHandler.pm +++ b/lib/WebGUI/Session/ErrorHandler.pm @@ -403,7 +403,7 @@ sub showDebug { $text = $self->session->stow->get('debug_info'); $text =~ s/\n/\
\n/g; $output .= '
'.$text."
\n"; - $text = JSON::objToJson($self->session->form->paramsHashRef(), {pretty=>1, indent=>4}); + $text = JSON::objToJson($self->session->form->paramsHashRef(), {pretty => 1, indent => 4, autoconv=>0, skipinvalid=>1}); $text =~ s/&/&/xsg; $text =~ s/>/>/xsg; $text =~ s/generate(); - } return $id; } diff --git a/lib/WebGUI/Workflow/Cron.pm b/lib/WebGUI/Workflow/Cron.pm index 51f0835b2..bb3448e1b 100644 --- a/lib/WebGUI/Workflow/Cron.pm +++ b/lib/WebGUI/Workflow/Cron.pm @@ -278,7 +278,7 @@ sub set { $self->{_data}{className} = (exists $properties->{className}) ? $properties->{className} : $self->{_data}{className}; $self->{_data}{methodName} = (exists $properties->{methodName}) ? $properties->{methodName} : $self->{_data}{methodName}; if (exists $properties->{parameters}) { - $self->{_data}{parameters} = JSON::objToJson({parameters => $properties->{parameters}}); + $self->{_data}{parameters} = JSON::objToJson({parameters => $properties->{parameters}},{pretty => 1, indent => 4, autoconv=>0, skipinvalid=>1}); } $self->{_data}{enabled} = 0 unless ($self->{_data}{workflowId}); my $spectre = WebGUI::Workflow::Spectre->new($self->session); diff --git a/lib/WebGUI/Workflow/Instance.pm b/lib/WebGUI/Workflow/Instance.pm index 418fbdbfe..d70dbea2f 100644 --- a/lib/WebGUI/Workflow/Instance.pm +++ b/lib/WebGUI/Workflow/Instance.pm @@ -59,7 +59,7 @@ sub create { my $session = shift; my $properties = shift; my ($isSingleton) = $session->db->quickArray("select isSingleton from Workflow where workflowId=?",[$properties->{workflowId}]); - my $params = (exists $properties->{parameters}) ? JSON::objToJson({parameters => $properties->{parameters}}) : undef; + my $params = (exists $properties->{parameters}) ? JSON::objToJson({parameters => $properties->{parameters}}, {pretty => 1, indent => 4, autoconv=>0, skipinvalid=>1}) : undef; my ($count) = $session->db->quickArray("select count(*) from WorkflowInstance where workflowId=? and parameters=?",[$properties->{workflowId},$params]); return undef if ($isSingleton && $count); my $instanceId = $session->db->setRow("WorkflowInstance","instanceId",{instanceId=>"new", runningSince=>time()}); @@ -366,7 +366,7 @@ sub set { $self->{_data}{className} = (exists $properties->{className}) ? $properties->{className} : $self->{_data}{className}; $self->{_data}{methodName} = (exists $properties->{methodName}) ? $properties->{methodName} : $self->{_data}{methodName}; if (exists $properties->{parameters}) { - $self->{_data}{parameters} = JSON::objToJson({parameters => $properties->{parameters}}); + $self->{_data}{parameters} = JSON::objToJson({parameters => $properties->{parameters}}, {pretty => 1, indent => 4, autoconv=>0, skipinvalid=>1}); } $self->{_data}{currentActivityId} = (exists $properties->{currentActivityId}) ? $properties->{currentActivityId} : $self->{_data}{currentActivityId}; $self->{_data}{lastUpdate} = time(); diff --git a/sbin/upgrade.pl b/sbin/upgrade.pl index 81a28d43c..be8448994 100644 --- a/sbin/upgrade.pl +++ b/sbin/upgrade.pl @@ -421,6 +421,6 @@ sub convertPlainconfigToJson { $config{$param} = $value; } open(FILE,">".$configFile); - print FILE "# config-file-type: JSON 1\n".objToJson(\%config, {pretty => 1, indent => 2}); + print FILE "# config-file-type: JSON 1\n".objToJson(\%config, {pretty => 1, indent => 4, autoconv=>0, skipinvalid=>1}); close(FILE); }