- Timestamp:
- 07/15/10 17:50:39 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sandbox/workflow/branches/1015/inc/engine/src/common/WfRuntime.php
r2372 r3061 6 6 * as it handle concurrency and part of the core execution of the instance while avoiding 7 7 * bad manipulation of the instance 8 * 8 * 9 9 * @package Galaxia 10 * @license http://www.gnu.org/copyleft/gpl.html GPL 10 * @license http://www.gnu.org/copyleft/gpl.html GPL 11 11 */ 12 class WfRuntime extends Base 13 { 12 class WfRuntime extends Base 13 { 14 14 /** 15 15 * @var array processes config values cached for this object life duration, init is done at first use for the only process associated with this runtime object 16 16 * @access public 17 17 */ 18 var $conf= Array(); 18 var $conf= Array(); 19 19 /** 20 20 * @var object $activity 21 * @access public 21 * @access public 22 22 */ 23 23 var $activity = null; 24 24 /** 25 25 * @var object $instance 26 * @access public 26 * @access public 27 27 */ 28 28 var $instance = null; 29 29 /** 30 30 * @var int $instance_id 31 * @access public 32 */ 33 var $instance_id = 0; 31 * @access public 32 */ 33 var $instance_id = 0; 34 34 /** 35 35 * @var int $activity_id 36 * @access public 36 * @access public 37 37 */ 38 38 var $activity_id = 0; 39 39 /** 40 40 * @var object $process Retrieve process information 41 * @access public 41 * @access public 42 42 */ 43 43 var $process = null; 44 44 /** 45 45 * @var object $workitems Reference to $instance->workitems 46 * @access public 46 * @access public 47 47 */ 48 48 var $workitems = null; 49 49 /** 50 50 * @var object $activities Reference to $instance->activities 51 * @access public 52 */ 51 * @access public 52 */ 53 53 var $activities = null; 54 54 /** 55 55 * @var object $security Security object 56 * @access public 57 */ 56 * @access public 57 */ 58 58 var $security = null; 59 59 /** 60 60 * @var bool $transaction_in_progress Transaction state 61 * @access public 62 */ 63 var $transaction_in_progress = false; 61 * @access public 62 */ 63 var $transaction_in_progress = false; 64 64 /** 65 65 * @var bool $debug Debug state 66 * @access public 67 */ 66 * @access public 67 */ 68 68 var $debug=false; 69 69 /** 70 70 * @var bool $auto_mode Automatic mode state, non-interactive for instance, big impact on error handling 71 * @access public 72 */ 71 * @access public 72 */ 73 73 var $auto_mode=false; 74 74 … … 81 81 /** 82 82 * Constructor 83 * 83 * 84 84 * @param object &$db ADOdb 85 85 * @return object WfRuntime instance 86 86 * @access public 87 87 */ 88 function WfRuntime() 88 function WfRuntime() 89 89 { 90 90 $this->child_name = 'WfRuntime'; … … 101 101 * Collect errors from all linked objects which could have been used by this object 102 102 * Each child class should instantiate this function with her linked objetcs, calling get_error(true) 103 * 103 * 104 104 * @param bool $debug false by default, if true debug messages can be added to 'normal' messages 105 105 * @param string $prefix appended to the debug message 106 * @return void 106 * @return void 107 107 * @access private 108 108 */ … … 118 118 /** 119 119 * Ends-up dying and giving a last message 120 * 120 * 121 121 * @param string $last_message last sentence 122 122 * @param bool $include_errors false by default, if true we'll include error messages … … 134 134 if ($this->debug) $debug = true; 135 135 if ($this->auto_mode) $dying = false; 136 136 137 137 if ($include_errors) 138 138 { … … 161 161 * Loads the config values for the process associated with the runtime 162 162 * config values are cached while this WfRuntime object stays alive 163 * 163 * 164 164 * @param array $arrayconf Config array with default value, where key is config option name and value is default value 165 * @access private 165 * @access private 166 166 * @return array Values associated with the current process for the asked config options and as well for som WfRuntime internal config options 167 167 */ … … 172 172 $this->loadProcess(); 173 173 } 174 $arrayconf['auto-release_on_leaving_activity'] = 1; 174 $arrayconf['auto-release_on_leaving_activity'] = 1; 175 175 $this->conf = $this->process->getConfigValues($arrayconf); 176 176 return $this->conf; … … 179 179 /** 180 180 * Loads instance, the activity and the process, needed by the runtime engine to 'execute' the activity 181 * 181 * 182 182 * @param int $activityId activity id, the activity we will run 183 183 * @param int $instanceId instance Id, can be empty for a start or standalone activity 184 * @return bool 184 * @return bool 185 185 * @access public 186 186 */ … … 204 204 return false; 205 205 } 206 206 207 207 //ensure the activity is not completed 208 208 $this->instance->setActivityCompleted(false); 209 209 $this->instance->activityID = $activityId; 210 210 211 211 //set the workitems and activities links 212 212 $this->workitems =& $this->instance->workitems; … … 214 214 return true; 215 215 } 216 216 217 217 /** 218 218 * Retrieves the process object associated with the activity 219 * 219 * 220 220 * @param int $pId Process id of the process you want, if you do not give it we will try to take it from the activity 221 221 * @return mixed Process object of the right type or false … … 242 242 return true; 243 243 } 244 244 245 245 /** 246 246 * Gets current process instance 247 * 247 * 248 248 * @return object Process instance 249 249 * @access public … … 256 256 /** 257 257 * Retrieves the activity of the right type from a baseActivity Object 258 * 258 * 259 259 * @param int $activity_id activity_id you want 260 260 * @param bool $with_roles will load the roles links on the object … … 285 285 return true; 286 286 } 287 287 288 288 /** 289 289 * Gets current activity instance 290 * 290 * 291 291 * @return object Activity instance 292 292 * @access public 293 */ 293 */ 294 294 function &getActivity() 295 295 { 296 296 return $this->activity; 297 297 } 298 298 299 299 /** 300 300 * Gets the instance which could be an empty object 301 * 301 * 302 302 * @param int $instanceId is the instance id 303 303 * @return mixed Instance object which can be empty or string if something was turning bad … … 308 308 $this->instance_id = $instanceId; 309 309 $this->instance->getInstance($instanceId); 310 if ( ($this->instance->getInstanceId()==0) 310 if ( ($this->instance->getInstanceId()==0) 311 311 && (! (($this->activity->getType()=='standalone') || ($this->activity->getType()=='start') )) ) 312 312 { … … 319 319 return true; 320 320 } 321 321 322 322 /** 323 323 * Perform necessary security checks at runtime before running an activity 324 324 * This will as well lock the tables via the security object 325 325 * It should be launched in a transaction 326 * 326 * 327 327 * @return bool true if ok, false if the user has no runtime access 328 328 * @access public … … 356 356 * This will as well lock the tables via the security object 357 357 * It should be launched in a transaction 358 * 358 * 359 359 * @return bool true if ok, false if the user has no runtime access instance and activity are unsetted in case of false check 360 360 * @access public … … 372 372 //we are granted an access to release but there is a special bad case where 373 373 //we are a user authorized at releasing instances owned by others and where 374 //this instance is owned by another (for some quite complex reasons). 374 //this instance is owned by another (for some quite complex reasons). 375 375 //we should not release this new user!! 376 //Then this is auto-release, not a conscious act and so we will release only 376 //Then this is auto-release, not a conscious act and so we will release only 377 377 //if we can still grab this instance (avoiding the bad case) 378 378 379 379 //test grab before release 380 380 if ($this->checkUserRun()) … … 386 386 return false; 387 387 } 388 388 389 389 /** 390 390 * Sets/unsets the WfRuntime in debug mode 391 * 391 * 392 392 * @param bool $debug_mode true by default, set it to false to disable debug mode 393 393 * @access public 394 * @return void 394 * @return void 395 395 */ 396 396 function setDebug($debug_mode=true) … … 398 398 $this->debug = $debug_mode; 399 399 } 400 400 401 401 /** 402 402 * Sets/unsets the WfRuntime in automatic mode. i.e : executing 403 403 * non-interactive or interactive activities. Automatic mode have big impacts 404 404 * on error handling and on the way activities are executed 405 * 405 * 406 406 * @param bool $auto_mode true by default, set it to false to disable automatic mode 407 407 * @access public 408 * @return void 408 * @return void 409 409 */ 410 410 function setAuto($auto_mode=true) … … 412 412 $this->auto_mode = $auto_mode; 413 413 } 414 414 415 415 /** 416 416 * This function will start a transaction, call it before setActivityUser() 417 * 418 * @access public 419 * @return void 417 * 418 * @access public 419 * @return void 420 420 */ 421 421 function StartRun() … … 424 424 $this->db->StartTrans(); 425 425 } 426 426 427 427 /** 428 428 * This function ends the transactions started in StartRun() 429 * 429 * 430 430 * @access public 431 431 * @return void … … 433 433 function EndStartRun() 434 434 { 435 if ($this->transaction_in_progress) 435 if ($this->transaction_in_progress) 436 436 { 437 437 $this->db->CompleteTrans(); … … 439 439 } 440 440 } 441 442 /** 443 * For interactive activities this function will set the current user on the instance-activities table. 441 442 /** 443 * For interactive activities this function will set the current user on the instance-activities table. 444 444 * This will prevent having several user using the same activity on the same intsance at the same time 445 445 * But if you want this function to behave well you should call it after a checkUserRun or a checkUserRelease 446 446 * and inside a transaction. Theses others function will ensure the table will be locked and the user 447 447 * is really granted the action 448 * 448 * 449 449 * @param bool $grab true by default, if false the user will be set to '*', releasing the instance-activity record 450 450 * @access public 451 * @return bool 451 * @return bool 452 452 */ 453 453 function setActivityUser($grab=true) 454 454 { 455 if(isset($GLOBALS['user']) && !empty($this->instance->instanceId) && !empty($this->activity_id)) 455 if(isset($GLOBALS['user']) && !empty($this->instance->instanceId) && !empty($this->activity_id)) 456 456 { 457 457 if ($this->activity->isInteractive()) … … 480 480 $this->error[] = $errors; 481 481 return false; 482 } 483 } 484 482 } 483 } 484 485 485 /** 486 486 * Tries to give some usefull info about the current runtime 487 * 487 * 488 488 * @return array associative arrays with keys/values which could be usefull 489 489 * @access public … … 510 510 * This part of the runtime will be runned just after the activity code inclusion. 511 511 * We are in fact after all the "user code" part. We should decide what to do next 512 * 512 * 513 513 * @param bool $debug false by default 514 514 * @return array an array which must be analysed by the application run class. It contains 2 keys … … 525 525 { 526 526 $result = Array(); 527 527 528 528 // re-retrieve instance id which could have been modified by a complete 529 529 $this->instance_id = $this->instance->getInstanceId(); 530 530 531 531 //synchronised instance object with the database 532 532 $this->instance->sync(); … … 537 537 if ($this->instance->getActivityCompleted()) 538 538 { 539 // activity is interactive and completed, 539 // activity is interactive and completed, 540 540 // we have to continue the workflow 541 541 // and send any autorouted activity which could be after this one … … 554 554 if ($GLOBALS['workflow']['__leave_activity']) 555 555 { 556 // activity is interactive and the activity source set the 556 // activity is interactive and the activity source set the 557 557 // $GLOBALS[workflow][__leave_activity] it's a 'cancel' mode. 558 558 // we redirect the user to the leave activity page … … 561 561 } 562 562 else 563 { 563 { 564 564 //the activity is not completed and the user doesn't want to leave 565 565 // we loop on the form … … 570 570 } 571 571 else 572 { 572 { 573 573 // in auto mode or with non interactive activities we return engine info 574 574 // and we collect our errors, we do not let them for other objects … … 583 583 /** 584 584 * Gets the the 'Activity Completed' status 585 * 586 * @access public 587 * @return string 585 * 586 * @access public 587 * @return string 588 588 */ 589 589 function getActivityCompleted() … … 592 592 } 593 593 594 594 595 595 //----------- Instance public function mapping ------------------------------------------- 596 596 597 597 /** 598 598 * Sets the next activity to be executed, if the current activity is 599 599 * a switch activity the complete() method will use the activity setted 600 * in this method as the next activity for the instance. 600 * in this method as the next activity for the instance. 601 601 * Note that this method receives an activity name as argument (Not an Id) 602 602 * and that it does not need the activityId like the instance method 603 * 603 * 604 604 * @param string $actname name of the next activity 605 605 * @return bool 606 606 * @access public 607 607 */ 608 function setNextActivity($actname) 608 function setNextActivity($actname) 609 609 { 610 610 return $this->instance->setNextActivity($this->activity_id,$actname); … … 612 612 613 613 /** 614 * Sets the user that must perform the next 614 * Sets the user that must perform the next 615 615 * activity of the process. this effectively "assigns" the instance to 616 616 * some user 617 * 617 * 618 618 * @param int $user the next user id 619 619 * @param string $activityName The name of the activity that the user will be able to executed. '*' means the next activity. 620 * @return bool 620 * @return bool 621 621 * @access public 622 622 */ … … 631 631 632 632 /** 633 * Sets the user role that must perform the next 633 * Sets the user role that must perform the next 634 634 * activity of the process. this effectively "assigns" the instance to 635 635 * some user 636 * 636 * 637 637 * @param string $roleName the next activity role 638 638 * @param string $activityName The name of the activity that the role will be able to executed. '*' means the next activity. … … 655 655 656 656 /** 657 * Gets the user that must perform the next activity of the process. 657 * Gets the user that must perform the next activity of the process. 658 658 * This can be empty if no setNextUser() was done before. 659 659 * It wont return the default user but only the user which was assigned by a setNextUser 660 * 661 * @return int 662 * @access public 663 */ 664 function getNextUser() 660 * 661 * @return int 662 * @access public 663 */ 664 function getNextUser() 665 665 { 666 666 return $this->instance->getNextUser(); 667 667 } 668 668 669 669 /** 670 670 * Sets the name of this instance. 671 * 671 * 672 672 * @param string $value new name of the instance 673 * @return bool 674 * @access public 675 */ 676 function setName($value) 673 * @return bool 674 * @access public 675 */ 676 function setName($value) 677 677 { 678 678 return $this->instance->setName($value); … … 681 681 /** 682 682 * Gets the name of this instance 683 * 684 * @return string 683 * 684 * @return string 685 685 * @access public 686 686 */ … … 691 691 /** 692 692 * Sets the category of this instance 693 * 693 * 694 694 * @param string $value 695 695 * @return bool 696 696 * @access public 697 697 */ 698 function setCategory($value) 698 function setCategory($value) 699 699 { 700 700 return $this->instance->setcategory($value); … … 703 703 /** 704 704 * Gets category of this instance 705 * 706 * @return string 707 * @access public 708 */ 709 function getCategory() 705 * 706 * @return string 707 * @access public 708 */ 709 function getCategory() 710 710 { 711 711 return $this->instance->getCategory(); 712 712 } 713 713 714 714 /** 715 715 * Sets a property in this instance. This method is used in activities to … … 718 718 * problems (A->z, digits and _ for spaces). If you have several set to call look 719 719 * at the setProperties function. Each call to this function has an impact on database 720 * 720 * 721 721 * @param string $name property name (it will be normalized) 722 722 * @param mixed $value value for this property 723 * @return bool 724 * @access public 725 */ 726 function set($name,$value) 723 * @return bool 724 * @access public 725 */ 726 function set($name,$value) 727 727 { 728 728 return $this->instance->set($name,$value); 729 729 } 730 730 731 731 /** 732 732 * Unsets a property in this instance. This method is used in activities to … … 734 734 * All property names are normalized for security reasons and to avoid localisation 735 735 * problems (A->z, digits and _ for spaces). Each call to this function has an impact on database 736 * 736 * 737 737 * @param string $name property name (it will be normalized) 738 738 * @return bool true if it was ok 739 739 * @access public 740 740 */ 741 function clear($name) 741 function clear($name) 742 742 { 743 743 return $this->instance->clear($name); … … 749 749 * All property names are normalized for security reasons and to avoid localisation 750 750 * problems (A->z, digits and _ for spaces) 751 * 751 * 752 752 * @param string $name property name (it will be normalized) 753 753 * @return bool true if it exists and false otherwise … … 766 766 * problems (A->z, digits and _ for spaces). If you have several set to call look 767 767 * at the setProperties function. Each call to this function has an impact on database 768 * 768 * 769 769 * @param array $properties_array associative array containing for each record the 770 770 * property name as the key and the property value as the value. You do not need the complete … … 780 780 /** 781 781 * Gets the value of an instance property 782 * 782 * 783 783 * @param string $name name of the instance 784 784 * @param string $defaultValue … … 793 793 /** 794 794 * Describes the activities where the instance is present, can be more than one activity if the instance was "splitted" 795 * 795 * 796 796 * @access public 797 797 * @return array Vector of assocs 798 798 */ 799 function getActivities() 799 function getActivities() 800 800 { 801 801 return $this->instance->getActivities(); 802 802 } 803 803 804 804 /** 805 805 * Gets the instance status can be 'completed', 'active', 'aborted' or 'exception' 806 * 806 * 807 807 * @access public 808 808 * @return string Instance status 809 809 */ 810 function getStatus() 810 function getStatus() 811 811 { 812 812 return $this->instance->getStatus(); 813 813 } 814 814 815 815 /** 816 816 * Sets the instance status 817 * 817 * 818 818 * @param $status Desired status, it can be: 'completed', 'active', 'aborted' or 'exception' 819 819 * @return bool 820 820 * @access public 821 821 */ 822 function setStatus($status) 822 function setStatus($status) 823 823 { 824 824 return $this->instance->setStatus($status); 825 825 } 826 826 827 827 /** 828 828 * Gets the instance priority 829 * 830 * @access public 831 * @return int 829 * 830 * @access public 831 * @return int 832 832 */ 833 833 function getPriority() 834 834 { 835 835 return $this->instance->getPriority(); 836 } 836 } 837 837 838 838 /** 839 839 * Sets the instance priority 840 * 840 * 841 841 * @param int $priority 842 842 * @access public 843 * @return bool 843 * @return bool 844 844 */ 845 845 function setPriority($priority) … … 847 847 return $this->instance->setPriority($priority); 848 848 } 849 849 850 850 /** 851 851 * Returns the instance id 852 * 853 * @return int 854 * @access public 855 */ 856 function getInstanceId() 852 * 853 * @return int 854 * @access public 855 */ 856 function getInstanceId() 857 857 { 858 858 return $this->instance->getInstanceId(); 859 859 } 860 860 861 861 /** 862 862 * Returns the process id for this instance 863 * 864 * @return int 865 * @access public 863 * 864 * @return int 865 * @access public 866 866 */ 867 867 function getProcessId() { 868 868 return $this->instance->getProcessId(); 869 869 } 870 870 871 871 /** 872 872 * Returns the owner of the instance 873 * 874 * @return string 875 * @access public 876 */ 877 function getOwner() 873 * 874 * @return string 875 * @access public 876 */ 877 function getOwner() 878 878 { 879 879 return $this->instance->getOwner(); 880 880 } 881 881 882 882 /** 883 883 * Sets the instance owner 884 * 885 * @param string $user 886 * @access public 887 * @return bool 888 */ 889 function setOwner($user) 884 * 885 * @param string $user 886 * @access public 887 * @return bool 888 */ 889 function setOwner($user) 890 890 { 891 891 return $this->instance->setOwner($user); 892 892 } 893 893 894 894 /** 895 895 * Returns the user that must execute or is already executing an activity where the instance is present 896 * 896 * 897 897 * @param int $activityId 898 898 * @return bool False if the activity was not found for the instance, else return the user id or '*' if no user is defined yet 899 899 * @access public 900 */ 901 function getActivityUser($activityId) 900 */ 901 function getActivityUser($activityId) 902 902 { 903 903 return $this->instance->getActivityUser($activityId); 904 904 } 905 905 906 906 /** 907 907 * Sets the status of the instance in some activity 908 * 908 * 909 909 * @param int $activityId Activity id 910 910 * @param string $status New status, it can be 'running' or 'completed' 911 911 * @return bool False if no activity was found for the instance 912 912 * @access public 913 */ 914 function setActivityStatus($activityId,$status) 913 */ 914 function setActivityStatus($activityId,$status) 915 915 { 916 916 return $this->instance->setActivityStatus($activityId,$status); 917 917 } 918 919 920 /** 921 * Gets the status of the instance in some activity 922 * 923 * @param int $activityId 918 919 920 /** 921 * Gets the status of the instance in some activity 922 * 923 * @param int $activityId 924 924 * @return string 'running' or 'completed' 925 925 * @access public 926 926 */ 927 function getActivityStatus($activityId) 927 function getActivityStatus($activityId) 928 928 { 929 929 return $this->instance->getActivityStatus($activityId); 930 930 } 931 931 932 932 /** 933 933 * Resets the start time of the activity indicated to the current time 934 * 934 * 935 935 * @param int $activityId 936 * @return bool 937 * @access public 938 */ 939 function setActivityStarted($activityId) 936 * @return bool 937 * @access public 938 */ 939 function setActivityStarted($activityId) 940 940 { 941 941 return $this->instance->setActivityStarted($activityId); 942 942 } 943 943 944 944 /** 945 945 * Gets the Unix timstamp of the starting time for the given activity 946 * 946 * 947 947 * @param int $activityId 948 * @return int 949 * @access public 950 */ 951 function getActivityStarted($activityId) 948 * @return int 949 * @access public 950 */ 951 function getActivityStarted($activityId) 952 952 { 953 953 return $this->instance->getActivityStarted($activityId); 954 954 } 955 955 956 956 /** 957 957 * Gets the time where the instance was started 958 * 959 * @return int 960 * @access public 961 */ 962 function getStarted() 958 * 959 * @return int 960 * @access public 961 */ 962 function getStarted() 963 963 { 964 964 return $this->instance->getStarted(); 965 965 } 966 966 967 967 /** 968 968 * Gets the end time of the instance (when the process was completed) 969 * 970 * @return int 971 * @access public 972 */ 973 function getEnded() 969 * 970 * @return int 971 * @access public 972 */ 973 function getEnded() 974 974 { 975 975 return $this->instance->getEnded(); 976 976 } 977 978 977 978 979 979 /** 980 980 * Completes an activity. … … 982 982 * the engine does automatically complete automatic activities after 983 983 * executing them 984 * 984 * 985 985 * @return bool True or false, if false it means the complete was not done for some internal reason 986 986 * consult get_error() for more informations 987 987 * @access public 988 988 */ 989 function complete() 989 function complete() 990 990 { 991 991 if (!($this->activity->isInteractive())) … … 994 994 return false; 995 995 } 996 996 997 997 return $this->instance->complete($this->activity_id); 998 998 } … … 1001 1001 * Aborts an activity and terminates the whole instance. We still create a workitem to keep track 1002 1002 * of where in the process the instance was aborted 1003 * 1004 * @return bool 1005 * @access public 1006 */ 1007 function abort() 1003 * 1004 * @return bool 1005 * @access public 1006 */ 1007 function abort() 1008 1008 { 1009 1009 return $this->instance->abort(); 1010 1010 } 1011 1011 1012 1012 /** 1013 1013 * Gets a comment for this instance 1014 * 1014 * 1015 1015 * @param int $cId Comment id 1016 * @return string 1017 * @access public 1018 */ 1019 function get_instance_comment($cId) 1016 * @return string 1017 * @access public 1018 */ 1019 function get_instance_comment($cId) 1020 1020 { 1021 1021 return $this->instance->get_instance_comment($cId); 1022 1022 } 1023 1023 1024 1024 /** 1025 1025 * Inserts or updates an instance comment 1026 * 1026 * 1027 1027 * @param int $cId Commend id 1028 * @param int $activityId 1029 * @param object $activity 1028 * @param int $activityId 1029 * @param object $activity 1030 1030 * @param int $user User id 1031 1031 * @param string $title Comment's title 1032 1032 * @param string $comment Comment's contents 1033 * @return bool 1034 * @access public 1035 */ 1036 function replace_instance_comment($cId, $activityId, $activity, $user, $title, $comment) 1033 * @return bool 1034 * @access public 1035 */ 1036 function replace_instance_comment($cId, $activityId, $activity, $user, $title, $comment) 1037 1037 { 1038 1038 return $this->instance->replace_instance_comment($cId, $activityId, $activity, $user, $title, $comment); 1039 1039 } 1040 1040 1041 1041 /** 1042 1042 * Removes an instance comment 1043 * 1043 * 1044 1044 * @param int $cId Comment id 1045 * @return bool 1046 * @access public 1047 */ 1048 function remove_instance_comment($cId) 1045 * @return bool 1046 * @access public 1047 */ 1048 function remove_instance_comment($cId) 1049 1049 { 1050 1050 return $this->instance->remove_instance_comment($cId); 1051 1051 } 1052 1052 1053 1053 /** 1054 1054 * Lists instance comments 1055 * 1056 * @return array 1057 * @access public 1058 */ 1059 function get_instance_comments() 1055 * 1056 * @return array 1057 * @access public 1058 */ 1059 function get_instance_comments() 1060 1060 { 1061 1061 return $this->instance->get_instance_comments(); … … 1087 1087 $workflow = $GLOBALS['workflow']; 1088 1088 unset($_REQUEST['iid']); 1089 $run_activity = Factory:: getInstance('run_activity');1089 $run_activity = Factory::newInstance('run_activity'); 1090 1090 $run_activity->runtime->instance->parentInstanceId = $this->instance_id; 1091 $run_activity->runtime->instance->parentActivityId = $this->activity_id;1092 1091 $output = $run_activity->goChildInstance($activityID, $properties, $user, $parentLock); 1093 1092 $_REQUEST['iid'] = $iid; … … 1128 1127 function getParent() 1129 1128 { 1130 $resultSet = $this->query("SELECT wf_parent_instance_id, wf_parent_ activity_id, wf_parent_lock FROM egw_wf_interinstance_relations WHERE (wf_child_instance_id = ?)", array($this->getInstanceId()));1129 $resultSet = $this->query("SELECT wf_parent_instance_id, wf_parent_lock FROM egw_wf_interinstance_relations WHERE (wf_child_instance_id = ?)", array($this->getInstanceId())); 1131 1130 if (($row = $resultSet->fetchRow())) 1132 return array('instance_id' => $row['wf_parent_instance_id'], ' activity_id' => $row['wf_parent_activity_id'], 'lock' => ($row['wf_parent_lock'] == 1));1131 return array('instance_id' => $row['wf_parent_instance_id'], 'lock' => ($row['wf_parent_lock'] == 1)); 1133 1132 else 1134 1133 return false;
Note: See TracChangeset
for help on using the changeset viewer.