Switch to new access levels system
[fa-stable.git] / sql / alter2.2.php
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU General Public License, GPL, 
5         as published by the Free Software Foundation, either version 3 
6         of the License, or (at your option) any later version.
7     This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
10     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
11 ***********************************************************************/
12
13 class fa2_2 {
14         var $version = '2.2';   // version installed
15         var $description = 'Version 2.2';
16         var $sql = 'alter2.2.sql';
17         //
18         //      Install procedure. All additional changes 
19         //      not included in sql file should go here.
20         //
21         function install($pref, $force) 
22         {
23                 global $db, $systypes_array;
24                 // set item category dflt accounts to values from company GL setup
25                 $prefs = get_company_prefs();
26                 $sql = "UPDATE {$pref}stock_category SET "
27                         ."dflt_sales_act = '" . $prefs['default_inv_sales_act'] . "',"
28                         ."dflt_cogs_act = '". $prefs['default_cogs_act'] . "',"
29                         ."dflt_inventory_act = '" . $prefs['default_inventory_act'] . "',"
30                         ."dflt_adjustment_act = '" . $prefs['default_adj_act'] . "',"
31                         ."dflt_assembly_act = '" . $prefs['default_assembly_act']."'";
32                 if (db_query($sql)==false) {
33                         display_error("Cannot update category default GL accounts"
34                         .':<br>'. db_error_msg($db));
35                         return false;
36                 }
37                 // add all references to refs table for easy searching via journal interface
38                 foreach($systypes_array as $typeno => $typename) {
39                         $info = get_systype_db_info($typeno);
40                         if ($info == null || $info[3] == null) continue;
41                         $tbl = str_replace(TB_PREF, $pref, $info[0]);
42                         $sql = "SELECT {$info[2]} as id,{$info[3]} as ref FROM $tbl";
43                         if ($info[1])
44                                 $sql .= " WHERE {$info[1]}=$typeno";
45                         $result = db_query($sql);
46                         if (db_num_rows($result)) {
47                                 while ($row = db_fetch($result)) {
48                                         $res2 = db_query("INSERT INTO {$pref}refs VALUES("
49                                                 . $row['id'].",".$typeno.",'".$row['ref']."')");
50                                         if (!$res2) {
51                                                 display_error(_("Cannot copy references from $tbl")
52                                                         .':<br>'. db_error_msg($db));
53                                                 return false;
54                                         }
55                                 }
56                         }
57                 }
58 /* FIX          // restore/init audit_trail data 
59                 $datatbl = array (
60                         "gl_trans"=> array("type", "type_no","tran_date"),
61                         "purch_orders" => array("order_no", "'18'", "ord_date"), 
62                         "sales_orders" => array("order_no", "'30'", "ord_date"),
63                         "workorders" => array("id", "'26'", "date_") );
64                 foreach ( $datatbl as $tblname => $tbl) {
65                   $sql = "SELECT {$tbl[0]} as type, {$tbl[1]} as trans, {$tbl[2]} as dat"
66                         . " FROM {$pref}{$tblname}";
67                   $result = db_query($sql);
68                   if (db_num_rows($result)) {
69                         $user = ;
70                         $year = ;
71                         while ($row = db_fetch($result)) {
72                                 $sql2 = "INSERT INTO ".$pref."audit_trail"
73                                 ." (type, trans_no, user, fiscal_year, gl_date, gl_seq) VALUES ("
74                                 . "{$row['type']},{$row['trans']},$user,$year,{$row['dat']},0)";
75                                 $res2 = db_query($sql2);
76                                 if (!$res2) {
77                                         display_error(_("Cannot init audit_trail data")
78                                                 .':<br>'. db_error_msg($db));
79                                         return false;
80                                 }
81                         }
82                   }
83                 }
84 */              
85         return convert_roles($pref);
86         }
87         //
88         //      Checking before install
89         //
90         function pre_check($pref)
91         {
92                 global $security_groups;
93                 return isset($security_groups); // true when ok, fail otherwise
94         }
95         //
96         //      Test if patch was applied before.
97         //
98         function installed($pref) {
99                 if (check_table($pref, 'company', 'login_tout')) return false;
100                 if (check_table($pref, 'stock_category', 'dflt_dim2')) return false;
101                 if (check_table($pref, 'users', 'sticky_doc_date')) return false;
102                 if (check_table($pref, 'audit_trail')) return false;
103                 if (check_table($pref, 'stock_master','no_sale')) return false;
104                 if (check_table($pref, 'users', 'role_id')) return false;
105                         return true;
106         }
107 };
108
109 /*
110         Conversion of old security roles stored into $security_groups table
111 */
112 function convert_roles($pref) 
113 {
114                 global $security_groups, $security_headings, $security_areas, $path_to_root;
115                 include_once($path_to_root."/includes/access_levels.inc");
116
117         $trans_sec = array(
118                 1 => array('SA_CHGPASSWD', 'SA_SETUPDISPLAY', 'SA_BANKTRANSVIEW',
119                         'SA_ITEMSTRANSVIEW','SA_SUPPTRANSVIEW', 'SA_SALESORDER',
120                         'SA_SALESALLOC', 'SA_SALESTRANSVIEW'),
121                 2 => array('SA_DIMTRANSVIEW', 'SA_STANDARDCOST', 'SA_ITEMSTRANSVIEW',
122                         'SA_ITEMSSTATVIEW', 'SA_SALESPRICE', 'SA_MANUFTRANSVIEW',
123                         'SA_WORKORDERANALYTIC', 'SA_WORKORDERCOST', 'SA_SUPPTRANSVIEW',
124                         'SA_SUPPLIERALLOC', 'SA_STEMPLATE', 'SA_SALESTRANSVIEW',
125                         'SA_SALESINVOICE', 'SA_SALESDELIVERY', 'SA_CUSTPAYMREP',
126                         'SA_CUSTBULKREP', 'SA_PRICEREP', 'SA_SALESBULKREP', 'SA_SALESMANREP',
127                         'SA_SALESBULKREP', 'SA_CUSTSTATREP', 'SA_SUPPLIERANALYTIC',
128                         'SA_SUPPPAYMREP', 'SA_SUPPBULKREP', 'SA_ITEMSVALREP', 'SA_ITEMSANALYTIC',
129                         'SA_BOMREP', 'SA_MANUFBULKREP', 'SA_DIMENSIONREP', 'SA_BANKREP', 'SA_GLREP',
130                         'SA_GLANALYTIC', 'SA_TAXREP', 'SA_SALESANALYTIC'),
131                 3 => array('SA_GLACCOUNTGROUP', 'SA_GLACCOUNTCLASS','SA_PAYMENT', 
132                         'SA_DEPOSIT', 'SA_JOURNALENTRY', 'SA_INVENTORYMOVETYPE',
133                         'SA_LOCATIONTRANSFER', 'SA_INVENTORYADJUSTMENT', 'SA_WORKCENTRES',
134                         'SA_MANUFISSUE', 'SA_SUPPLIERALLOC', 'SA_CUSTOMER', 'SA_CRSTATUS',
135                         'SA_SALESMAN', 'SA_SALESAREA', 'SA_SALESALLOC', 'SA_SALESCREDITINV',
136                         'SA_SALESPAYMNT', 'SA_SALESCREDIT', 'SA_SALESGROUP', 'SA_SRECURRENT',
137                         'SA_TAXRATES', 'SA_ITEMTAXTYPE', 'SA_TAXGROUPS', 'SA_QUICKENTRY'),
138                 4 => array('SA_REORDER', 'SA_PURCHASEPRICING', 'SA_PURCHASEORDER'),
139                 5 => array('SA_VIEWPRINTTRANSACTION', 'SA_BANKTRANSFER', 'SA_SUPPLIER',
140                         'SA_SUPPLIERINVOICE', 'SA_SUPPLIERPAYMNT', 'SA_SUPPLIERCREDIT'),
141                 8 => array('SA_ATTACHDOCUMENT', 'SA_RECONCILE', 'SA_GLANALYTIC',
142                         'SA_TAXREP', 'SA_BANKTRANSVIEW', 'SA_GLTRANSVIEW'),
143                 9 => array('SA_FISCALYEARS', 'SA_CURRENCY', 'SA_EXCHANGERATE', 
144                         'SA_BOM'),
145                 10 => array('SA_PAYTERMS', 'SA_GLSETUP', 'SA_SETUPCOMPANY',
146                         'SA_FORMSETUP', 'SA_DIMTRANSVIEW', 'SA_DIMENSION', 'SA_BANKACCOUNT',
147                         'SA_GLACCOUNT', 'SA_BUDGETENTRY', 'SA_MANUFRECEIVE',
148                         'SA_MANUFRELEASE', 'SA_WORKORDERENTRY', 'SA_MANUFTRANSVIEW',
149                         'SA_WORKORDERCOST'),
150                 11 => array('SA_ITEMCATEGORY', 'SA_ITEM', 'SA_UOM', 'SA_INVENTORYLOCATION',
151                          'SA_GRN', 'SA_FORITEMCODE', 'SA_SALESKIT'),
152                 14 => array('SA_SHIPPING', 'SA_VOIDTRANSACTION', 'SA_SALESTYPES'),
153                 15 => array('SA_PRINTERS', 'SA_PRINTPROFILE', 'SA_BACKUP', 'SA_USERS',
154                         'SA_POSSETUP'),
155                 20 => array('SA_CREATECOMPANY', 'SA_CREATELANGUAGE', 'SA_CREATEMODULES',
156                         'SA_SOFTWAREUPGRADE', 'SA_SECROLES')
157                 );
158                 
159                 foreach ($security_groups as $role_id => $areas) {
160                         $area_set = array();
161                         $sections = array();
162                         foreach ($areas as $a) {
163                          if (isset($trans_sec[$a]))
164                                 foreach ($trans_sec[$a] as $id) {
165                                  if ($security_areas[$id][0]==0)
166 //                                      error_log('invalid area id: '.$a.':'.$id);
167                                         $area_set[] = $security_areas[$id][0];
168                                         $sections[$security_areas[$id][0]&~0xff] = 1;
169                                 }
170                         }
171                         $sections  = array_keys($sections);
172                         sort($sections); sort($area_set);
173                         import_security_role($pref, $security_headings[$role_id], $sections, $area_set);
174                         $new = db_insert_id();
175                         $sql = "UPDATE {$pref}users set role_id=$new WHERE role_id=$role_id";
176                         $ret = db_query($sql, 'cannot update users roles');
177                         if(!$ret) return false;
178                 }
179                 return true;
180 }
181
182 function import_security_role($pref, $name, $sections, $areas)
183 {
184         $sql = "INSERT INTO {$pref}security_roles (role, description, sections, areas)
185         VALUES (".db_escape('FA 2.1 '.$name).",".db_escape($name).","
186         .db_escape(implode(';',$sections)).",".db_escape(implode(';',$areas)).")";
187
188         db_query($sql, "could not add new security role");
189 }
190
191 $install = new fa2_2;
192
193 ?>