[ Index ]
 

Code source de eGroupWare 1.2.106-2

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/setup/doc/ -> setup3.lyx (source)

   1  #LyX 1.1 created this file. For more info see http://www.lyx.org/
   2  \lyxformat 218
   3  \textclass docbook
   4  \begin_preamble
   5  <!entity header system "header.sgml">
   6  \end_preamble
   7  \language english
   8  \inputencoding default
   9  \fontscheme default
  10  \graphics dvips
  11  \paperfontsize default
  12  \spacing single 
  13  \papersize Default
  14  \paperpackage a4
  15  \use_geometry 0
  16  \use_amsmath 0
  17  \paperorientation portrait
  18  \secnumdepth 3
  19  \tocdepth 3
  20  \paragraph_separation indent
  21  \defskip smallskip
  22  \quotes_language english
  23  \quotes_times 2
  24  \papercolumns 1
  25  \papersides 1
  26  \paperpagestyle default
  27  
  28  \layout Title
  29  \added_space_top vfill \added_space_bottom vfill 
  30  eGroupWare Setup
  31  \layout Date
  32  
  33  June 18, 2001 
  34  \layout Author
  35  
  36  
  37  \latex latex 
  38  <firstname>Miles</firstname> <surname>Lott</surname>
  39  \layout Abstract
  40  
  41  A developer introduction to using the next generation setup application
  42   for egroupware.
  43  \layout Section
  44  
  45  Introduction
  46  \layout Subsection
  47  
  48  Welcome
  49  \layout Standard
  50  
  51  
  52  \series medium 
  53  Thanks for taking the time to look over this document.
  54   If you are a developer who is new to egroupware, this document will be
  55   invaluable to your success during the life of your application.
  56   This is in addition to the other fine documentation available in the phpgwapi/d
  57  oc directory in your install.
  58   Even long-time phpgw developers should benefit this document.
  59   Herein, I will attempt to outline the critical steps required in order
  60   to get along with setup3, setup-TNG, or whatever we end up calling it (Hey,
  61   how about 'setup'?)
  62  \layout Subsection
  63  
  64  Overview
  65  \layout Standard
  66  
  67  
  68  \series medium 
  69  With setup3, we introduce several new capabilities and technologies for
  70   the developer and end user alike.
  71   Michael Dean was kind enough to offer up schema_proc to form the core of
  72   an abstracted and database-independent upgrade process.
  73   This enables developers to write a single set of upgrades and table definitions
  74  , which should then work on MySQL and PostgreSQL, or any other database
  75   type we might add in the future.
  76  \layout Standard
  77  
  78  
  79  \series medium 
  80  Adding to this to control the process was a good chunk of the old setup
  81   program, written by Dan Kuykendall (Seek3r).
  82   Dan had everything to do with the new dependencies support and with the
  83   format of the $setup_info array in setup3.
  84  \layout Standard
  85  
  86  
  87  \series medium 
  88  Setup3 adds multi-language support for the setup application, a long missed
  89   feature, I would imagine.
  90  \layout Standard
  91  
  92  
  93  \series medium 
  94  Setup3 gives each application developer control over their application install
  95   and upgrade processes, while giving them access to work within a realm
  96   formerly owned by only the former core egroupware applications.
  97   Yes, this is extra work for the developer.
  98   But it is hoped that setup3 is also viewed as a tool that can truly enhance
  99   the development process
 100  \series default 
 101  .
 102  \layout Standard
 103  
 104  
 105  \series medium 
 106  OK.
 107   Let's dive right in...
 108  \layout Section
 109  
 110  Application setup files
 111  \layout Standard
 112  
 113  The files in this section are contained within each application/setup directory.
 114   Every app will some of these files in order to operate with setup3.
 115  \layout Subsection
 116  
 117  setup.inc.php (Required)
 118  \layout Subsubsection
 119  
 120  Basic information
 121  \layout Standard
 122  
 123  
 124  \series bold 
 125  The values in this section must be used by all applications.
 126  \layout Standard
 127  
 128  
 129  \series medium 
 130  The first section of setup.inc.php defines the very basic and yet critical
 131   information about the app
 132  \series default 
 133  lication
 134  \series medium 
 135  .
 136   Take a look at the following section:
 137  \layout Code
 138  
 139  
 140  \series medium 
 141  $setup_info['addressbook']['name'] = 'addressbook';
 142  \layout Code
 143  
 144  $setup_info['addressbook']['title'] = 'Addressbook';
 145  \layout Code
 146  
 147  $setup_info['addressbook']['version'] = '0.9.13.002';
 148  \layout Code
 149  
 150  $setup_info['addressbook']['app_order'] = 4;
 151  \layout Code
 152  
 153  $setup_info['addressbook']['enable'] = 1;
 154  \layout Standard
 155  
 156  
 157  \series medium 
 158  'name' is used throughout egroupware, typically in $phpgw_info flags such
 159   as 'currentapp' or as the 'app_name' almost everywhere else.
 160  \layout Standard
 161  
 162  
 163  \series medium 
 164  'title' would be used in the navbar, admin, preferences, as well as in the
 165   application itself.
 166  \layout Standard
 167  
 168  
 169  \series medium 
 170  The 'version' string defines the version of the application and table code.
 171   This would be incremented whenever you create a new upgrade function, and
 172   typically only for table modifications.
 173   If the change is significant from the last code update, you could increment
 174   this here also.
 175   Incrementing this version string is not trivial, so please do read the
 176   rest of this document for more information about that.
 177  \layout Standard
 178  
 179  
 180  \series medium 
 181  'app_order' determines the order of applications in the navbar.
 182   If the number you set here is the same as is set for another app, the app
 183   whose 'name' is first in the English alphabet would appear first.
 184   Smaller numbers show closer to the top or left end of the navbar, depending
 185   upon the layout.
 186  \layout Standard
 187  
 188  
 189  \series medium 
 190  The 'enable' string is used by the egroupware API to determine whether
 191   an application is disabled, enabled, or enabled but hidden from the navbar.
 192   Most applications will want this set to a value of 1 (enabled).
 193   The notifywindow app sets this to 2, which keeps it off the navbar.
 194   An enable of 0 would disable the app by default.
 195   There is one other special case, 3, which is used primarily by the API
 196   itself.
 197   From the perspective of setup3, the API is an application just like any
 198   other application.
 199   By setting the 'enable' flag to 3, the API is still enabled, but will not
 200   be assignable to a user as a real application.
 201   It will thereby be hidden from the admin for application and user/group
 202   editing.
 203  \layout Subsubsection
 204  
 205  Table info
 206  \layout Paragraph
 207  
 208  Only applications with database tables will use entries in this section.
 209  \layout Standard
 210  
 211  
 212  \series medium 
 213  The next section of $setup_info values is an array defining all of the applicati
 214  on's database tables:
 215  \layout Code
 216  
 217  
 218  \series medium 
 219  $setup_info['addressbook']['tables'] = array(
 220  \layout Code
 221  
 222      
 223  \series medium 
 224  'phpgw_addressbook',
 225  \layout Code
 226  
 227      
 228  \series medium 
 229  'phpgw_addressbook_extra'
 230  \layout Code
 231  
 232  
 233  \series medium 
 234  );
 235  \layout Standard
 236  
 237  
 238  \series medium 
 239  This is a simple array, and must list accurately the current table names
 240   you are using in your application.
 241   This list will match a much more complex array of table specifications,
 242   as you will see below.
 243  \layout Subsubsection
 244  
 245  Hooks
 246  \layout Paragraph
 247  
 248  Some applications will use this section.
 249  \layout Standard
 250  
 251  
 252  \series medium 
 253  The hooks array part of $setup_info contains a simple list of hooks the
 254   application will use:
 255  \layout Code
 256  
 257  
 258  \series medium 
 259  $setup_info['addressbook']['hooks'][] = 'preferences';
 260  \layout Code
 261  
 262  
 263  \series medium 
 264  $setup_info['addressbook']['hooks'][] = 'admin';
 265  \layout Standard
 266  
 267  
 268  \series medium 
 269  Here we also note a different method of 'stuffing the array.' In any case,
 270   this list of hooks will be required soon in order for your hook_admin.inc.php
 271   and other files to work.
 272   This is being done to cut down on the manual directory listing and file_exists
 273   loops done currently to discover hook files.
 274   Other than 'preferences' and 'admin', 'home', 'manual', 'after_navbar'
 275   and 'navbar_end' are all valid hook entries.
 276  \layout Subsubsection
 277  
 278  Dependencies
 279  \layout Paragraph
 280  
 281  All applications will have at least one entry here.
 282  \layout Standard
 283  
 284  
 285  \series medium 
 286  The final section, or array of data, is a listing of the other applications
 287   your application requires in order to function:
 288  \layout Code
 289  
 290  
 291  \series medium 
 292  $setup_info['addressbook']['depends'][] = array(
 293  \layout Code
 294  
 295      
 296  \series medium 
 297  'appname' => 'phpgwapi', 
 298  \layout Code
 299  
 300      
 301  \series medium 
 302  'versions' => Array(
 303  \layout Code
 304  
 305          
 306  \series medium 
 307  '0.9.10',
 308  \layout Code
 309  
 310          
 311  \series medium 
 312  '0.9.11',
 313  \layout Code
 314  
 315          
 316  \series medium 
 317  '0.9.12',
 318  \layout Code
 319  
 320          
 321  \series medium 
 322  '0.9.13'
 323  \layout Code
 324  
 325      
 326  \series medium 
 327  ) 
 328  \layout Code
 329  
 330  
 331  \series medium 
 332  );
 333  \layout Standard
 334  
 335  
 336  \series medium 
 337  This is the standard dependency array for all egroupware applications.
 338   It states that this application requires the phpgwapi, and lists the versions
 339   with which versions this app is compatible.
 340   This list would need to be appended upon each new API release, assuming
 341   your application is compatible with this new API version.
 342   You may list other applications here, e.g.
 343   your app might depend upon 'email' in order to work properly.
 344  \layout Standard
 345  
 346  
 347  \series medium 
 348  Do 
 349  \series bold 
 350  NOT
 351  \series medium 
 352   list applications here without considering this: If you do list an application
 353   here, and your app does not really require it, your application will not
 354   install unless that other application is already installed.
 355   This is handled normally within the install/upgrade process loops, which
 356   will install only applications whose dependencies are satisfied.
 357   Using a multipass function, the applications are installed in the correct
 358   order to ensure that dependencies are resolved.
 359   In all cases, the API would be installed first in every new install or
 360   upgrade, since all applications depend on the API.
 361  \layout Subsection
 362  
 363  tables_baseline.inc.php (Recommended)
 364  \layout Subsubsection
 365  
 366  Any application that has at least one upgrade routine will have this file.
 367  \layout Standard
 368  
 369  
 370  \series medium 
 371  The tables_baseline file represents the earliest supported version of an
 372   application's tables.
 373   This file is used only in the upgrade process, and is critical to its success.
 374   It contains an array of database-independent table, field, key and index
 375   definitions.
 376  \layout Standard
 377  
 378  
 379  \series medium 
 380  This array is formatted for use by the class.schema_proc_array.inc.php file
 381   in setup3.
 382   See the 
 383  \series default 
 384  tables_update
 385  \series medium 
 386   section below for more detail about schema_proc, but for now, here is a
 387   simple table definition in this format:
 388  \layout Code
 389  
 390  
 391  \series medium 
 392  $phpgw_baseline = array(
 393  \layout Code
 394  
 395      
 396  \series medium 
 397  'skel' => array(
 398  \layout Code
 399  
 400          
 401  \series medium 
 402  'fd' => array(
 403  \layout Code
 404  
 405              
 406  \series medium 
 407  'skel_id' => array('type' => 'auto','nullable' => false),
 408  \layout Code
 409  
 410              
 411  \series medium 
 412  'skel_owner' => array('type' => 'varchar','precision' => 25),
 413  \layout Code
 414  
 415              
 416  \series medium 
 417  'skel_access' => array('type' => 'varchar','precision' => 10),
 418  \layout Code
 419  
 420              
 421  \series medium 
 422  'skel_cat' => array('type' => 'int','precision' => 4),
 423  \layout Code
 424  
 425              
 426  \series medium 
 427  'skel_des' => array('type' => 'text'),
 428  \layout Code
 429  
 430              
 431  \series medium 
 432  'skel_pri' => array('type' => 'int','precision' => 4)
 433  \layout Code
 434  
 435          
 436  \series medium 
 437  ),
 438  \layout Code
 439  
 440          
 441  \series medium 
 442  'pk' => array('skel_id'),
 443  \layout Code
 444  
 445          
 446  \series medium 
 447  'fk' => array(),
 448  \layout Code
 449  
 450          
 451  \series medium 
 452  'ix' => array(),
 453  \layout Code
 454  
 455          
 456  \series medium 
 457  'uc' => array()
 458  \layout Code
 459  
 460      
 461  \series medium 
 462  ) 
 463  \layout Code
 464  
 465  
 466  \series medium 
 467  );
 468  \layout Standard
 469  
 470  
 471  \series medium 
 472  This multi-dimensional array contains 1 subarray with 5 subs of its own.
 473   The first array ('skel' above) defines the table name.
 474   Below that are 5 sections, 'fd' for field definitions, 'pk' to define primary
 475   keys, 'fk' to define foreign keys, 'ix' to define indexed fields, and 'uc'
 476   to define columns that require unique values.
 477   In the above example, the table 'skel' has 6 fields (skel_id, skel_owner,
 478   skel_access, skel_cat, skel_des, skel_pri), and 'skel_id' is defined also
 479   as the primary key for this table.
 480   More information on this array is below.
 481   But, this format was chosen as an available solution for defining tables
 482   and fields without having to maintain seperate files for different databases.
 483  \layout Subsection
 484  
 485  tables_current.inc.php (Recommended)
 486  \layout Subsubsection
 487  
 488  All applications with tables will need this file.
 489  \layout Standard
 490  
 491  
 492  \series medium 
 493  The tables_current file defines the current table definition that matches
 494   the 'version' string in $setup_info as well as the current code.
 495   This file is used only for new installs, or whenever the application is
 496   removed and reinstalled.
 497   The format and name of the array in this file is the same as for the tables_bas
 498  eline file listed above.
 499   In fact, whenever it is required to change your table definitions, you
 500   would start by copying the current file over to become the tables_baseline
 501   file.
 502   After having created your upgrade routines, you would then recreate the
 503   current file to match the new table definitions.
 504  \layout Subsection
 505  
 506  tables_update.inc.php (Recommended)
 507  \layout Subsubsection
 508  
 509  Any application which requires an upgrade to a previous version's tables
 510   will need this file.
 511  \layout Standard
 512  
 513  
 514  \series medium 
 515  This file will be the most complex of all setup-oriented files with which
 516   you will be working.
 517   It will contain all upgrade functions capable of upgrading any possible
 518   version of your egroupware app.
 519   These upgrade routines roughly match the old setup program's upgrade functions,
 520   but the use of objects and the methods have changed dramatically.
 521   The simplest version upgrade routine would look like:
 522  \layout Code
 523  
 524  
 525  \series medium 
 526  $test[] = "0.9.3pre10";
 527  \layout Code
 528  
 529  
 530  \series medium 
 531  function addressbook_upgrade0_9_3pre10()
 532  \layout Code
 533  
 534  
 535  \series medium 
 536  {
 537  \layout Code
 538  
 539      
 540  \series medium 
 541  global $setup_info;
 542  \layout Code
 543  
 544      
 545  \series medium 
 546  $setup_info['addressbook']['currentver'] = '0.9.3';
 547  \layout Code
 548  
 549      
 550  \series medium 
 551  return $setup_info['addressbook']['currentver'];
 552  \layout Code
 553  
 554  
 555  \series medium 
 556  }
 557  \layout Standard
 558  
 559  
 560  \series medium 
 561  This upgrade function merely updates the current version number.
 562   Note that there is not only an upgrade function, but also the setting of
 563   a value in the $test array.
 564   The name 'test' is a holdover from the old setup program, and is an arbitrary
 565   choice.
 566   However, this name must be used for the upgrade process to work.
 567   Prior to each of your upgrade functions, add the value of the previous
 568   version to $test.
 569  \layout Standard
 570  
 571  
 572  \series medium 
 573  Now look at the function name.
 574   The name is important and should be structured as the application name
 575   and the version from which you are intending to upgrade.
 576   The '.'s in the version string are replaced with '_'.
 577  \layout Standard
 578  
 579  
 580  \series medium 
 581  Inside the function, we global the $setup_info array.
 582   Next, we alter the version number in that array, for our application.
 583   Please be careful to specify YOUR application name here.
 584   The very last thing we do is to return this new version to the calling
 585   function.
 586   The upgrade process relies on the value returned, since it uses this directly
 587   to determine the new version.
 588   This may appear illogical on some level, but it does work.
 589   The reason for returning this value instead of a True or 1, etc.
 590   has to do with variable scope and lifetime.
 591   In this way, even the globaling of $setup_info inside the function may
 592   have little effect on the upgrade process.
 593   But, there may be values in this array you would want to use within the
 594   function.
 595   More on that later.
 596  \layout Standard
 597  
 598  
 599  \series medium 
 600  There is one other variable you would need if doing any database operations
 601   here.
 602   If you global $phpgw_setup, you will then have access to db and schema_proc
 603   objects and functions.
 604   The objects of interest here are:
 605  \layout Itemize
 606  
 607  
 608  \series medium 
 609  $phpgw_setup->oProc
 610  \layout Itemize
 611  
 612  
 613  \series medium 
 614  $phpgw_setup->db.
 615  \layout Standard
 616  
 617  
 618  \series medium 
 619  For most database work you should use the oProc object.
 620   This also has a db object that should be used for most standard phpgw API
 621   db class functions, including $db->query, next_record, num_rows, and f.
 622   The use of these for standard db operations is critical to the upgrade
 623   process.
 624   Schema_proc has a flag that can be set to determine what mode of upgrade
 625   we are in.
 626   This flag is set in the setup class during the upgrade process, and should
 627   not be altered locally.
 628  \layout Standard
 629  
 630  
 631  \series medium 
 632  This flag is a decision on whether to alter the database or the schema_proc
 633   array.
 634   The tables_baseline file above is loaded by setup prior to running your
 635   upgrade routines.
 636   If the current installed version is greater than the current upgrade routine,
 637   we don't need to alter the database yet.
 638   But schema_proc instead alters the $phpgw_baseline array in memory.
 639   The maintenance of this array is done even when we do alter the database.
 640   Once our version number in the test array matches the currently installed
 641   version of an application, real work on the tables begins.
 642  \layout Standard
 643  
 644  
 645  \series medium 
 646  'Why bother modifying this array at all', you may ask.
 647   The array must be maintained in order to keep current table definition
 648   status.
 649   This is used in some schema_proc functions when altering columns and tables.
 650   This is especially critical for pgsql schema_proc functions.
 651  \layout Standard
 652  
 653  
 654  \series medium 
 655  By using the $phpgw_setup->oProc object for basic inserts and queries, we
 656   acheive the ability to run all upgrade functions in every upgrade cycle
 657   without actually altering the database until we reach the current version
 658   we actually want to upgrade.
 659   For example:
 660  \layout Code
 661  
 662  
 663  \series medium 
 664  $sql = "SELECT * FROM phpgw_addressbook_extra WHERE contact_name='notes'";
 665  \layout Code
 666  
 667  
 668  \series medium 
 669  $phpgw_setup->oProc->query($sql,__LINE__,__FILE__);
 670  \layout Code
 671  
 672  
 673  \series medium 
 674  while($phpgw_setup->oProc->next_record()) {
 675  \layout Standard
 676  
 677  
 678  \series medium 
 679  We could have used $phpgw_setup->db or even a copy for the above activity.
 680   However, using the above method ensures that an array only upgrade does
 681   just that.
 682   If the flag was set in setup telling schema_proc to alter the array only,
 683   we do not want to touch the tables for inserts or selects yet.
 684   In this case, $phpgw_setup->oProc->next_record() returns False, and the
 685   loop is skipped.
 686   The $phpgw_baseline array does not know about table content, only table
 687   and field definitions.
 688  \layout Standard
 689  
 690  
 691  \series medium 
 692  If the upgrade function containing this method is actually working on the
 693   tables (currentver <= the upgrade function), then next_record() is returned
 694   as the expected action of pulling the next row of data.
 695   Inside of this while loop, you can safely use $phpgw_setup->db, or preferably
 696   a copy, to do the insert/delete, etc you want to have happen here.
 697  \layout Code
 698  
 699      $cid = $phpgw_setup->oProc->f('contact_id');
 700  \layout Code
 701  
 702      $cvalu = $phpgw_setup->oProc->f('contact_value');
 703  \layout Code
 704  
 705      
 706  \series medium 
 707  $update = "UPDATE phpgw_addressbook set note='" .
 708   $cvalu .
 709   "' WHERE id=" .
 710   $cid;
 711  \layout Code
 712  
 713      
 714  \series medium 
 715  $db1->query($update);
 716  \layout Code
 717  
 718      
 719  \series medium 
 720  $delete = "DELETE FROM phpgw_addressbook_extra WHERE contact_id=" .
 721   $cid .
 722   " AND contact_name='notes'";
 723  \layout Code
 724  
 725      
 726  \series medium 
 727  $db1->query($delete);
 728  \layout Code
 729  
 730  }
 731  \layout Standard
 732  
 733  
 734  \series medium 
 735  $db1 is a copy of $phpgw_setup->db, to avoid potential conflicts with the
 736   rest of setup's db activities.
 737  \layout Standard
 738  
 739  In addition to the basic API db class functions, schema_proc introduces
 740   the following special functions:
 741  \layout Code
 742  
 743  function DropTable($sTableName)
 744  \layout Code
 745  
 746  function DropColumn($sTableName, $aTableDef, $sColumnName)
 747  \layout Code
 748  
 749  function RenameTable($sOldTableName, $sNewTableName)
 750  \layout Code
 751  
 752  function RenameColumn($sTableName, $sOldColumnName, $sNewColumnName)
 753  \layout Code
 754  
 755  function AlterColumn($sTableName, $sColumnName, $aColumnDef)
 756  \layout Code
 757  
 758  function AddColumn($sTableName, $sColumnName, $aColumnDef)
 759  \layout Code
 760  
 761  function CreateTable($sTableName, $aTableDef)
 762  \layout Standard
 763  
 764  Please use these functions where appropriate in place of standard SQL CREATE,
 765   DROP, and ALTER TABLE commands.
 766   This will ensure that your upgrade script works for all supported databases.
 767  \layout Standard
 768  
 769  Of these functions, DropTable, RenameTable, and RenameColumn are pretty
 770   straightforward.
 771   Pass these the table names you wish to Drop/Rename, and schema_proc will
 772   handle the rest, including indexes and sequences, where applicable.
 773  \layout Standard
 774  
 775  The remaining functions require some explanation:
 776  \layout Itemize
 777  
 778  CreateTable:
 779  \layout Code
 780  
 781  $phpgw_setup->oProc->CreateTable(
 782  \layout Code
 783  
 784      'categories', array(
 785  \layout Code
 786  
 787          'fd' => array(
 788  \layout Code
 789  
 790              'cat_id' => array('type' => 'auto','nullable' => false),
 791  \layout Code
 792  
 793              'account_id' => array('type' => 'int','precision' => 4,'nullable'
 794   => false, 'default' => 0),
 795  \layout Code
 796  
 797              'app_name' => array('type' => 'varchar','precision' => 25,'nullable'
 798   => false),
 799  \layout Code
 800  
 801              'cat_name' => array('type' => 'varchar', 'precision' => 150,
 802   'nullable' => false),
 803  \layout Code
 804  
 805              'cat_description' => array('type' => 'text', 'nullable' => false)
 806  \layout Code
 807  
 808          ),
 809  \layout Code
 810  
 811          'pk' => array('cat_id'),
 812  \layout Code
 813  
 814          'ix' => array(),
 815  \layout Code
 816  
 817          'fk' => array(),
 818  \layout Code
 819  
 820          'uc' => array()
 821  \layout Code
 822  
 823      )
 824  \layout Code
 825  
 826  );
 827  \layout Standard
 828  
 829  Does this look familiar? The array passed to CreateTable is in the format
 830   used also in tables_baseline and tables_current.
 831   Note a slight difference where the table name is being passed as a seperate
 832   argument.
 833   The second argument to the function is the table definition array, starting
 834   with 'fd'.
 835  \layout Itemize
 836  
 837  AddColumn:
 838  \layout Code
 839  
 840  $phpgw_setup->oProc->AddColumn('phpgw_categories','cat_access',array('type'
 841   => 'varchar', 'precision' => 25));
 842  \layout Standard
 843  
 844  Here we pass the table name of an existing table, the new column name, and
 845   a field definition.
 846   This definition is merely a slice of the table arrays found earlier in
 847   this document.
 848  \layout Itemize
 849  
 850  AlterColumn:
 851  \layout Code
 852  
 853  $phpgw_setup->oProc->AlterColumn('phpgw_sessions','session_action',array('type'
 854   => 'varchar', 'precision' => '255'));
 855  \layout Standard
 856  
 857  The format of this function matches AddColumn.
 858   It is also a simple case of passing the table name, field name, and field
 859   definition.
 860  \layout Itemize
 861  
 862  DropColumn:
 863  \layout Code
 864  
 865  $newtbldef = array(
 866  \layout Code
 867  
 868      "fd" => array(
 869  \layout Code
 870  
 871          'acl_appname' => array('type' => 'varchar', 'precision' => 50),
 872  \layout Code
 873  
 874          'acl_location' => array('type' => 'varchar', 'precision' => 255),
 875  \layout Code
 876  
 877          'acl_account' => array('type' => 'int', 'precision' => 4),
 878  \layout Code
 879  
 880          'acl_rights' => array('type' => 'int', 'precision' => 4)
 881  \layout Code
 882  
 883      ),
 884  \layout Code
 885  
 886      'pk' => array(),
 887  \layout Code
 888  
 889      'ix' => array(),
 890  \layout Code
 891  
 892      'fk' => array(),
 893  \layout Code
 894  
 895      'uc' => array()
 896  \layout Code
 897  
 898  );
 899  \layout Code
 900  
 901  $phpgw_setup->oProc->DropColumn('phpgw_acl',$newtbldef,'acl_account_type');
 902  \layout Standard
 903  
 904  This is the most complicated function in schema_proc, from the user's perspectiv
 905  e.
 906   Its complexity is necessitated by the requirement of some databases to
 907   recreate a table in the case of dropping a column.
 908   Note that the table definition array is being used yet again.
 909   The array defined here should match the table definition you want after
 910   this function has completed.
 911   Here, we are dropping the column 'acl_account_type' from the table 'phpgw_acl',
 912   and the table definition does not have this column defined.
 913   You could copy information from your tables_current file here and edit
 914   it to match the desired new table spec, less the column you wish to drop.
 915  \layout Standard
 916  
 917  There are additional functions within schema_proc, the majority of which
 918   are not to be called directly.
 919   They are used internally.
 920   If you do wish to investigate further, use class.schema_proc.inc.php as your
 921   guide.
 922   This master file includes the class.schema_proc_DBMS.inc.php and class.schema_proc_
 923  array.inc.php files.
 924   The DBMS files should not be used as a guide, since their functions are
 925   called from the master class, and the parameters are different from what
 926   you might expect relative to the master.
 927  \layout Standard
 928  
 929  
 930  \series bold 
 931  PLEASE, DO NOT WRITE TO OR ALTER ANOTHER APPLICATION'S TABLES OR THE API
 932   TABLES IN YOUR APPLICATION UPGRADE FUNCTIONS!
 933  \layout Subsection
 934  
 935  default_records.inc.php (Optional)
 936  \layout Subsubsection
 937  
 938  Any application with tables that wants to load some default data will need
 939   this file.
 940  \layout Standard
 941  
 942  The default_records file consists of a list of SQL INSERTs using the $oProc
 943   object directly:
 944  \layout Code
 945  
 946  $oProc->query("INSERT INTO phpgw_inv_statuslist (status_name) VALUES ('available
 947  ')");
 948  \layout Code
 949  
 950  $oProc->query("INSERT INTO phpgw_inv_statuslist (status_name) VALUES ('no
 951   longer available')");
 952  \layout Code
 953  
 954  $oProc->query("INSERT INTO phpgw_inv_statuslist (status_name) VALUES ('back
 955   order')");
 956  \layout Standard
 957  
 958  In this case, the developer wanted to insert some status information, which
 959   was then used in a select box on an html form.
 960   Using the default_records file, every new install will have this data included.
 961   This file should consist of queries applicable to the tables defined in
 962   setup.inc.php and tables_current.inc.php.
 963  \layout Subsection
 964  
 965  test_data.inc.php (Optional)
 966  \layout Subsubsection
 967  
 968  Any developer wanting to test the full list of upgrade routines can use
 969   this file.
 970  \layout Standard
 971  
 972  test_data.inc.php is similar to default_records above.
 973   It is called only by schematoy.php and is never installed with a new install
 974   or upgrade.
 975   This is a developer-only file.
 976   The INSERTs here should be applicable to the tables_baseline table definitions.
 977  \layout Subsection
 978  
 979  language files (Required)
 980  \layout Subsubsection
 981  
 982  All applications should have at least a file of English translations, used
 983   for their application lang() calls.
 984  \layout Itemize
 985  
 986  Format of a lang file:
 987  \layout Code
 988  
 989  {phrase}{TAB}{appname}{TAB}{LANG_CODE}{TAB}{translation}
 990  \layout Code
 991  
 992      e.g:
 993  \layout Code
 994  
 995  first name    common    en    First Name
 996  \layout Code
 997  
 998  first name    common    de    Vorname
 999  \layout Itemize
1000  
1001  Filenames:
1002  \layout Code
1003  
1004  phpgw_{LANG_CODE}.lang
1005  \layout Code
1006  
1007    e.g.
1008  \layout Code
1009  
1010  English: phpgw_en.lang
1011  \layout Code
1012  
1013  German: phpgw_de.lang
1014  \layout Standard
1015  
1016  Please see the contents of the API 'languages' table for the correct setting
1017   of the LANG_CODE.
1018  \layout Section
1019  
1020  Developer Tools
1021  \layout Subsection
1022  
1023  sqltoarray.php
1024  \layout Subsubsection
1025  
1026  Displays the current schema_proc array defining an application's tables.
1027  \layout Standard
1028  
1029  This web application reads the current table status live from the database.
1030   It then parses this information into a hopefully correct table definition
1031   array for schema_proc.
1032   Upon visiting this app, you are shown a list of currently installed application
1033  s with defined tables.
1034   You may then select one app or all apps, and then submit the form.
1035   From this form you may then download a tables_current file, suitable for
1036   commission to cvs.
1037   Please do check the format to make sure the definitions are correct.
1038  \layout Subsection
1039  
1040  schematoy.php
1041  \layout Subsubsection
1042  
1043  Runs the full cycle of upgrades, including optional test_data.
1044  \layout Standard
1045  
1046  This app is not beautiful, may bomb on you, and will definitely drop your
1047   application's tables.
1048   The display is similar to the user/admin tool, applications.php.
1049   You are shown a list of apps with tables.
1050   Select one app, and enter a target version.
1051   Upon submission of the form:
1052  \layout Itemize
1053  
1054  All application tables are dropped.
1055  \layout Itemize
1056  
1057  tables_baseline.inc.php is loaded.
1058  \layout Itemize
1059  
1060  test_data.inc.php is loaded
1061  \layout Itemize
1062  
1063  tables_update.inc.php is loaded.
1064  \layout Itemize
1065  
1066  a full application upgrade test begins.
1067  \layout Standard
1068  
1069  This will give a LOT of debugging output.
1070   Depending on your database, the process may take quite awhile.
1071   This tool should be considered as a destructive test of the full upgrade
1072   cycle.
1073   If the upgrade process is successful, you can then check the loaded test_data
1074   to see that it is still in place as expected after all the table modifications,
1075   etc.
1076   If not, it should be clear where the error has occurred.
1077   Look for the usual INVALID SQL warnings, among others.
1078  \layout Subsection
1079  
1080  tools subdirectory
1081  \layout Subsubsection
1082  
1083  some utilities for sql file conversion, etc.
1084  \layout Standard
1085  
1086  In the tools directory under setup3, there should be at least a couple of
1087   hopefully handy perl or shell scripts.
1088   These are for running on the commandline only, and might apply to converting
1089   SQL files into lang files, etc.
1090   They are not expected to be perfect, but might offer some assistance or
1091   ideas for additional utilities.
1092   Use these at your own risk or benefit.
1093  \layout Section
1094  
1095  The install/upgrade process
1096  \layout Subsection
1097  
1098  Overview
1099  \layout Subsubsection
1100  
1101  Setup internal upgrade functions
1102  \layout Standard
1103  
1104  Setup uses a common set of functions for new installs and upgrades.
1105   These are implemented as multi-pass loops.
1106   For a single application install or upgrade, a single pass is done.
1107   For multiple application installs or upgrades, multiple passes are done
1108   automatically.
1109   The order of install in a mass install or upgrade is determined by application
1110   dependencies.
1111   The other determining factor is the order in which the application directories
1112   and setup.inc.php files are read from the filesystem.
1113  \layout Subsection
1114  
1115  New installs
1116  \layout Subsubsection
1117  
1118  Detection
1119  \layout Standard
1120  
1121  Each run of index.php or applications.php in setup3 first runs a set of detection
1122   routines.
1123   These read the data from each setup.inc.php file, and from the 'applications'
1124   or 'phpgw_applications' table as appropriate, and only if one of these
1125   tables exists.
1126   This data is parsed into the $setup_info array.
1127   In this case, this array contains information about all applications.
1128   Based on the information gathered, a status flag is set to one of the following
1129   values:
1130  \layout Itemize
1131  
1132  U - Upgrade required/available
1133  \layout Itemize
1134  
1135  R - upgrade in pRogress
1136  \layout Itemize
1137  
1138  C - upgrade Completed successfully
1139  \layout Itemize
1140  
1141  D - Dependency failure
1142  \layout Itemize
1143  
1144  F - upgrade Failed
1145  \layout Itemize
1146  
1147  V - Version mismatch at end of upgrade
1148  \layout Itemize
1149  
1150  M - Missing files at start of upgrade (Not used, proposed only)
1151  \layout Standard
1152  
1153  Using this information, the setup logic in index.php determines what mode
1154   we are in.
1155   index.php is not capable of being selective about which application it found
1156   as being out of sync.
1157   It is designed only for 'Simple Application Management', which is Step
1158   1 of the setup process.
1159   For more selective application manipulation, use applications.php.
1160   index.php then tells the user that 1) their applications are current 2)
1161   some of their applications are out of sync 3) no db exists, etc.
1162   For a new install, all applications will be out of sync, since there is
1163   not even an 'phpgw_applications' table in the database to tell setup what
1164   the status is for any application.
1165  \layout Subsubsection
1166  
1167  Selection
1168  \layout Standard
1169  
1170  There is no selection for application installs in 'new install' mode.
1171   All physically present applications will be installed, or at least attempted.
1172  \layout Subsubsection
1173  
1174  Installation
1175  \layout Standard
1176  
1177  Once the setup user clicks the magic button to install all applications,
1178   the following occurs:
1179  \layout Itemize
1180  
1181  The setup_info array is passed to the process_pass() function, using a method='n
1182  ew'
1183  \layout Itemize
1184  
1185  Applications whose status flag='U' (API on first pass) are then handed off
1186   to the process_current() function.
1187   This handles inclusion and installation of the application's tables_current.inc.p
1188  hp file.
1189  \layout Itemize
1190  
1191  The application is registered as a new application in the 'phpgw_applications'
1192   table.
1193   If for some reason there is old data in this table for this application,
1194   it will be updated instead.
1195   Its hooks, if any, are registered in the 'phpgw_hooks' table.
1196  \layout Itemize
1197  
1198  Next, this array is passed to the process_default_records() function.
1199   If this file is present in the current application's setup directory, the
1200   queries here are run to install the data to the application's table(s).
1201  \layout Itemize
1202  
1203  The above is repeated until all application status flags equal 'C'.
1204   However, if an application install failed for some reason, it will then
1205   be skipped on the next pass.
1206   This keeps the loop from running away.
1207  \layout Subsection
1208  
1209  Upgrades
1210  \layout Subsubsection
1211  
1212  Detection
1213  \layout Standard
1214  
1215  Only an API version mismatch will trigger an automated request for the user
1216   to upgrade their install.
1217   Once the api is current, they can move on to applications.php for more 'Advanced
1218   Application Management', which is Step 4 of the setup process.
1219   However, if the API is out of sync, clicking 'Upgrade' in index.php will
1220   also attempt to upgrade other applications which may be out of sync, as
1221   well.
1222   As the phpgwapi continues to stabilize, it is felt that this method of
1223   upgrading will become less and less common.
1224  \layout Subsubsection
1225  
1226  Selection
1227  \layout Standard
1228  
1229  Within applications.php, a color-coded matrix of application status and actions
1230   is displayed.
1231   Depending on the status flag of each application, certain actions will
1232   be either enabled or disabled.
1233   These actions include 'install', 'upgrade', 'remove'.
1234   If something is very wrong with previous attempts to install or upgrade
1235   an application, another column called 'resolution' will then display a
1236   link.
1237   This link will display additional information which would be helpful for
1238   determining how to resolve the problem.
1239   Assuming all is well, the user can select applications requiring upgrade
1240   from this list.
1241   Once selected, they submit the form.
1242   This runs the follow three routines in order:
1243  \layout Itemize
1244  
1245  remove
1246  \layout Itemize
1247  
1248  install
1249  \layout Itemize
1250  
1251  upgrade
1252  \layout Subsubsection
1253  
1254  Upgrade
1255  \layout Standard
1256  
1257  The idea here is that multiple actions can be selected and run in order
1258   in one click.
1259   In any case, once they select an application for upgrade, the following
1260   occurs:
1261  \layout Itemize
1262  
1263  A stripped down version of the setup_info array is passed to the process_upgrade
1264  () function.
1265   This array contains only the information for the selected application
1266  \layout Itemize
1267  
1268  Within process_upgrade(), the tables_baseline.inc.php file for the application
1269   is loaded.
1270  \layout Itemize
1271  
1272  The tables_update.inc.php file for the application is loaded
1273  \layout Itemize
1274  
1275  The contents of the test array is used to loop through the entire list of
1276   upgrade functions for the application.
1277   The application's unique function names are rebuilt, then run.
1278  \layout Itemize
1279  
1280  When the currentver (installed) matches the version (available), process_upgrade
1281  () exits, setting the status flag for the app to 'C'.
1282  \layout Itemize
1283  
1284  Just prior to exiting, the application and its hooks are updated into the
1285   'phpgw_applications' and 'phpgw_hooks' tables.
1286  \layout Subsection
1287  
1288  Uninstallation/Removal
1289  \layout Subsubsection
1290  
1291  Selection
1292  \layout Standard
1293  
1294  Selective removal of an application is done via applications.php, in a manner
1295   similar to the method above for upgrades.
1296  \layout Subsubsection
1297  
1298  Uninstallation
1299  \layout Standard
1300  
1301  Once an application is selected for removal:
1302  \layout Itemize
1303  
1304  A stripped down version of the setup_info array is passed to the process_droptab
1305  les() function.
1306   This function removes all of the application's defined tables, but only
1307   after first checking to see if the tables are there.
1308   In this way, we attempt to cut down on the number of errors sent to the
1309   browser.
1310  \layout Itemize
1311  
1312  The application's hooks are deregistered (removed from 'phpgw_hooks').
1313  \layout Itemize
1314  
1315  The application itself is deregistered (removed from 'phpgw_applications').
1316  \layout Section
1317  
1318  Caveats
1319  \layout Subsection
1320  
1321  Must see info
1322  \layout Subsubsection
1323  
1324  Auto fields
1325  \layout Standard
1326  
1327  For auto type fields, schema_proc creates a sequence automatically based
1328   on the table name for databases that require sequences.
1329   In the case of postgresql, the limit for this name based on our tests is
1330   31 characters.
1331   The schema_proc format is:
1332  \layout Code
1333  
1334  $sSequenceSQL = sprintf("CREATE SEQUENCE seq_%s", $sTableName);
1335  \layout Standard
1336  
1337  This limits the maximum length for a tablename to 27 characters.
1338   Based on the tablename standard in phpgw of 'phpgw_tablename', you are
1339   further limited to 21 characters in which to describe your table.
1340   You will need to be less descriptive in some cases, e.g.
1341   use 'phpgw_widget_cats' instead of 'phpgw_widget_info_categories'.
1342  \layout Standard
1343  
1344  To maintain compatibility with MySQL 3.22.X, please always add 
1345  \begin_inset Quotes eld
1346  \end_inset 
1347  
1348  'nullable' => False
1349  \begin_inset Quotes erd
1350  \end_inset 
1351  
1352   to your field spec for an auto field.
1353   This and probably older versions of MySQL require that specification within
1354   the SQL for a field that will also be an index or unique field, which for
1355   our uses should typically be true for an auto field.
1356   MySQL 3.23.X and PostgreSQL do not have this issue.
1357  \layout Subsubsection
1358  
1359  Default 0
1360  \layout Standard
1361  
1362  For int fields, a default of 0 is not assumed.
1363   Only some databases will set this default for you, MySQL being one.
1364   You will need to explicitly define this default in the table definition.
1365   Also, for auto fields, do not enter a default, since the resulting SQL
1366   query would fail on many RDBMS.
1367  \the_end


Généré le : Sun Feb 25 17:20:01 2007 par Balluche grâce à PHPXref 0.7