true, ); /** * @var object $t the template * @access public */ var $t; /** * @var int wf_p_id * @access public */ var $wf_p_id; /** * @var array $message message array * @access public */ var $message = array(); //TODO: when migration to bo_workflow_forms will be closed erase theses vars-------------- //nextmatchs (max number of rows per page) and associated vars /** * @var int $nextmatchs * @access public */ var $nextmatchs; /** * @var int $start actual starting row number * @access public */ var $start; /** * @var int $total_records total number of rows * @access public */ var $total_records; /** * @var array $message message array column used for order * @access public */ var $order; /** * @var string $sort ASC or DESC * @access public */ var $sort; /** * @var array $sort_mode combination of order and sort * @access public */ var $sort_mode; /** * @var array $search_str * @access public */ var $search_str; //------------------------------------------------------------------------------------------ /** * @var array $stats * @access public */ var $stats; /** * @var array $wheres * @access public */ var $wheres = array(); /** * Constructor of workflow class * * @access public * @return void */ function WorkflowUtils() { // check version if (alessthanb($GLOBALS['phpgw_info']['apps']['workflow']['version'], '1.2.01.006')) { $GLOBALS['phpgw']->common->phpgw_header(); echo parse_navbar(); die("Please upgrade this application to be able to use it"); } $this->t =& $GLOBALS['phpgw']->template; $this->wf_p_id = (int)get_var('p_id', 'any', 0); $this->start = (int)get_var('start', 'any', 0); $this->search_str = get_var('find', 'any', ''); $this->nextmatchs = CreateObject('phpgwapi.nextmatchs'); } /** * Fill the process bar * * @param array $proc_info * @access public * @return string */ function fill_proc_bar($proc_info) { //echo "proc_info:
";print_r($proc_info);echo "
"; $this->t->set_file('proc_bar_tpl', 'proc_bar.tpl'); $templateServer = &Factory::getInstance('TemplateServer'); if ($proc_info['wf_is_valid'] == 'y') { $dot_color = 'green'; $alt_validity = lang('valid'); } else { $dot_color = 'red'; $alt_validity = lang('invalid'); } // if process is active show stop button. Else show start button, but only if it is valid. If it's not valid, don't show any activation or stop button. if ($proc_info['wf_is_active'] == 'y') { $start_stop = ''. lang('stop') .''.lang('stop').''; } elseif ($proc_info['wf_is_valid'] == 'y') { $start_stop = ''. lang('activate') .''.lang('activate').''; } else { $start_stop = ''; } $this->t->set_var(array( 'proc_name' => $proc_info['wf_name'], 'version' => $proc_info['wf_version'], 'img_validity' => $templateServer->generateImageLink($dot_color.'_dot.gif'), 'alt_validity' => $alt_validity, 'start_stop' => $start_stop, 'link_admin_activities' => $GLOBALS['phpgw']->link('/index.php', 'menuaction=workflow.ui_adminactivities.form&p_id='. $proc_info['wf_p_id']), 'img_activity' => $templateServer->generateImageLink('Activity.gif'), 'link_admin_jobs' => $GLOBALS['phpgw']->link('/index.php', 'menuaction=workflow.ui_adminjobs.form&p_id='. $proc_info['wf_p_id']), 'img_job' => $templateServer->generateImageLink('clock.png'), 'link_admin_processes' => $GLOBALS['phpgw']->link('/index.php', 'menuaction=workflow.ui_adminprocesses.form&p_id='. $proc_info['wf_p_id']), 'img_change' => $templateServer->generateImageLink('change.gif'), 'link_admin_shared_source' => $GLOBALS['phpgw']->link('/index.php', 'menuaction=workflow.ui_adminsource.form&p_id='. $proc_info['wf_p_id']), 'img_code' => $templateServer->generateImageLink('code.png'), 'link_admin_export' => $GLOBALS['phpgw']->link('/index.php', 'menuaction=workflow.WorkflowUtils.export&p_id='. $proc_info['wf_p_id']), 'link_admin_roles' => $GLOBALS['phpgw']->link('/index.php', 'menuaction=workflow.ui_adminroles.form&p_id='. $proc_info['wf_p_id']), 'img_roles' => $templateServer->generateImageLink('roles.png'), 'link_graph' => $GLOBALS['phpgw']->link('/index.php', 'menuaction=workflow.ui_adminactivities.show_graph&p_id=' . $proc_info['wf_p_id']), 'img_process' => $templateServer->generateImageLink('Process.gif'), 'link_save_process' => $GLOBALS['phpgw']->link('/index.php', 'menuaction=workflow.ui_adminprocesses.save_process&id='. $proc_info['wf_p_id']), 'img_save' => $templateServer->generateImageLink('save.png') )); $this->translate_template('proc_bar_tpl'); return $this->t->parse('proc_bar', 'proc_bar_tpl'); } /** * Select activity representation icon * * @var string $type type of activity * @var bool $interactive interactive? * @access public * @return void */ function act_icon($type, $interactive) { switch($type) { case 'activity': $ic = "mini_".(($interactive == 'y')? 'blue_':'')."rectangle.gif"; break; case 'switch': $ic = "mini_".(($interactive == 'y')? 'blue_':'')."diamond.gif"; break; case 'start': $ic="mini_".(($interactive == 'y')? 'blue_':'')."circle.gif"; break; case 'end': $ic="mini_".(($interactive == 'y')? 'blue_':'')."dbl_circle.gif"; break; case 'split': $ic="mini_".(($interactive == 'y')? 'blue_':'')."triangle.gif"; break; case 'join': $ic="mini_".(($interactive == 'y')? 'blue_':'')."inv_triangle.gif"; break; case 'standalone': $ic="mini_".(($interactive == 'y')? 'blue_':'')."hexagon.gif"; break; case 'view': $ic="mini_blue_eyes.gif"; break; default: $ic="no-activity.gif"; } return ''. lang($type) .''; } /** * Translate template file * @param string $template_name template name * @return void * @access public */ function translate_template($template_name) { $undef = $this->t->get_undefined($template_name); if ($undef != False) { foreach ($undef as $value) { $valarray = explode('_', $value); $type = array_shift($valarray); $newval = implode(' ', $valarray); if ($type == 'lang') { $this->t->set_var($value, lang($newval)); } } } } /** * Show errors * @param object $activity_manager * @param string $error_str destination string to place errors * @return bool * @access public */ function show_errors(&$activity_manager, &$error_str) { $valid = $activity_manager->validate_process_activities($this->wf_p_id); $errors = $activity_manager->get_error(true); $warnings = $activity_manager->get_warning(true); $tmp = array(); /* remove empty errors from the error list */ foreach ($errors as $index => $error) if (trim($error) == '') unset($errors[$index]); if ((count($warnings) > 0) || (count($errors) > 0)) { $error_str = ''; $output = 'y'; if (count($errors) > 0) { $error_str = '' . lang('The following items must be corrected to be able to activate this process').':
'; $output = 'n'; } if (count($warnings) > 0) { if ($error_str != '') $error_str .= "
"; $error_str .= '' . lang('warnings in this process').':
'; } return $output; } else { $error_str = ''; return 'y'; } } /** * Get source code * @param string $proc_name process name * @param string $act_name activity name * @param string $type actyvity type * @access public * @return string source code dat */ function get_source($proc_name, $act_name, $type) { switch($type) { case 'code': $path = 'activities' . SEP . $act_name . '.php'; break; case 'template': $path = 'templates' . SEP . $act_name . '.tpl'; break; default: $path = 'shared.php'; break; } $complete_path = GALAXIA_PROCESSES . SEP . $proc_name . SEP . 'code' . SEP . $path; if (!$file_size = filesize($complete_path)) return ''; $fp = fopen($complete_path, 'r'); $data = fread($fp, $file_size); fclose($fp); return $data; } /** * Save the source of process * * @param string $proc_name process name * @param string $act_name activity name * @param string $type type of activity * @param string $source source code of activity * @return void * @access public */ function save_source($proc_name, $act_name, $type, $source) { // in case code was filtered if (!$source) $source = @$GLOBALS['egw_unset_vars']['_POST[source]']; switch($type) { case 'code': $path = 'activities' . SEP . $act_name . '.php'; break; case 'template': $path = 'templates' . SEP . $act_name . '.tpl'; break; default: $path = 'shared.php'; break; } $complete_path = GALAXIA_PROCESSES . SEP . $proc_name . SEP . 'code' . SEP . $path; // In case you want to be warned when source code is changed: // mail('yourmail@domain.com', 'source changed', "PATH: $complete_path \n\n SOURCE: $source"); $fp = fopen($complete_path, 'w'); fwrite($fp, $source); fclose($fp); } /** * Export process to a xml file to be downloaded * @access public * @return void */ function export() { $this->process_manager = CreateObject('workflow.workflow_processmanager'); // retrieve process info $proc_info = $this->process_manager->get_process($this->wf_p_id); $filename = $proc_info['wf_normalized_name'].'.xml'; $out = $this->process_manager->serialize_process($this->wf_p_id); $mimetype = 'application/xml'; // MSIE5 and Opera show allways the document if they recognise. But we want to oblige them do download it, so we use the mimetype x-download: if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5') || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 7')) $mimetype = 'application/x-download'; // Show appropiate header for a file to be downloaded: header("content-disposition: attachment; filename=$filename"); header("content-type: $mimetype"); header('content-length: ' . strlen($out)); echo $out; } /** * Get the href link for the css file, searching for themes specifics stylesheet if any * @param string $css_name is the name of the css file, without the .css extension * @param bool $print_mode is false by default, if true '_print.css' is appended to the name if this css print file exists * @return string a string containing the link to a css file that you can use in a href, you'll have at least a link * to a non-existent css in template/default/css/ * @access public */ function get_css_link($css_name, $print_mode = false) { $file = "css/$css_name" . (($print_mode !== false) ? '_print' : '') . '.css'; return Factory::getInstance('TemplateServer')->getWebFile($file); } /** * Return a given duration in human readable form, usefull for workitems duration * @param int $to given duration * @return string given duration in human readable form * @access public */ function time_diff($to) { $days = (int)($to/(24*3600)); $to = $to - ($days*(24*3600)); $hours = (int)($to/3600); $to = $to - ($hours*3600); $min = date("i", $to); $to = $to - ($min*60); $sec = date("s", $to); return lang('%1 days, %2:%3:%4',$days,$hours,$min,$sec); } } ?>