Fixed html generaton for buttons.
[fa-stable.git] / includes / references.inc
index 07f397b6967174e972adeceb906072b6c3190491..420e960e805d0169280c8d8dafd73dcd25656398 100644 (file)
@@ -1,5 +1,14 @@
 <?php
-
+/**********************************************************************
+    Copyright (C) FrontAccounting, LLC.
+       Released under the terms of the GNU General Public License, GPL, 
+       as published by the Free Software Foundation, either version 3 
+       of the License, or (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
 include_once($path_to_root . "/includes/db/references_db.inc");
 
 class references 
@@ -8,8 +17,8 @@ class references
        function save($type, $id, $reference) 
        {
                add_reference($type, $id, $reference);
-               
-               references::save_last($reference, $type);
+               if ($reference != 'auto')
+                       $this->save_last($reference, $type);
        }
        
        function get($type, $id) 
@@ -22,6 +31,13 @@ class references
                delete_reference($type, $id);
        }       
        
+       function update($type, $id, $reference) 
+       {
+           update_reference($type, $id, $reference);
+               if ($reference != 'auto')
+                       $this->save_last($reference, $type);
+       }
+       
        function exists($type, $reference) 
        {
                return (find_reference($type, $reference) != null);
@@ -29,7 +45,7 @@ class references
        
        function save_last($reference, $type) 
        {
-               $next = references::increment($reference);
+               $next = $this->increment($reference);
                save_next_reference($type, $next);
        }
        
@@ -47,10 +63,23 @@ class references
        
        function increment($reference) 
        {
-        if (is_numeric($reference))
-               return $reference + 1;
+               // New method done by Pete. So f.i. WA036 will increment to WA037 and so on.
+               // If $reference contains at least one group of digits,
+        // extract first didgits group and add 1, then put all together.
+        // NB. preg_match returns 1 if the regex matches completely 
+        // also $result[0] holds entire string, 1 the first captured, 2 the 2nd etc.
+        //
+        if (preg_match('/^(\D*?)(\d+)(.*)/', $reference, $result) == 1) 
+        {
+                       list($all, $prefix, $number, $postfix) = $result;
+                       $dig_count = strlen($number); // How many digits? eg. 0003 = 4
+                       $fmt = '%0' . $dig_count . 'd'; // Make a format string - leading zeroes
+                       $nextval =  sprintf($fmt, intval($number + 1)); // Add one on, and put prefix back on
+
+                       return $prefix.$nextval.$postfix;
+        }
         else 
-               return $reference;
+            return $reference;
        }
        
        //------------------------------------