child_name = 'Process'; parent::Base($db); } /** * Loads a process from the database * * @param int $pId * @return bool * @access public */ function getProcess($pId) { $query = "select * from `".GALAXIA_TABLE_PREFIX."processes` where `wf_p_id`=?"; $result = $this->query($query,array($pId)); if(!$result->numRows()) return false; $res = $result->fetchRow(); $this->name = $res['wf_name']; $this->description = $res['wf_description']; $this->normalizedName = $res['wf_normalized_name']; $this->version = $res['wf_version']; $this->pId = $res['wf_p_id']; //config is load only on the first getConfigValues call } /** * Gets the process Id * * @return int * @access public */ function getProcessId() { return $this->pId; } /** * Gets the normalized name of the process * * @return string * @access public */ function getNormalizedName() { return $this->normalizedName; } /** * Gets the process name * * @return string * @access public */ function getName() { return $this->name; } /** * Gets the process version * * @return int * @access public */ function getVersion() { return $this->version; } /** * Gets information about an activity in this process by name * * @param string $actname * @return array * @access public */ function getActivityByName($actname) { // Get the activity data $query = "select * from `".GALAXIA_TABLE_PREFIX."activities` where `wf_p_id`=? and `wf_name`=?"; $pId = $this->pId; $result = $this->query($query,array($pId,$actname)); if(!$result->numRows()) return false; $res = $result->fetchRow(); return $res; } /** * Store config values for this process * * @param array $parameters pairs of (config_variables_names => (type => value)) * type can be int or text, anything else is considered text * int value of -1 is considered as 'default global configuration option'. So nothing * will be stored for this process (and existing values are erased) * @return bool * @access public */ function setConfigValues(&$parameters) { if (!is_array($parameters)) { return false; } $array_delete=array(); $array_set=array(); $pId = (string)$this->pId; foreach ($parameters as $config_var => $config_value) { //all config values will be deleted $array_delete[] = array($pId, $config_var); //foreach but normally there's only one loop foreach($config_value as $value_type => $value_zone) { $ok = true; if ($value_type=='int') { //special value, refer to global config values for this process conf variable //we don't want any value stored for this process conf variable //so we break the foreach before setting the $array_set if ($value_zone == -1) { $ok=false; break; } //else it's classic $value_int = $value_zone; $value= ''; } else { $value = $value_zone; $value_int = null; } } //we are going to set this config value if $ok says so if ($ok) $array_set[] = array($config_var, $value, $value_int, $pId); } //delete previous config values if they are in a bulk statement if (count($array_delete)>0) { $result= $this->query("DELETE from ".GALAXIA_TABLE_PREFIX."process_config where wf_p_id=? and wf_config_name=?",$array_delete, -1,-1,true,'',true); } //insert in a bulk statement if (count($array_set)>0) { $result= $this->query("INSERT into ".GALAXIA_TABLE_PREFIX."process_config (wf_config_name,wf_config_value,wf_config_value_int,wf_p_id) values (?,?,?,?)" ,$array_set, -1,-1,true,'', true); } } /** * Gets all the process configuration values. The configuration data is then cached for this process object life * * @param array $parameters pairs of (config_variables_names => default_values) * For a variable name which has no previous value and no global value (default process value) * it will return default_value and this default value will be the NEW STORED value * If no default value is given we assume it's a false * @return array * @access public */ function getConfigValues(&$parameters) { if (!is_array($parameters)) { return false; } if (count($this->config) == 0) { // first time we come // Get all the config data for this process $query = "select * from ".GALAXIA_TABLE_PREFIX."process_config where wf_p_id=?"; $pId = $this->pId; $result = $this->query($query,array($pId)); if($result->numRows()>0) { //we add process datas for some config_name, we store it in $this->config while ($res=$result->fetchRow()) { //int values are not stored in the same field $int_value= $res['wf_config_value_int']; if (isset($int_value)) { $this->config[$res['wf_config_name']] = $int_value; } else { $this->config[$res['wf_config_name']] = $res['wf_config_value']; } } } }// the second time we jump here //parse config_name asked $local_array = array(); $global_default_array = array(); foreach ($parameters as $config_var => $default_value) { if (isset($this->config[$config_var])) {// we already know this config value //echo "
ok we had one for ".$config_var; $local_array[$config_var] = $this->config[$config_var]; } else { // we have no value for it here, we'll ask it in the global conf //echo "
we had nothing for ".$config_var; $global_default_array[$config_var] = $default_value; } } // if we have some not set value that we need to check in global conf if (count($global_default_array) > 0) { $global_array =& galaxia_get_config_values($global_default_array); } $result = (array)$local_array + (array)$global_array; return $result; } } ?>