Archive for January, 2008

P4A 3 commit digest

Hi to all and welcome to the P4A 3 commit digest of this week :-)

Let’s start saying that I worked a lot porting to PHP5 all P4A core objects and widgets (the only one left behind is the db_navigator, I’ll work on it soon) so now we finally have a full PHP5 code, I still need to work on strict validation but most of the work is done. Having a full PHP5 code raised some bugs, cause we sometimes used to access to private variables from outside an object and this is not possible anymore, so I’ve added a few methods and patched some code, now everything is a lot more clean. I also fixed some small graphical issues with P4A_Buttons within toolbars. I also worked a bit on making P4A work with oracle, we’re almost there :) Then I added a new and improved version of P4A_Base_Mask (which uses system messages instead of P4A_Messages) to the core and ported the products_catalogue application to it, doing that made me remove a lot of code, all now is clean and much more readable. I also put a definitive fix to the addslashes issue, we add some getSQLvalue() methods within P4A, now they use the “double single quote” instead of addslashes, this is the right SQL behaviour and anyway addslashes has been marked deprecated within PHP.

These were a few things I wanted to point out, now let’s take a look at the changelog:

- P4A::init() method was removed
- helpers, P4A_Box, P4A_Object, P4A_Button, P4A_Collection, P4A_Field, P4A_Array_Source, P4A_DB_Source, P4A_Widget, P4A_Mask, P4A, P4A_Frame, P4A_Fieldset, P4A_Label, P4A_Line, P4A_Link, P4A_Menu, P4A_Menu_Item and P4A_Canvas were php5ized
- P4A_Widget::composeStringClassStyle() was rewritten and renamed to composeStringClass()
- P4A_Toolbar default size is now 32
- P4A_Button now inherits height from toolbar (just done via CSS)
- P4A_Mask::setIcon() now supports a path to an image instead of the icon name
- P4A_Fieldset::setTitle() and getTitle() methods were removed cause deprecated, use setLabel() and getLabel() instead
- P4A::getPopupMask() and getPopupMaskName() methods were added
- P4A_Mask::getFocusedObjectId() method was added
- P4A_Link::setLabel() method was removed ’cause inherited from P4A_Widget
- P4A_Menu_Item::setAccessKey() and getAccessKey() methods were removed ’cause inherited from P4A_Widget
- P4A_Table::addToolbar() and newToolbar() methods were removed ’cause not implemented
- P4A_Table::addNavigationBar() method was removed
- P4A_Menu_Item::setIcon() now supports a path to an image instead of the icon name
- P4A_Sheet was removed ’cause had too many performance issues and it should be rewritten
- FCKEditor was updated to 2.5.1
- “oracle” was renamed to “oci” within P4A_DB to reflect PDO naming
- P4A_DB_Source::setSchema() and getSchema() methods were added
- some minor bugfixes to P4A_DB_Source were applied in order to make oracle work
- P4A_Generate_Default_Label() global function now turns the original label lowercase before applying the default rules, this is due for databases which returns uppercase field names
- a new version of P4A_Base_Mask was added to the core
- “products catalogue” sample app was ported to P4A_Base_Mask
- sample_en, sample_it and sample_i18n applications were removed
- some minor enhancements were made to products_catalogue sample
- P4A_Widget::intercept() and implementMethod() methods now automatically call the addAction() method when the event is recognized as a browser event
- P4A_Data_Field::getSQLValue() and getSQLNewValue() now returns data quoted with “double single quote” instead using addslashes (which is deprecated and not working for oracle)
- P4A_Object::dropIntercept() method was removed
- P4A_Object::dropMethod() method was added
- P4A_Object::destroy() method now does not unset the variable from parent but sets it to null
- a bug with P4A_Object::destroy() was solved, it happened when destroying an object directly stored in the $p4a object

Now, my TODO is getting thinner and, if I’ll have time, we could have a sort of preview release in a few weeks, anyway:

- implement application level translations
- port products_catalogue to the new translation system
- change p4a_table_col image handling, we’ve to pass by index.php and not phpthumb.php
- implement p4a_table::addCheckboxCol
- p4a_table action col should also support html (for images)
- implement errors with exceptions
- redo the css
- check if p4a_validate can be ported to ZF, maybe drop p4a_validate, add a valitator to p4a_field, user could add a ZF validator object to the field
- php5ize db_navigator

as you can see, some things are new features, some others are tasks for the sample applications… this means we’ve almost completed our work also if I know I got to check other few things within the P4A 3 core programming. Anyway see you next week with a new digest :-)

Share/bookmark:
Digg StumbleUpon Facebook Reddit Mixx del.icio.us Google Live NewsVine

How to install PHP PDO_OCI on Ubuntu Gutsy

1) prerequisites

First of all we’ll install the php5-dev package which contains some utilities we’ll need for the build process:

sudo apt-get install php5-dev

then you’ve to find out your ORACLE_HOME environment variable, try executing:

env | grep ORACLE_HOME=

If this command outputs something like:

ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server

then you can jump to section “2) Getting and compiling PDO_OCI” otherwise go on thru this section.

If this guide we’ll just see how to find out which is your ORACLE_HOME directory if you’ve installed the oracle-xe server package. If you’ve installed instantclient or anything else please refer to the product documentation. So you’ve an installed and configured oracle-xe instance on your machine, now type:

cat /etc/init.d/oracle-xe |grep ORACLE_HOME=

the command should print something like:

ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server

now we’ve to export this variable to the current terminal session, we’ll do that with this command:

export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server

and the environment variable will be configured.

2) Getting and compiling PDO_OCI

Just cut and paste these simple commands to download PDO_OCI from the web and prepare it for the build phase:

cd /tmp
pecl download pdo_oci
tar xvfz PDO_OCI-1.0.tgz
cd PDO_OCI-1.0
phpize
mkdir include
ln -s /usr/include/php5/ include/php

now everything should be setup and we can build the driver and install it with:

make && make install

If everything is fine you can continue

3) Configuring PHP and Apache

if everything is fine you can go on editing your php.ini file and adding this line:

extension=pdo_oci.so

now create a phpinfo.php file under your apache’s document root, containing this line:

<?php phpinfo();

point your browser to:

http://localhost/phpinfo.php

and search for the “environment” section, it should look like the one in the next screenshot:
environment variables
if you see the ORACLE_HOME line everything it’s ok, jump to the “4) Closure” section otherwise edit /etc/apache2/envvars file and add the ORACLE_HOME configuration, it will be something like this (on a single line):

export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server

4) Closure

Restart your apache and you’re done:

sudo /etc/init.d/apache2 restart

Share/bookmark:
Digg StumbleUpon Facebook Reddit Mixx del.icio.us Google Live NewsVine

P4A 3 commit digest

First technical post on the new blog, as usual 10% of the code take 90% of work, for this commit I spent a lot of time trying to get a final solution for a cross browser message rendering issue (we wanted an icon with a text on the right, both vertically centered). I also unified the generated HTML code for buttons, P4A_Message and system messages. Then I moved my attention on a better pngfix routine for explorer 6, port some P4A elements to PHP 5 and clean up the API a bit (removing some methods with really weird names)

Here you have a screenshot of the new button with a long label (note that the accesskey is underlined):
P4A 3 new button layout

and here you can see the new system message, with icons and long descriptions (you can’t see it but it has a nice fade-in fade-out effect):
P4A 3 system messages

Time for the raw changelog:

- P4A_DB_Source::setQuery() was rewritten and now it’s works again
- jQuery was updated to 1.2.2
- javascript code for P4A system messages was rewritten from scratch
- P4A_Message and P4A_Tab_Pane were php5ized
- P4A_Tab_Pane::setActivePage() method now returns the active page
- P4A_Tab_Pane::nextPage() method now returns the active page
- P4A_Message::setIcon() now supports a path to an image instead of the icon name
- P4A_Message and p4a->message HTML/CSS was unified
- jQuery UI datepicker CSS was reworked
- P4A_Generate_Widget_Layout_Table() global function was added to P4A’s standard library, this creates an HTML table (1row, 2cols) useful when you’ve to output an image on a col and a text on the other col
- HTML output for P4A_Message, P4A system messages and P4A_Button was rewritten using HTML tables because we need users to have the same browsing experience on all browsers
- P4A’s javascript PNG fix routine was dropped
- jQuery::iFixPng 1.7 was introduced
- P4A_THEMES_PATH and P4A_THEMES_DIR constants were dropped
- P4A_Field::noAllowNull() method was removed
- P4A_Field::allowNull() method now supports passing the “false” value to disable the feature
- P4A_Field::unsetUploadSubpath() method was removed, use setUploadSubpath(null) to disable the feature
- P4A_Field::unsetMaxThumbnailSize() method was removed, use setMaxThumbnailSize(null) to disable the feature
- P4A_Field::setRichTextareaToolbar(), getRichTextareaToolbar() and getRichTextareaToolbars() were removed because unsupported by fckeditor
- P4A_Field was php5ized

See you at the next digest :-)

Share/bookmark:
Digg StumbleUpon Facebook Reddit Mixx del.icio.us Google Live NewsVine

New website :-)

My blog finally have a new home :-)

I decided to move ’cause I wanted to change the graphic theme and to be able to modify it a bit to fit my few specific needs. I could also install the addthis plugin, at least I won’t have to generate/copy/paste the “digg this” HTML code for every post… little things that can bring a lot of satisfaction :-)

Working on the new blog took me a few days, that’s why I haven’t post anything last week, now I still have to fix something but I’ll restart posting about the usual things (actually will be p4a).

ok, back to work, see you soon!

Share/bookmark:
Digg StumbleUpon Facebook Reddit Mixx del.icio.us Google Live NewsVine

P4A 3 massive commit, cleaning is started

Let’s start highlighting the most important parts of this huge commit:

  • P4A system messages were introduced, now from everywhere in your application you can simply do p4a::singleton()->message(“this is a message”) and your text will be printed to the user with a nice floating panel that will disappear after a few seconds. Now you won’t have to instance P4A_Message anymore and you won’t have the scrolling effect hat P4A_Message has, your mask will remain in the same exact position and the messages will scroll down and disappear. This new feature allows you to output multiple messages, not only one, they’re managed as a queue and they also work during an ajax call.
  • numbers/date formatting issue is finally over. Using P4A < 3 was very hard to create a custom formatter for numers and dates, now when P4A_Field is going to execute a format (or normalize) operation, the onFormat (or onNormalize) event is fired. When you want to do custom formatting/normalization simply intercept the new events and, within your interceptor method, return the formatted or normalized values.
  • P4A now autodetecs the number of decimals from database and uses it within the formatting/normalizing routines by default
  • cleaning is started, some methods/classes/files were dropped or renamed, we need to provide the best API possible, thus we’ve to clean out some old things are give anything the right name to let coders understand everything the easy way

And now the complete changelog for this commit:

- P4A_DB::setSelect() was removed
- P4A_DB_Source and P4A_Data_Source were php5ized
- P4A_DB_Source::__sleep() was turned into __wakeup()
- P4A_Data_Field::setSchema() and getSchema() methods were added
- P4A_DB_Source::getFieldName() now returns “schema.table.field” and can accept “schema.table.field” as a param
- P4A_DB::getLikeOperator() and setLikeOperator() methods were dropped, they were not flexible enough to handle all DB insensitive “like” syntax
- P4A_DB::getCaseInsensitiveLikeSQL() method was added
- P4A_Field::setFormat(), unsetFormat(), cleanNewValue() methods were removed
- P4A_Object::actionHandler() methods now supports unlimited params instead of only one
- P4A_Field now triggers onFormat and onNormalize events you can intercept to do custom format/normalize (your method must return the formatted/normalized value)
- P4A_Field::unformat() method was renamed to normalize()
- P4A_Field::getUnformattedNewValue() was renamed to getNormalizedNewValue()
- P4A_Data_Field::setNumOfDecimals() and getNumOfDecimals() methods were added
- P4A_Field::createDataField() methods now automatically calls P4A_Data_Field::setNumOfDecimals() setting the number of decimals detected from the DB structure
- P4A_I18N::format() method now has a third param “num_of_decimals”, used only if type is float or decimal
- P4A_Field::format() method now uses the P4A_Data_Field->getNumOfDecimals() to automatically format numbers the most coherent way
- P4A::message() method was added, you can use it to print out messages to users without having to instance any P4A_Message
- P4A::getMessages() method was added to read and clean the messages queue
- P4A::getMessages() method is now used to print out messages to users in a nice way
- P4A_Field::setFormatted() and unsetFormatted() methods were removed, now you can use only isFormatted(true/false)
- P4A_Field::getStringValue() method was removed
- P4A_Standard_Toolbar strange behaviour that automatically disables some buttons one certain conditions was removed
- P4A_Standard_Toolbar was renamed to P4A_Full_Toolbar
- P4A_AUTO_MAXLENGTH constant was removed because its feauture was troubleful
- P4A_Field::getAutoMaxLength() method was removed
- include.php file content was moved to p4a.php and include.php file was removed
- config.php file was renamed to constants.php, config makes users think they can change it but it should never be modified

My TODO list is changing so fast that I’m not goin’ to post it now, anyway we all know the most important tasks… :)
See you very soon!

Share/bookmark:
Digg StumbleUpon Facebook Reddit Mixx del.icio.us Google Live NewsVine

P4A 2.2.3 is out, third maintenance release for 2.2 branch

The changelog for this release is really short:

- a bug with P4A_Label was fixed (“for” property was erroneous with radio and file P4A_Field)
- ajax file upload was disabled due to a strange bug we hope to solve with future releases of jQuery and its “form” module

but the file upload bug was really tricky.
Download P4A 2.2.3

Share/bookmark:
Digg StumbleUpon Facebook Reddit Mixx del.icio.us Google Live NewsVine

P4A 3 translations opening and waiting for you

Now that the new P4A 3 translation system is finished, I finally took some time to import all P4A 2.2 translations into our new and shining community localization system.

You can have a complete look at the translation status, fix possible translation errors for your language as well as adding your language here:
https://translations.launchpad.net/p4a/trunk/+pots/p4a

Now, we really want P4A to have the best translations possible but we need your help, translating is very easy and won’t take more than a few minutes. Thank you to everyone will help us delivering the most wonderful translations for your next generation web applications!

Share/bookmark:
Digg StumbleUpon Facebook Reddit Mixx del.icio.us Google Live NewsVine