From 2af48ad3e4db33f358e98386b3eaaccdd2d07e12 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 21 Nov 2017 11:06:26 -0400 Subject: [PATCH] HOR-3746 --- workflow/engine/plugins/openFlash.php | 35 - .../engine/plugins/openFlash/chart-data.php | 14 - workflow/engine/plugins/openFlash/chart.php | 11 - .../plugins/openFlash/class.openFlash.php | 428 ---- .../plugins/openFlash/open-flash-chart.php | 1769 ----------------- .../openFlash/open_flash_chart_object.php | 109 - .../public_html/open-flash-chart.swf | Bin 64600 -> 0 bytes .../openFlash/public_html/swfobject.js | 233 --- .../engine/plugins/openFlash/setupPage.xml | 20 - workflow/engine/plugins/pmosCommunity.php | 35 - .../plugins/pmosCommunity/chart-data.php | 14 - .../engine/plugins/pmosCommunity/chart.php | 11 - .../pmosCommunity/class.pmosCommunity.php | 477 ----- .../pmosCommunity/config/databases.php | 9 - .../plugins/pmosCommunity/config/setup.conf | 1 - .../plugins/pmosCommunity/drawChart.php | 14 - .../pmosCommunity/open-flash-chart.php | 1769 ----------------- .../pmosCommunity/open_flash_chart_object.php | 109 - .../public_html/open-flash-chart.swf | Bin 64600 -> 0 bytes .../pmosCommunity/public_html/swfobject.js | 233 --- .../plugins/pmosCommunity/setupPage.xml | 20 - 21 files changed, 5311 deletions(-) delete mode 100644 workflow/engine/plugins/openFlash.php delete mode 100644 workflow/engine/plugins/openFlash/chart-data.php delete mode 100644 workflow/engine/plugins/openFlash/chart.php delete mode 100644 workflow/engine/plugins/openFlash/class.openFlash.php delete mode 100644 workflow/engine/plugins/openFlash/open-flash-chart.php delete mode 100644 workflow/engine/plugins/openFlash/open_flash_chart_object.php delete mode 100644 workflow/engine/plugins/openFlash/public_html/open-flash-chart.swf delete mode 100644 workflow/engine/plugins/openFlash/public_html/swfobject.js delete mode 100644 workflow/engine/plugins/openFlash/setupPage.xml delete mode 100644 workflow/engine/plugins/pmosCommunity.php delete mode 100644 workflow/engine/plugins/pmosCommunity/chart-data.php delete mode 100644 workflow/engine/plugins/pmosCommunity/chart.php delete mode 100644 workflow/engine/plugins/pmosCommunity/class.pmosCommunity.php delete mode 100644 workflow/engine/plugins/pmosCommunity/config/databases.php delete mode 100644 workflow/engine/plugins/pmosCommunity/config/setup.conf delete mode 100644 workflow/engine/plugins/pmosCommunity/drawChart.php delete mode 100644 workflow/engine/plugins/pmosCommunity/open-flash-chart.php delete mode 100644 workflow/engine/plugins/pmosCommunity/open_flash_chart_object.php delete mode 100644 workflow/engine/plugins/pmosCommunity/public_html/open-flash-chart.swf delete mode 100644 workflow/engine/plugins/pmosCommunity/public_html/swfobject.js delete mode 100644 workflow/engine/plugins/pmosCommunity/setupPage.xml diff --git a/workflow/engine/plugins/openFlash.php b/workflow/engine/plugins/openFlash.php deleted file mode 100644 index e91fd3302..000000000 --- a/workflow/engine/plugins/openFlash.php +++ /dev/null @@ -1,35 +0,0 @@ -sFriendlyName = 'openFlash Plugin'; - $this->sDescription = 'Charts Plugin, with this plugin you can see many differents charts using interactive flash charts for ProcessMaker'; - $this->sPluginFolder = 'openFlash'; - $this->sSetupPage = 'setupPage'; - $this->aWorkspaces = array ( ); - $this->aWorkspaces = array ( 'dev'); - $this->iVersion = 0.45; - return $res; - } - - function setup() - { - $this->registerDashboard(); - } - - function install() - { - - } - } - - $oPluginRegistry =& PMPluginRegistry::getSingleton(); - $oPluginRegistry->registerPlugin('openFlash', __FILE__); - - - - - diff --git a/workflow/engine/plugins/openFlash/chart-data.php b/workflow/engine/plugins/openFlash/chart-data.php deleted file mode 100644 index a0dbb6a22..000000000 --- a/workflow/engine/plugins/openFlash/chart-data.php +++ /dev/null @@ -1,14 +0,0 @@ -{$chartType}(); - die; - } - diff --git a/workflow/engine/plugins/openFlash/chart.php b/workflow/engine/plugins/openFlash/chart.php deleted file mode 100644 index 78d8c1975..000000000 --- a/workflow/engine/plugins/openFlash/chart.php +++ /dev/null @@ -1,11 +0,0 @@ -sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf'; - if ( !file_exists( dirname($fileConf) ) ) - throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist." ) ); - - if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) ) - throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) ); - - if ( file_exists ( $fileConf ) ) { - $content = file_get_contents ( $fileConf); - $fields = unserialize ($content); - } - else - $fields = array(); - return $fields; - } - - function updateFieldsForPageSetup ( $oData) { - $content = serialize ($oData['form']); - $fileConf = PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf'; - if ( !is_writable( dirname($fileConf) ) ) - throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist or this directory is not writable." ) ); - - if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) ) - throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) ); - - file_put_contents ( $fileConf, $content); - return true; - } - - function setup() { - } - - function getChart( $chartName ) { - $this->readConfig(); - $prePath = '/sys' . config("system.workspace") . '/' . SYS_LANG . '/blank/'; - $obj = new StdClass(); - $obj->title = 'Standard ProcessMaker Reports'; - $obj->height = 220; - $obj->open->url = $prePath . 'openFlash/chart?chart=' . $chartName . "&u="; - return $obj; - } - - //here we are defining the available charts, the dashboard setup will call this function to know the charts - function getAvailableCharts( ) { - return array ( - 'CasesByStatus', - 'CasesByStatusPie', - 'CasesByProcess', - 'CasesByProcessPie' - ); - } - - /* definition of all charts */ - /* that definition comes in two parts : - /* 1. the getXX () function to get the data from the databases - /* 2. the XX () function to draw the graph - */ - - /** chart getCasesByStatus ***/ - /** to show the Cases grouped by Status*/ - function getCasesByStatus ( ) { - $dataSet = array(); - - $c = new Criteria('workflow'); - $c->clearSelectColumns(); - $c->addSelectColumn ( ApplicationPeer::APP_STATUS ); - $c->addSelectColumn ( 'COUNT(*) AS CANT') ; - $c->addGroupByColumn(ApplicationPeer::APP_STATUS); - $rs = ApplicationPeer::doSelectRS( $c ); - $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['APP_STATUS']; - $data[] = (int)$row['CANT']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $aux = intval($max / 6 ) * 6 + 6; - $dataSet['max'] = $aux; - return $dataSet; - } - - function CasesByStatus( ) { - $dataSet = $this->getCasesByStatus(); - $data = $dataSet['data']; - //$series2 = $dataSet['series2']; - $g = new graph(); - $g->title( ' Cases by Status ', '{font-size: 14px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'cases', 10 ); - $bar_red->data = $data; - - $g->data_sets[] = $bar_red; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $dataSet['max'] ); - $g->y_label_steps( 6 ); - //$g->set_y_legend( 'Posts', 12, '#736AFF' ); - echo $g->render(); - } - - function CasesByStatusPie ( ) { - $g->bg_colour = '#FFFFFF'; - $dataSet = $this->getCasesByStatus(); - $data = $dataSet['data']; - $g = new graph(); - $g->pie(80,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810','#D54C78') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Cases by Status', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - } - - /** chart CasesByProcess ***/ - /** to show the cases grouped by Process */ - function getCasesByProcess ( ) { - $dataSet = array(); - $processObj = new Process; - - $c = new Criteria('workflow'); - $c->clearSelectColumns(); - $c->addSelectColumn ( ApplicationPeer::PRO_UID ); - $c->addSelectColumn ( 'COUNT(*) AS CANT') ; - //$c->addJoin( ProcessPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); - $c->addGroupByColumn(ApplicationPeer::PRO_UID); - $rs = ApplicationPeer::doSelectRS( $c ); - $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $processObj->load ( $row['PRO_UID'] ); - $label[] = $processObj->getProTitle(); - $labelPie[] = substr ( $processObj->getProTitle(),0,16 ); - $data[] = (int)$row['CANT']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - $dataSet['labelPie'] = $labelPie; - - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $aux = intval($max / 6 ) * 6 + 6; - $dataSet['max'] = $aux; - return $dataSet; - } - - function CasesByProcess( ) { - $dataSet = $this->getCasesByProcess(); - $data = $dataSet['data']; - //$series2 = $dataSet['series2']; - $g = new graph(); - $g->title( ' Cases by Process ', '{font-size: 14px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'cases', 10 ); - $bar_red->data = $data; - - $g->data_sets[] = $bar_red; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $dataSet['max'] ); - $g->y_label_steps( 6 ); - echo $g->render(); - } - - function CasesByProcessPie ( ) { - $g->bg_colour = '#FFFFFF'; - $dataSet = $this->getCasesByProcess(); - $data = $dataSet['data']; - $g = new graph(); - $g->pie(80,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['labelPie'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810','#D54C78') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Cases by Process', '{font-size:16px; color: #d01f3c}' ); - echo $g->render(); - } -/* - function getForumWeek ( ) { - $databases = PATH_PLUGINS . "/openFlash/config/databases.php"; - Propel::init( $databases ); - - $dataSet = array(); - $processObj = new Process; - $past2months = mktime(0, 0, 0, date("m") -2 , date("d"), date("Y")); - - $con = Propel::getConnection('forum'); - $sql = "select week(FROM_UNIXTIME(post_time )) as week ,count(*) as cant from phpbb_posts where post_time > $past2months group by week " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = date ( 'M d', mktime(0, 0, 0, 1 , $row['week']*7, date("Y")) ); - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function ForumWeek ( ) { - $dataSet = $this->getForumWeek(); - $data = $dataSet['data']; - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $g = new graph(); - $g->title( ' Posts by Week ', '{font-size: 16px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'week', 10 ); - $bar_red->data = $data; - - $g->data_sets[] = $bar_red; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $max ); - $g->y_label_steps( 5 ); - $g->set_y_legend( 'Posts', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart PostByUser ***/ - /** to show the last 7 days grouped by user * / - function getPostByUser ( ) { - $databases = PATH_PLUGINS . "/openFlash/config/databases.php"; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('forum'); - - $past7days = mktime(0, 0, 0, date("m") , date("d")-7, date("Y")); - $sql = "select username, count(*) as cant from phpbb_posts left join phpbb_users on ( poster_id = user_id ) where post_time > $past7days group by username " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['username']; - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - //$dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function PostByUser ( ) { - $dataSet = $this->getPostByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $max = intval($max / 4 ) * 4 + 4; - - $bar_red = new bar_3d( 50, '#356aa0' ); - $bar_red->key( 'posts', 10 ); - $bar_red->data = $data; - - $bar_blue = new bar_3d( 75, '#D54C78' ); - $bar_blue->key( 'completed', 10 ); - $bar_blue->data = $data; - - $g->data_sets[] = $bar_red; - //$g->data_sets[] = $bar_blue; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $max ); - $g->y_label_steps( 4 ); - $g->set_y_legend( 'Processmaker', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart BugsByStatus ***/ - /** to show the bugs by status resolved, open, closed * / - function getBugsByStatus ( ) { - $databases = PATH_PLUGINS . "/openFlash/config/databases.php"; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('bugs'); - - //open - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status in (20,30,40,50) " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'open'; - $data[] = $row['cant']; - - //resolved - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status = 80" ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'resolved'; - $data[] = $row['cant']; - - //closed - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status = 90" ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'closed'; - $data[] = $row['cant']; - - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function BugsByStatus ( ) { - $dataSet = $this->getBugsByStatus(); - $data = $dataSet['data']; - $g = new graph(); - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - - $g->pie(70,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Bugs by Status', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - } - - /** chart BugsOpenByUser ***/ - /** to show the bugs in OPEN status by user * / - function getBugsOpenByUser ( ) { - $databases = PATH_PLUGINS . "/openFlash/config/databases.php"; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('bugs'); - - $sql = "SELECT username, count(*) as cant FROM mantis_bug_table left join mantis_user_table on ( mantis_user_table.id = handler_id) where project_id = 31 and status in (20,30,40,50) group by username " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['username']; - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function BugsOpenByUser ( ) { - $g->bg_colour = '#EFFFEF'; - $dataSet = $this->getBugsOpenByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->pie(80,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810','#D54C78') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Open Bugs by User', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - } - -/*******/ - - - - - - - - -} diff --git a/workflow/engine/plugins/openFlash/open-flash-chart.php b/workflow/engine/plugins/openFlash/open-flash-chart.php deleted file mode 100644 index b1cd90627..000000000 --- a/workflow/engine/plugins/openFlash/open-flash-chart.php +++ /dev/null @@ -1,1769 +0,0 @@ -data_sets = array(); - - - $this->data = array(); - $this->links = array(); - $this->width = 250; - $this->height = 200; - $this->js_path = '/images/'; - $this->swf_path = ''; - $this->x_labels = array(); - $this->y_min = ''; - $this->y_max = ''; - $this->x_min = ''; - $this->x_max = ''; - $this->y_steps = ''; - $this->title = ''; - $this->title_style = ''; - $this->occurence = 0; - - $this->x_offset = ''; - - $this->x_tick_size = -1; - - $this->y2_max = ''; - $this->y2_min = ''; - - // GRID styles: - $this->x_axis_colour = ''; - $this->x_axis_3d = ''; - $this->x_grid_colour = ''; - $this->x_axis_steps = 1; - $this->y_axis_colour = ''; - $this->y_grid_colour = ''; - $this->y2_axis_colour = ''; - - // AXIS LABEL styles: - $this->x_label_style = ''; - $this->y_label_style = ''; - $this->y_label_style_right = ''; - - - // AXIS LEGEND styles: - $this->x_legend = ''; - $this->x_legend_size = 20; - $this->x_legend_colour = '#000000'; - - $this->y_legend = ''; - $this->y_legend_right = ''; - //$this->y_legend_size = 20; - //$this->y_legend_colour = '#000000'; - - $this->lines = array(); - $this->line_default['type'] = 'line'; - $this->line_default['values'] = '3,#87421F'; - $this->js_line_default = 'so.addVariable("line","3,#87421F");'; - - $this->bg_colour = ''; - $this->bg_image = ''; - - $this->inner_bg_colour = ''; - $this->inner_bg_colour_2 = ''; - $this->inner_bg_angle = ''; - - // PIE chart ------------ - $this->pie = ''; - $this->pie_values = ''; - $this->pie_colours = ''; - $this->pie_labels = ''; - - $this->tool_tip = ''; - - // which data lines are attached to the - // right Y axis? - $this->y2_lines = array(); - - // Number formatting: - $this->y_format=''; - $this->num_decimals=''; - $this->is_fixed_num_decimals_forced=''; - $this->is_decimal_separator_comma=''; - $this->is_thousand_separator_disabled=''; - - $this->output_type = ''; - - // - // set some default value incase the user forgets - // to set them, so at least they see *something* - // even is it is only the axis and some ticks - // - $this->set_y_min( 0 ); - $this->set_y_max( 20 ); - $this->set_x_axis_steps( 1 ); - $this->y_label_steps( 5 ); - } - - /** - * Set the unique_id to use for the flash object id. - */ - function set_unique_id() - { - $this->unique_id = uniqid(rand(), true); - } - - /** - * Get the flash object ID for the last rendered object. - */ - function get_unique_id() - { - return ($this->unique_id); - } - - /** - * Set the base path for the swfobject.js - * - * @param base_path a string argument. - * The path to the swfobject.js file - */ - function set_js_path($path) - { - $this->js_path = $path; - } - - /** - * Set the base path for the open-flash-chart.swf - * - * @param path a string argument. - * The path to the open-flash-chart.swf file - */ - function set_swf_path($path) - { - $this->swf_path = $path; - } - - /** - * Set the type of output data. - * - * @param type a string argument. - * The type of data. Currently only type is js, or nothing. - */ - function set_output_type($type) - { - $this->output_type = $type; - } - - /** - * returns the next line label for multiple lines. - */ - function next_line() - { - $line_num = ''; - if( count( $this->lines ) > 0 ) - $line_num = '_'. (count( $this->lines )+1); - - return $line_num; - } - - // escape commas (,) - function esc( $text ) - { - // we replace the comma so it is not URL escaped - // if it is, flash just thinks it is a comma - // which is no good if we are splitting the - // string on commas. - $tmp = str_replace( ',', '#comma#', $text ); - //$tmp = utf8_encode( $tmp ); - // now we urlescape all dodgy characters (like & % $ etc..) - return urlencode( $tmp ); - } - - /** - * Format the text to the type of output. - */ - function format_output($function,$values) - { - if($this->output_type == 'js') - { - $tmp = 'so.addVariable("'. $function .'","'. $values . '");'; - } - else - { - $tmp = '&'. $function .'='. $values .'&'; - } - - return $tmp; - } - - /** - * Set the text and style of the title. - * - * @param title a string argument. - * The text of the title. - * @param style a string. - * CSS styling of the title. - */ - function set_title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the width of the chart. - * - * @param width an int argument. - * The width of the chart frame. - */ - function set_width( $width ) - { - $this->width = $width; - } - - /** - * Set the height of the chart. - * - * @param height an int argument. - * The height of the chart frame. - */ - function set_height( $height ) - { - $this->height = $height; - } - - /** - * Set the base path of the swfobject. - * - * @param base a string argument. - * The base path of the swfobject. - */ - function set_base( $base='/images/' ) - { - $this->base = $base; - } - - // Number formatting: - function set_y_format( $val ) - { - $this->y_format = $val; - } - - function set_num_decimals( $val ) - { - $this->num_decimals = $val; - } - - function set_is_fixed_num_decimals_forced( $val ) - { - $this->is_fixed_num_decimals_forced = $val?'true':'false'; - } - - function set_is_decimal_separator_comma( $val ) - { - $this->is_decimal_separator_comma = $val?'true':'false'; - } - - function set_is_thousand_separator_disabled( $val ) - { - $this->is_thousand_separator_disabled = $val?'true':'false'; - } - - /** - * Set the data for the chart - * @param a an array argument. - * An array of the data to add to the chart. - */ - function set_data( $a ) - { - $this->data[] = implode(',',$a); - } - - // UGH, these evil functions are making me fell ill - function set_links( $links ) - { - // TO DO escape commas: - $this->links[] = implode(',',$links); - } - - // $val is a boolean - function set_x_offset( $val ) - { - $this->x_offset = $val?'true':'false'; - } - - /** - * Set the tooltip to be displayed on each chart item.\n - * \n - * Replaceable tokens that can be used in the string include: \n - * #val# - The actual value of whatever the mouse is over. \n - * #key# - The key string. \n - * \
- New line. \n - * #x_label# - The X label string. \n - * #x_legend# - The X axis legend text. \n - * Default string is: "#x_label#
#val#" \n - * - * @param tip a string argument. - * A formatted string to show as the tooltip. - */ - function set_tool_tip( $tip ) - { - $this->tool_tip = $this->esc( $tip ); - } - - /** - * Set the x axis labels - * - * @param a an array argument. - * An array of the x axis labels. - */ - function set_x_labels( $a ) - { - $tmp = array(); - foreach( $a as $item ) - $tmp[] = $this->esc( $item ); - $this->x_labels = $tmp; - } - - /** - * Set the look and feel of the x axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - * @param orientation an int argument. - * The orientation of the x-axis text. - * 0 - Horizontal - * 1 - Vertical - * 2 - 45 degrees - * @param step an int argument. - * Show the label on every $step label. - * @param grid_colour a string argument. - */ - function set_x_label_style( $size, $colour='', $orientation=0, $step=-1, $grid_colour='' ) - { - $this->x_label_style = $size; - - if( strlen( $colour ) > 0 ) - $this->x_label_style .= ','. $colour; - - if( $orientation > -1 ) - $this->x_label_style .= ','. $orientation; - - if( $step > 0 ) - $this->x_label_style .= ','. $step; - - if( strlen( $grid_colour ) > 0 ) - $this->x_label_style .= ','. $grid_colour; - } - - /** - * Set the background colour. - * @param colour a string argument. - * The hex colour value. - */ - function set_bg_colour( $colour ) - { - $this->bg_colour = $colour; - } - - /** - * Set a background image. - * @param url a string argument. - * The location of the image. - * @param x a string argument. - * The x location of the image. 'Right', 'Left', 'Center' - * @param y a string argument. - * The y location of the image. 'Top', 'Bottom', 'Middle' - */ - function set_bg_image( $url, $x='center', $y='center' ) - { - $this->bg_image = $url; - $this->bg_image_x = $x; - $this->bg_image_y = $y; - } - - /** - * Attach a set of data (a line, area or bar chart) to the right Y axis. - * @param data_number an int argument. - * The numbered order the data was attached using set_data. - */ - function attach_to_y_right_axis( $data_number ) - { - $this->y2_lines[] = $data_number; - } - - /** - * Set the background colour of the grid portion of the chart. - * @param col a string argument. - * The hex colour value of the background. - * @param col2 a string argument. - * The hex colour value of the second colour if you want a gradient. - * @param angle an int argument. - * The angle in degrees to make the gradient. - */ - function set_inner_background( $col, $col2='', $angle=-1 ) - { - $this->inner_bg_colour = $col; - - if( strlen($col2) > 0 ) - $this->inner_bg_colour_2 = $col2; - - if( $angle != -1 ) - $this->inner_bg_angle = $angle; - } - - /** - * Internal function to build the y label style for y and y2 - */ - function _set_y_label_style( $size, $colour ) - { - $tmp = $size; - - if( strlen( $colour ) > 0 ) - $tmp .= ','. $colour; - return $tmp; - } - - /** - * Set the look and feel of the y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_label_style( $size, $colour='' ) - { - $this->y_label_style = $this->_set_y_label_style( $size, $colour ); - } - - /** - * Set the look and feel of the right y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_right_label_style( $size, $colour='' ) - { - $this->y_label_style_right = $this->_set_y_label_style( $size, $colour ); - } - - function set_x_max( $max ) - { - $this->x_max = floatval( $max ); - } - - function set_x_min( $min ) - { - $this->x_min = floatval( $min ); - } - - /** - * Set the maximum value of the y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_max( $max ) - { - $this->y_max = floatval( $max ); - } - - /** - * Set the minimum value of the y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_min( $min ) - { - $this->y_min = floatval( $min ); - } - - /** - * Set the maximum value of the right y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_right_max( $max ) - { - $this->y2_max = floatval($max); - } - - /** - * Set the minimum value of the right y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_right_min( $min ) - { - $this->y2_min = floatval($min); - } - - /** - * Show the y label on every $step label. - * - * @param val an int argument. - * Show the label on every $step label. - */ - function y_label_steps( $val ) - { - $this->y_steps = intval( $val ); - } - - function title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the parameters of the x legend. - * - * @param text a string argument. - * The text of the x legend. - * @param font_size an int argument. - * The font size of the x legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_x_legend( $text, $size=-1, $colour='' ) - { - $this->x_legend = $this->esc( $text ); - if( $size > -1 ) - $this->x_legend_size = $size; - - if( strlen( $colour )>0 ) - $this->x_legend_colour = $colour; - } - - /** - * Set the size of the x label ticks. - * - * @param size an int argument. - * The size of the ticks in pixels. - */ - function set_x_tick_size( $size ) - { - if( $size > 0 ) - $this->x_tick_size = $size; - } - - /** - * Set how often you would like to show a tick on the x axis. - * - * @param steps an int argument. - * Show a tick ever $steps. - */ - function set_x_axis_steps( $steps ) - { - if ( $steps > 0 ) - $this->x_axis_steps = $steps; - } - - /** - * Set the depth in pixels of the 3D X axis slab. - * - * @param size an int argument. - * The depth in pixels of the 3D X axis. - */ - function set_x_axis_3d( $size ) - { - if( $size > 0 ) - $this->x_axis_3d = intval($size); - } - - /** - * The private method of building the y legend output. - */ - function _set_y_legend( $text, $size, $colour ) - { - $tmp = $text; - - if( $size > -1 ) - $tmp .= ','. $size; - - if( strlen( $colour )>0 ) - $tmp .= ','. $colour; - - return $tmp; - } - - /** - * Set the parameters of the y legend. - * - * @param text a string argument. - * The text of the y legend. - * @param font_size an int argument. - * The font size of the y legend text. - * @param colour a string argument - * The hex colour value of the font colour. - */ - function set_y_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the parameters of the right y legend. - * - * @param text a string argument. - * The text of the right y legend. - * @param font_size an int argument. - * The font size of the right y legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_y_right_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend_right = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the colour of the x axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the x axis line. - * @param grid a string argument. - * The hex colour value of the x axis grid. - */ - function x_axis_colour( $axis, $grid='' ) - { - $this->x_axis_colour = $axis; - $this->x_grid_colour = $grid; - } - - /** - * Set the colour of the y axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the y axis line. - * @param grid a string argument. - * The hex colour value of the y axis grid. - */ - function y_axis_colour( $axis, $grid='' ) - { - $this->y_axis_colour = $axis; - - if( strlen( $grid ) > 0 ) - $this->y_grid_colour = $grid; - } - - /** - * Set the colour of the right y axis line. - * - * @param colour a string argument. - * The hex colour value of the right y axis line. - */ - function y_right_axis_colour( $colour ) - { - $this->y2_axis_colour = $colour; - } - - /** - * Draw a line without markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label - * @param circles an int argument - * Need to find out. - */ - function line( $width, $colour='', $text='', $size=-1, $circles=-1 ) - { - $type = 'line'. $this->next_line(); - - $description = ''; - if( $width > 0 ) - { - $description .= $width; - $description .= ','. $colour; - } - - if( strlen( $text ) > 0 ) - { - $description.= ','. $text; - $description .= ','. $size; - } - - if( $circles > 0 ) - $description .= ','. $circles; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with solid dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_dot( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_dot'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with hollow dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_hollow( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_hollow'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw an area chart. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param alpha an int argument. - * The percentage of transparency of the fill colour. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - * @param fill_colour a string argument. - * The hex colour value of the fill colour. - */ - function area_hollow( $width, $dot_size, $colour, $alpha, $text='', $font_size='', $fill_colour='' ) - { - $type = 'area_hollow'. $this->next_line(); - - $description = "$width,$dot_size,$colour,$alpha"; - - if( strlen( $text ) > 0 ) - $description .= ",$text,$font_size"; - - if( strlen( $fill_colour ) > 0 ) - $description .= ','. $fill_colour; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart with an outline. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param colour_outline a strng argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_filled( $alpha, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'filled_bar'. $this->next_line(); - - $description = "$alpha,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - function bar_sketch( $alpha, $offset, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'bar_sketch'. $this->next_line(); - - $description = "$alpha,$offset,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_3D( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_3d'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart that looks like glass. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param outline_colour a string argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_glass( $alpha, $colour, $outline_colour, $text='', $size=-1 ) - { - $type = 'bar_glass'. $this->next_line(); - - $description = $alpha .','. $colour .','. $outline_colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a faded bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_fade( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_fade'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - function candle( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'candle'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function hlc( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'hlc'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function scatter( $data, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'scatter'. $this->next_line(); - - $description = $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - - // - // Patch by, Jeremy Miller (14th Nov, 2007) - // - /** - * Draw a pie chart. - * - * @param alpha an int argument. - * The percentage of transparency of the pie colour. - * @param $style a string argument. - * CSS style string - * @param label_colour a string argument. - * The hex colour value of the label. - * @param gradient a boolean argument. - * Use a gradient true or false. - * @param border_size an int argument. - * Size of the border in pixels. - */ - function pie( $alpha, $line_colour, $style, $gradient = true, $border_size = false ) - { - $this->pie = $alpha.','.$line_colour.','.$style; - if( !$gradient ) - { - $this->pie .= ','.!$gradient; - } - if ($border_size) - { - if ($gradient === false) - { - $this->pie .= ','; - } - $this->pie .= ','.$border_size; - } - } - - /** - * Set the values of the pie chart. - * - * @param values an array argument. - * An array of the values for the pie chart. - * @param labels an array argument. - * An array of the labels for the pie pieces. - * @param links an array argument. - * An array of the links to the pie pieces. - */ - function pie_values( $values, $labels=array(), $links=array() ) - { - $this->pie_values = implode(',',$values); - $this->pie_labels = implode(',',$labels); - $this->pie_links = implode(",",$links); - } - - /** - * Set the pie slice colours. - * - * @param colours an array argument. - * The hex colour values of the pie pieces. - */ - function pie_slice_colours( $colours ) - { - $this->pie_colours = implode(',',$colours); - } - - - /** - * Render the output. - */ - function render() - { - $tmp = array(); - - //echo headers_sent() ?'yes':'no'; - if( !headers_sent() ) - header('content-type: text; charset: utf-8'); - - if($this->output_type == 'js') - { - $this->set_unique_id(); - - $tmp[] = '
'; - $tmp[] = ''; - $tmp[] = ''; - } - - return implode("\r\n",$tmp); - } -} - -class line -{ - var $line_width; - var $colour; - var $_key; - var $key; - var $key_size; - // hold the data - var $data; - // extra tool tip info: - var $tips; - - function line( $line_width, $colour ) - { - $this->var = 'line'; - - $this->line_width = $line_width; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - function add_data_link_tip( $data, $link, $tip ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'so.addVariable("'. $this->var.$set_num .'","'. $values . '");'; - - $tmp[] = 'so.addVariable("values'. $set_num .'","'. implode( ',', $this->data ) .'");'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'so.addVariable("links'. $set_num .'","'. implode( ',', $this->links ) .'");'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'so.addVariable("tool_tips_set'. $set_num .'","'. implode( ',', $this->tips ) .'");'; - - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } -} - -class line_hollow extends line -{ - var $dot_size; - - function line_hollow( $line_width, $dot_size, $colour ) - { - parent::line( $line_width, $colour ); - $this->var = 'line_hollow'; - $this->dot_size = $dot_size; - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - else - { - $values[] = ''; - $values[] = ''; - } - $values[] = $this->dot_size; - - return $values; - } -} - -class line_dot extends line_hollow -{ - function line_dot( $line_width, $dot_size, $colour ) - { - parent::line_dot( $line_width, $colour ); - $this->var = 'line_dot'; - } -} - -class bar -{ - var $colour; - var $alpha; - var $data; - var $links; - var $_key; - var $key; - var $key_size; - var $var; - // extra tool tip info: - var $tips; - - function bar( $alpha, $colour ) - { - $this->var = 'bar'; - - $this->alpha = $alpha; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this - // bar chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'so.addVariable("'. $this->var.$set_num .'","'. $values . '");'; - - $tmp[] = 'so.addVariable("values'. $set_num .'","'. implode( ',', $this->data ) .'");'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'so.addVariable("links'. $set_num .'","'. implode( ',', $this->links ) .'");'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'so.addVariable("tool_tips_set'. $set_num .'","'. implode( ',', $this->tips ) .'");'; - - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } - -} - -class bar_3d extends bar -{ - function bar_3d( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_3d'; - } -} - -class bar_fade extends bar -{ - function bar_fade( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_fade'; - } -} - -class bar_outline extends bar -{ - var $outline_colour; - - function bar_outline( $alpha, $colour, $outline_colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'filled_bar'; - $this->outline_colour = $outline_colour; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class bar_glass extends bar_outline -{ - function bar_glass( $alpha, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_glass'; - } -} - -// -// this has an outline colour and a 'jiggle' parameter -// called offset -// -class bar_sketch extends bar_outline -{ - var $offset; - - function bar_sketch( $alpha, $offset, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_sketch'; - $this->offset = $offset; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->offset; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class candle -{ - var $out; - - function candle( $high, $open, $close, $low ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $open; - $this->out[] = $close; - $this->out[] = $low; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class hlc -{ - var $out; - - function hlc( $high, $low, $close ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $low; - $this->out[] = $close; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class point -{ - var $out; - - function point( $x, $y, $size_px ) - { - $this->out = array(); - $this->out[] = $x; - $this->out[] = $y; - $this->out[] = $size_px; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - - -function open_flash_chart_object_str( $width, $height, $url, $use_swfobject=true, $base='' ) -{ - // - // return the HTML as a string - // - return _ofc( $width, $height, $url, $use_swfobject, $base ); -} - -function open_flash_chart_object( $width, $height, $url, $use_swfobject=true, $base='' ) -{ - // - // stream the HTML into the page - // - echo _ofc( $width, $height, $url, $use_swfobject, $base ); -} - -function _ofc( $width, $height, $url, $use_swfobject, $base ) -{ - // - // I think we may use swfobject for all browsers, - // not JUST for IE... - // - //$ie = strstr(getenv('HTTP_USER_AGENT'), 'MSIE'); - - // - // escape the & and stuff: - // - $url = urlencode($url); - - // - // output buffer - // - $out = array(); - - // - // check for http or https: - // - if (isset ($_SERVER['HTTPS'])) - { - if (strtoupper ($_SERVER['HTTPS']) == 'ON') - { - $protocol = 'https'; - } - else - { - $protocol = 'http'; - } - } - else - { - $protocol = 'http'; - } - - // - // if there are more than one charts on the - // page, give each a different ID - // - global $open_flash_chart_seqno; - $obj_id = 'chart'; - $div_name = 'flashcontent'; - - //$out[] = ''; - - if( !isset( $open_flash_chart_seqno ) ) - { - $open_flash_chart_seqno = 1; - $out[] = ''; - } - else - { - $open_flash_chart_seqno++; - $obj_id .= '_'. $open_flash_chart_seqno; - $div_name .= '_'. $open_flash_chart_seqno; - } - - if( $use_swfobject ) - { - // Using library for auto-enabling Flash object on IE, disabled-Javascript proof - $out[] = '
'; - $out[] = ''; - $out[] = ''; - } - - return implode("\n",$out); -} - -$x = open_flash_chart_object( 300,300,"/images/open-flash-chart.swf", true); - -?> - - - -
- - diff --git a/workflow/engine/plugins/openFlash/open_flash_chart_object.php b/workflow/engine/plugins/openFlash/open_flash_chart_object.php deleted file mode 100644 index 5cf831634..000000000 --- a/workflow/engine/plugins/openFlash/open_flash_chart_object.php +++ /dev/null @@ -1,109 +0,0 @@ -'; - - if( !isset( $open_flash_chart_seqno ) ) - { - $open_flash_chart_seqno = 1; - $out[] = ''; - } - else - { - $open_flash_chart_seqno++; - $obj_id .= '_'. $open_flash_chart_seqno; - $div_name .= '_'. $open_flash_chart_seqno; - } - - if( $use_swfobject ) - { - // Using library for auto-enabling Flash object on IE, disabled-Javascript proof - $out[] = '
'; - $out[] = ''; - $out[] = ''; - } - - return implode("\n",$out); -} -?> \ No newline at end of file diff --git a/workflow/engine/plugins/openFlash/public_html/open-flash-chart.swf b/workflow/engine/plugins/openFlash/public_html/open-flash-chart.swf deleted file mode 100644 index 85b590a28f4a5cea29eefa8c7cad6b551e29de4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64600 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 HtI>lMRC*G= diff --git a/workflow/engine/plugins/openFlash/public_html/swfobject.js b/workflow/engine/plugins/openFlash/public_html/swfobject.js deleted file mode 100644 index 02ca073dc..000000000 --- a/workflow/engine/plugins/openFlash/public_html/swfobject.js +++ /dev/null @@ -1,233 +0,0 @@ -/** - * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ - * - * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - */ -if(typeof deconcept == "undefined") var deconcept = new Object(); -if(typeof deconcept.util == "undefined") deconcept.util = new Object(); -if(typeof deconcept.SWFObjectUtil == "undefined") deconcept.SWFObjectUtil = new Object(); -deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) { - if (!document.getElementById) { return; } - this.DETECT_KEY = detectKey ? detectKey : 'detectflash'; - this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY); - this.params = new Object(); - this.variables = new Object(); - this.attributes = new Array(); - if(swf) { this.setAttribute('swf', swf); } - if(id) { this.setAttribute('id', id); } - if(w) { this.setAttribute('width', w); } - if(h) { this.setAttribute('height', h); } - if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); } - this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(); - if (!window.opera && document.all && this.installedVer.major > 7) { - // only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE - deconcept.SWFObject.doPrepUnload = true; - } - if(c) { this.addParam('bgcolor', c); } - var q = quality ? quality : 'high'; - this.addParam('quality', q); - this.setAttribute('useExpressInstall', false); - this.setAttribute('doExpressInstall', false); - var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location; - this.setAttribute('xiRedirectUrl', xir); - this.setAttribute('redirectUrl', ''); - if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); } -} -deconcept.SWFObject.prototype = { - useExpressInstall: function(path) { - this.xiSWFPath = !path ? "expressinstall.swf" : path; - this.setAttribute('useExpressInstall', true); - }, - setAttribute: function(name, value){ - this.attributes[name] = value; - }, - getAttribute: function(name){ - return this.attributes[name]; - }, - addParam: function(name, value){ - this.params[name] = value; - }, - getParams: function(){ - return this.params; - }, - addVariable: function(name, value){ - this.variables[name] = value; - }, - getVariable: function(name){ - return this.variables[name]; - }, - getVariables: function(){ - return this.variables; - }, - getVariablePairs: function(){ - var variablePairs = new Array(); - var key; - var variables = this.getVariables(); - for(key in variables){ - variablePairs[variablePairs.length] = key +"="+ variables[key]; - } - return variablePairs; - }, - getSWFHTML: function() { - var swfNode = ""; - if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture - if (this.getAttribute("doExpressInstall")) { - this.addVariable("MMplayerType", "PlugIn"); - this.setAttribute('swf', this.xiSWFPath); - } - swfNode = ' 0){ swfNode += 'flashvars="'+ pairs +'"'; } - swfNode += '/>'; - } else { // PC IE - if (this.getAttribute("doExpressInstall")) { - this.addVariable("MMplayerType", "ActiveX"); - this.setAttribute('swf', this.xiSWFPath); - } - swfNode = ''; - swfNode += ''; - var params = this.getParams(); - for(var key in params) { - swfNode += ''; - } - var pairs = this.getVariablePairs().join("&"); - if(pairs.length > 0) {swfNode += '';} - swfNode += ""; - } - return swfNode; - }, - write: function(elementId){ - if(this.getAttribute('useExpressInstall')) { - // check to see if we need to do an express install - var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]); - if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) { - this.setAttribute('doExpressInstall', true); - this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl'))); - document.title = document.title.slice(0, 47) + " - Flash Player Installation"; - this.addVariable("MMdoctitle", document.title); - } - } - if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){ - var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId; - n.innerHTML = this.getSWFHTML(); - return true; - }else{ - if(this.getAttribute('redirectUrl') != "") { - document.location.replace(this.getAttribute('redirectUrl')); - } - } - return false; - } -} - -/* ---- detection functions ---- */ -deconcept.SWFObjectUtil.getPlayerVersion = function(){ - var PlayerVersion = new deconcept.PlayerVersion([0,0,0]); - if(navigator.plugins && navigator.mimeTypes.length){ - var x = navigator.plugins["Shockwave Flash"]; - if(x && x.description) { - PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); - } - }else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ // if Windows CE - var axo = 1; - var counter = 3; - while(axo) { - try { - counter++; - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter); -// document.write("player v: "+ counter); - PlayerVersion = new deconcept.PlayerVersion([counter,0,0]); - } catch (e) { - axo = null; - } - } - } else { // Win IE (non mobile) - // do minor version lookup in IE, but avoid fp6 crashing issues - // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ - try{ - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); - }catch(e){ - try { - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); - PlayerVersion = new deconcept.PlayerVersion([6,0,21]); - axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) - } catch(e) { - if (PlayerVersion.major == 6) { - return PlayerVersion; - } - } - try { - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - } catch(e) {} - } - if (axo != null) { - PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); - } - } - return PlayerVersion; -} -deconcept.PlayerVersion = function(arrVersion){ - this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; - this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; - this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; -} -deconcept.PlayerVersion.prototype.versionIsValid = function(fv){ - if(this.major < fv.major) return false; - if(this.major > fv.major) return true; - if(this.minor < fv.minor) return false; - if(this.minor > fv.minor) return true; - if(this.rev < fv.rev) return false; - return true; -} -/* ---- get value of query string param ---- */ -deconcept.util = { - getRequestParameter: function(param) { - var q = document.location.search || document.location.hash; - if (param == null) { return q; } - if(q) { - var pairs = q.substring(1).split("&"); - for (var i=0; i < pairs.length; i++) { - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { - return pairs[i].substring((pairs[i].indexOf("=")+1)); - } - } - } - return ""; - } -} -/* fix for video streaming bug */ -deconcept.SWFObjectUtil.cleanupSWFs = function() { - var objects = document.getElementsByTagName("OBJECT"); - for (var i = objects.length - 1; i >= 0; i--) { - objects[i].style.display = 'none'; - for (var x in objects[i]) { - if (typeof objects[i][x] == 'function') { - objects[i][x] = function(){}; - } - } - } -} -// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/ -if (deconcept.SWFObject.doPrepUnload) { - if (!deconcept.unloadSet) { - deconcept.SWFObjectUtil.prepUnload = function() { - __flash_unloadHandler = function(){}; - __flash_savedUnloadHandler = function(){}; - window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs); - } - window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload); - deconcept.unloadSet = true; - } -} -/* add document.getElementById if needed (mobile IE < 5) */ -if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }} - -/* add some aliases for ease of use/backwards compatibility */ -var getQueryParamValue = deconcept.util.getRequestParameter; -var FlashObject = deconcept.SWFObject; // for legacy support -var SWFObject = deconcept.SWFObject; diff --git a/workflow/engine/plugins/openFlash/setupPage.xml b/workflow/engine/plugins/openFlash/setupPage.xml deleted file mode 100644 index a5a5000c1..000000000 --- a/workflow/engine/plugins/openFlash/setupPage.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - <en>Open Flash Charts Plugin</en> - - - - Open Charts Plugin, with this plugin you can see many differents charts using interative flash charts - - - - - Save - - \ No newline at end of file diff --git a/workflow/engine/plugins/pmosCommunity.php b/workflow/engine/plugins/pmosCommunity.php deleted file mode 100644 index c45f5b14c..000000000 --- a/workflow/engine/plugins/pmosCommunity.php +++ /dev/null @@ -1,35 +0,0 @@ -sFriendlyName = 'PMOS Community Plugin'; - $this->sDescription = 'Community Charts Plugin, with this plugin you can see many differents charts related to ProcessMaker Open Source Community'; - $this->sPluginFolder = 'pmosCommunity'; - $this->sSetupPage = 'setupPage'; - $this->iVersion = 0.45; - $this->aWorkspaces = array ( 'os' ); - return $res; - } - - function setup() - { - //$this->registerTrigger( 10000, 'createCaseFolder' ); - $this->registerDashboard(); - } - - function install() - { - - } - } - - $oPluginRegistry =& PMPluginRegistry::getSingleton(); - $oPluginRegistry->registerPlugin('pmosCommunity', __FILE__); - - - - - diff --git a/workflow/engine/plugins/pmosCommunity/chart-data.php b/workflow/engine/plugins/pmosCommunity/chart-data.php deleted file mode 100644 index 033686972..000000000 --- a/workflow/engine/plugins/pmosCommunity/chart-data.php +++ /dev/null @@ -1,14 +0,0 @@ -{$chartType}(); - die; - } - diff --git a/workflow/engine/plugins/pmosCommunity/chart.php b/workflow/engine/plugins/pmosCommunity/chart.php deleted file mode 100644 index 691953f8c..000000000 --- a/workflow/engine/plugins/pmosCommunity/chart.php +++ /dev/null @@ -1,11 +0,0 @@ -sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf'; - if ( !file_exists( dirname($fileConf) ) ) - throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist." ) ); - - if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) ) - throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) ); - - if ( file_exists ( $fileConf ) ) { - $content = file_get_contents ( $fileConf); - $fields = unserialize ($content); - } - else - $fields = array(); - return $fields; - } - - function updateFieldsForPageSetup ( $oData) { - $content = serialize ($oData['form']); - $fileConf = PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf'; - if ( !is_writable( dirname($fileConf) ) ) - throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist or this directory is not writable." ) ); - - if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) ) - throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) ); - - file_put_contents ( $fileConf, $content); - return true; - } - - function setup() { - } - - function getChart( $chartName ) { - $this->readConfig(); - $prePath = '/sys' . config("system.workspace") . '/' . SYS_LANG . '/blank/'; - $obj = new StdClass(); - switch ($chartName) { - case 'PostByForum': - $obj->title = 'Community ProcessMaker Forum - Per Forum'; - break; - case 'ForumWeek': - $obj->title = 'Community ProcessMaker Forum - Per Week'; - break; - case 'PostByUser': - $obj->title = 'Community ProcessMaker Forum - Per User'; - break; - case 'BugsOpenByUser': - $obj->title = 'Community ProcessMaker Forum - Per Post Author'; - break; - case 'BugsByStatus': - $obj->title = 'Community ProcessMaker Forum - Bugs'; - break; - } - $obj->height = 220; - $obj->image = $prePath . 'pmosCommunity/drawChart?chart=' . $chartName . "&u="; - return $obj; - } - - //here we are defining the available charts, the dashboard setup will call this function to know the charts - function getAvailableCharts( ) { - return array ( - 'PostByForum', - 'ForumWeek', - 'PostByUser', - 'BugsOpenByUser', - 'BugsByStatus' - ); - } - - /* definition of all charts */ - /* that definition comes in two parts : - /* 1. the getXX () function to get the data from the databases - /* 2. the XX () function to draw the graph - */ - - /** chart PostByForum ***/ - /** to show the last 2 months post grouped by forum and for topic */ - function getPostByForum ( ) { - $dataSet = array(); - $past1months = mktime(0, 0, 0, date("m") -1 , date("d"), date("Y")); - - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $con = Propel::getConnection('forum'); - $sql = "select forum_name, count(*) as cant from phpbb_posts left join phpbb_forums on ( phpbb_posts.forum_id = phpbb_forums.forum_id ) where post_time > $past1months group by forum_name " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - if ( strlen ( trim ($row['forum_name']) ) > 0 ) { - $label[] = $row['forum_name']; - $data[] = $row['cant']; - } - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - - $sql = "select forum_name, count( distinct( topic_id)) as cant from phpbb_posts left join phpbb_forums on ( phpbb_posts.forum_id = phpbb_forums.forum_id ) where post_time > $past1months group by forum_name " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - if ( strlen ( trim ($row['forum_name']) ) > 0 ) { - //$label[] = $row['forum_name']; - $series2[] = $row['cant']; - } - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['series2'] = $series2; - - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $aux = intval($max / 6 ) * 6 + 6; - $dataSet['max'] = $aux; - - return $dataSet; - } - - function PostByForum( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getPostByForum(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - $dataTopicSet->addPoint(new Point( $label, $dataSet['series2'][$key] )) ; - } - - $multidataSet = new XYSeriesDataSet(); - $multidataSet->addSerie("Posts", $dataPostSet); - $multidataSet->addSerie("Topics", $dataTopicSet); - - $chart->setDataSet($multidataSet); - $chart->setTitle( "Posts by Forum ( last month ) " ); - $chart->render(); - } - - function PostByForumFlash( ) { - $dataSet = $this->getPostByForum(); - $data = $dataSet['data']; - $series2 = $dataSet['series2']; - $g = new graph(); - $g->title( ' Posts by Forum ( last month )', '{font-size: 16px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'posts', 10 ); - $bar_red->data = $data; - - $bar_blue = new bar_3d( 75, '#D54C78' ); - $bar_blue->key( 'topics', 11 ); - $bar_blue->data = $series2; - - $g->data_sets[] = $bar_red; - $g->data_sets[] = $bar_blue; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $dataSet['max'] ); - $g->y_label_steps( 6 ); - //$g->set_y_legend( 'Posts', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart ForumWeek ***/ - /** to show the last 2 months post grouped by week */ - function getForumWeek ( ) { - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $dataSet = array(); - $processObj = new Process; - $past2months = mktime(0, 0, 0, date("m") -2 , date("d"), date("Y")); - - $con = Propel::getConnection('forum'); - $sql = "select week(FROM_UNIXTIME(post_time )) as week ,count(*) as cant from phpbb_posts where post_time > $past2months group by week " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = date ( 'M d', mktime(0, 0, 0, 1 , $row['week']*7, date("Y")) ); - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function ForumWeek( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getForumWeek(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - } - - $chart->setDataSet($dataPostSet); - $chart->setTitle( " Posts by Week " ); - $chart->render(); - } - - function ForumWeekFlash ( ) { - $dataSet = $this->getForumWeek(); - $data = $dataSet['data']; - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $g = new graph(); - $g->title( ' Posts by Week ', '{font-size: 16px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'week', 10 ); - $bar_red->data = $data; - - $g->data_sets[] = $bar_red; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $max ); - $g->y_label_steps( 5 ); - $g->set_y_legend( 'Posts', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart PostByUser ***/ - /** to show the last 7 days grouped by user */ - function getPostByUser ( ) { - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('forum'); - - $past7days = mktime(0, 0, 0, date("m") , date("d")-7, date("Y")); - $sql = "select username, count(*) as cant from phpbb_posts left join phpbb_users on ( poster_id = user_id ) where post_time > $past7days group by username " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['username']; - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - //$dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function PostByUser ( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getPostByUser(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - } - - $chart->setDataSet($dataPostSet); - //$chart->setTitle( " Posts by User" ); - $chart->render(); - } - - function PostByUserFlash ( ) { - $dataSet = $this->getPostByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $max = intval($max / 4 ) * 4 + 4; - - $bar_red = new bar_3d( 50, '#356aa0' ); - $bar_red->key( 'posts', 10 ); - $bar_red->data = $data; - - $bar_blue = new bar_3d( 75, '#D54C78' ); - $bar_blue->key( 'completed', 10 ); - $bar_blue->data = $data; - - $g->data_sets[] = $bar_red; - //$g->data_sets[] = $bar_blue; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $max ); - $g->y_label_steps( 4 ); - $g->set_y_legend( 'Processmaker', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart BugsByStatus ***/ - /** to show the bugs by status resolved, open, closed */ - function getBugsByStatus ( ) { - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('bugs'); - - //open - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status in (20,30,40,50) " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'open'; - $data[] = $row['cant']; - - //resolved - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status = 80" ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'resolved'; - $data[] = $row['cant']; - - //closed - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status = 90" ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'closed'; - $data[] = $row['cant']; - - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function BugsByStatus ( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getBugsByStatus(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - } - - $chart->setDataSet($dataPostSet); - //$chart->setTitle( " Posts by User" ); - $chart->render(); - } - - function BugsByStatusFlash ( ) { - $dataSet = $this->getBugsByStatus(); - $data = $dataSet['data']; - $g = new graph(); - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - - $g->pie(70,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Bugs by Status', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - } - - /** chart BugsOpenByUser ***/ - /** to show the bugs in OPEN status by user */ - function getBugsOpenByUser ( ) { - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('bugs'); - - $sql = "SELECT username, count(*) as cant FROM mantis_bug_table left join mantis_user_table on ( mantis_user_table.id = handler_id) where project_id = 31 and status in (20,30,40,50) group by username " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['username']; - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function BugsOpenByUser ( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getBugsOpenByUser(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - } - - $chart->setDataSet($dataPostSet); - //$chart->setTitle( " Posts by User" ); - $chart->render(); - - } - - function BugsOpenByUserFlash ( ) { - $dataSet = $this->getBugsOpenByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->bg_colour = '#EFFFEF'; - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - - $g->pie(70,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Bugs by Status', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - /* - $dataSet = $this->getBugsOpenByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->pie(80,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810','#D54C78') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Open Bugs by User', '{font-size:18px; color: #d01f3c}' ); - echo $g->render();*/ - } - -} diff --git a/workflow/engine/plugins/pmosCommunity/config/databases.php b/workflow/engine/plugins/pmosCommunity/config/databases.php deleted file mode 100644 index 091d2768a..000000000 --- a/workflow/engine/plugins/pmosCommunity/config/databases.php +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/workflow/engine/plugins/pmosCommunity/config/setup.conf b/workflow/engine/plugins/pmosCommunity/config/setup.conf deleted file mode 100644 index 70cf5bfbf..000000000 --- a/workflow/engine/plugins/pmosCommunity/config/setup.conf +++ /dev/null @@ -1 +0,0 @@ -a:1:{s:6:"ACCEPT";s:4:"Save";} \ No newline at end of file diff --git a/workflow/engine/plugins/pmosCommunity/drawChart.php b/workflow/engine/plugins/pmosCommunity/drawChart.php deleted file mode 100644 index 48500961f..000000000 --- a/workflow/engine/plugins/pmosCommunity/drawChart.php +++ /dev/null @@ -1,14 +0,0 @@ -{$chartType}(); - die; - } - \ No newline at end of file diff --git a/workflow/engine/plugins/pmosCommunity/open-flash-chart.php b/workflow/engine/plugins/pmosCommunity/open-flash-chart.php deleted file mode 100644 index b1cd90627..000000000 --- a/workflow/engine/plugins/pmosCommunity/open-flash-chart.php +++ /dev/null @@ -1,1769 +0,0 @@ -data_sets = array(); - - - $this->data = array(); - $this->links = array(); - $this->width = 250; - $this->height = 200; - $this->js_path = '/images/'; - $this->swf_path = ''; - $this->x_labels = array(); - $this->y_min = ''; - $this->y_max = ''; - $this->x_min = ''; - $this->x_max = ''; - $this->y_steps = ''; - $this->title = ''; - $this->title_style = ''; - $this->occurence = 0; - - $this->x_offset = ''; - - $this->x_tick_size = -1; - - $this->y2_max = ''; - $this->y2_min = ''; - - // GRID styles: - $this->x_axis_colour = ''; - $this->x_axis_3d = ''; - $this->x_grid_colour = ''; - $this->x_axis_steps = 1; - $this->y_axis_colour = ''; - $this->y_grid_colour = ''; - $this->y2_axis_colour = ''; - - // AXIS LABEL styles: - $this->x_label_style = ''; - $this->y_label_style = ''; - $this->y_label_style_right = ''; - - - // AXIS LEGEND styles: - $this->x_legend = ''; - $this->x_legend_size = 20; - $this->x_legend_colour = '#000000'; - - $this->y_legend = ''; - $this->y_legend_right = ''; - //$this->y_legend_size = 20; - //$this->y_legend_colour = '#000000'; - - $this->lines = array(); - $this->line_default['type'] = 'line'; - $this->line_default['values'] = '3,#87421F'; - $this->js_line_default = 'so.addVariable("line","3,#87421F");'; - - $this->bg_colour = ''; - $this->bg_image = ''; - - $this->inner_bg_colour = ''; - $this->inner_bg_colour_2 = ''; - $this->inner_bg_angle = ''; - - // PIE chart ------------ - $this->pie = ''; - $this->pie_values = ''; - $this->pie_colours = ''; - $this->pie_labels = ''; - - $this->tool_tip = ''; - - // which data lines are attached to the - // right Y axis? - $this->y2_lines = array(); - - // Number formatting: - $this->y_format=''; - $this->num_decimals=''; - $this->is_fixed_num_decimals_forced=''; - $this->is_decimal_separator_comma=''; - $this->is_thousand_separator_disabled=''; - - $this->output_type = ''; - - // - // set some default value incase the user forgets - // to set them, so at least they see *something* - // even is it is only the axis and some ticks - // - $this->set_y_min( 0 ); - $this->set_y_max( 20 ); - $this->set_x_axis_steps( 1 ); - $this->y_label_steps( 5 ); - } - - /** - * Set the unique_id to use for the flash object id. - */ - function set_unique_id() - { - $this->unique_id = uniqid(rand(), true); - } - - /** - * Get the flash object ID for the last rendered object. - */ - function get_unique_id() - { - return ($this->unique_id); - } - - /** - * Set the base path for the swfobject.js - * - * @param base_path a string argument. - * The path to the swfobject.js file - */ - function set_js_path($path) - { - $this->js_path = $path; - } - - /** - * Set the base path for the open-flash-chart.swf - * - * @param path a string argument. - * The path to the open-flash-chart.swf file - */ - function set_swf_path($path) - { - $this->swf_path = $path; - } - - /** - * Set the type of output data. - * - * @param type a string argument. - * The type of data. Currently only type is js, or nothing. - */ - function set_output_type($type) - { - $this->output_type = $type; - } - - /** - * returns the next line label for multiple lines. - */ - function next_line() - { - $line_num = ''; - if( count( $this->lines ) > 0 ) - $line_num = '_'. (count( $this->lines )+1); - - return $line_num; - } - - // escape commas (,) - function esc( $text ) - { - // we replace the comma so it is not URL escaped - // if it is, flash just thinks it is a comma - // which is no good if we are splitting the - // string on commas. - $tmp = str_replace( ',', '#comma#', $text ); - //$tmp = utf8_encode( $tmp ); - // now we urlescape all dodgy characters (like & % $ etc..) - return urlencode( $tmp ); - } - - /** - * Format the text to the type of output. - */ - function format_output($function,$values) - { - if($this->output_type == 'js') - { - $tmp = 'so.addVariable("'. $function .'","'. $values . '");'; - } - else - { - $tmp = '&'. $function .'='. $values .'&'; - } - - return $tmp; - } - - /** - * Set the text and style of the title. - * - * @param title a string argument. - * The text of the title. - * @param style a string. - * CSS styling of the title. - */ - function set_title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the width of the chart. - * - * @param width an int argument. - * The width of the chart frame. - */ - function set_width( $width ) - { - $this->width = $width; - } - - /** - * Set the height of the chart. - * - * @param height an int argument. - * The height of the chart frame. - */ - function set_height( $height ) - { - $this->height = $height; - } - - /** - * Set the base path of the swfobject. - * - * @param base a string argument. - * The base path of the swfobject. - */ - function set_base( $base='/images/' ) - { - $this->base = $base; - } - - // Number formatting: - function set_y_format( $val ) - { - $this->y_format = $val; - } - - function set_num_decimals( $val ) - { - $this->num_decimals = $val; - } - - function set_is_fixed_num_decimals_forced( $val ) - { - $this->is_fixed_num_decimals_forced = $val?'true':'false'; - } - - function set_is_decimal_separator_comma( $val ) - { - $this->is_decimal_separator_comma = $val?'true':'false'; - } - - function set_is_thousand_separator_disabled( $val ) - { - $this->is_thousand_separator_disabled = $val?'true':'false'; - } - - /** - * Set the data for the chart - * @param a an array argument. - * An array of the data to add to the chart. - */ - function set_data( $a ) - { - $this->data[] = implode(',',$a); - } - - // UGH, these evil functions are making me fell ill - function set_links( $links ) - { - // TO DO escape commas: - $this->links[] = implode(',',$links); - } - - // $val is a boolean - function set_x_offset( $val ) - { - $this->x_offset = $val?'true':'false'; - } - - /** - * Set the tooltip to be displayed on each chart item.\n - * \n - * Replaceable tokens that can be used in the string include: \n - * #val# - The actual value of whatever the mouse is over. \n - * #key# - The key string. \n - * \
- New line. \n - * #x_label# - The X label string. \n - * #x_legend# - The X axis legend text. \n - * Default string is: "#x_label#
#val#" \n - * - * @param tip a string argument. - * A formatted string to show as the tooltip. - */ - function set_tool_tip( $tip ) - { - $this->tool_tip = $this->esc( $tip ); - } - - /** - * Set the x axis labels - * - * @param a an array argument. - * An array of the x axis labels. - */ - function set_x_labels( $a ) - { - $tmp = array(); - foreach( $a as $item ) - $tmp[] = $this->esc( $item ); - $this->x_labels = $tmp; - } - - /** - * Set the look and feel of the x axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - * @param orientation an int argument. - * The orientation of the x-axis text. - * 0 - Horizontal - * 1 - Vertical - * 2 - 45 degrees - * @param step an int argument. - * Show the label on every $step label. - * @param grid_colour a string argument. - */ - function set_x_label_style( $size, $colour='', $orientation=0, $step=-1, $grid_colour='' ) - { - $this->x_label_style = $size; - - if( strlen( $colour ) > 0 ) - $this->x_label_style .= ','. $colour; - - if( $orientation > -1 ) - $this->x_label_style .= ','. $orientation; - - if( $step > 0 ) - $this->x_label_style .= ','. $step; - - if( strlen( $grid_colour ) > 0 ) - $this->x_label_style .= ','. $grid_colour; - } - - /** - * Set the background colour. - * @param colour a string argument. - * The hex colour value. - */ - function set_bg_colour( $colour ) - { - $this->bg_colour = $colour; - } - - /** - * Set a background image. - * @param url a string argument. - * The location of the image. - * @param x a string argument. - * The x location of the image. 'Right', 'Left', 'Center' - * @param y a string argument. - * The y location of the image. 'Top', 'Bottom', 'Middle' - */ - function set_bg_image( $url, $x='center', $y='center' ) - { - $this->bg_image = $url; - $this->bg_image_x = $x; - $this->bg_image_y = $y; - } - - /** - * Attach a set of data (a line, area or bar chart) to the right Y axis. - * @param data_number an int argument. - * The numbered order the data was attached using set_data. - */ - function attach_to_y_right_axis( $data_number ) - { - $this->y2_lines[] = $data_number; - } - - /** - * Set the background colour of the grid portion of the chart. - * @param col a string argument. - * The hex colour value of the background. - * @param col2 a string argument. - * The hex colour value of the second colour if you want a gradient. - * @param angle an int argument. - * The angle in degrees to make the gradient. - */ - function set_inner_background( $col, $col2='', $angle=-1 ) - { - $this->inner_bg_colour = $col; - - if( strlen($col2) > 0 ) - $this->inner_bg_colour_2 = $col2; - - if( $angle != -1 ) - $this->inner_bg_angle = $angle; - } - - /** - * Internal function to build the y label style for y and y2 - */ - function _set_y_label_style( $size, $colour ) - { - $tmp = $size; - - if( strlen( $colour ) > 0 ) - $tmp .= ','. $colour; - return $tmp; - } - - /** - * Set the look and feel of the y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_label_style( $size, $colour='' ) - { - $this->y_label_style = $this->_set_y_label_style( $size, $colour ); - } - - /** - * Set the look and feel of the right y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_right_label_style( $size, $colour='' ) - { - $this->y_label_style_right = $this->_set_y_label_style( $size, $colour ); - } - - function set_x_max( $max ) - { - $this->x_max = floatval( $max ); - } - - function set_x_min( $min ) - { - $this->x_min = floatval( $min ); - } - - /** - * Set the maximum value of the y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_max( $max ) - { - $this->y_max = floatval( $max ); - } - - /** - * Set the minimum value of the y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_min( $min ) - { - $this->y_min = floatval( $min ); - } - - /** - * Set the maximum value of the right y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_right_max( $max ) - { - $this->y2_max = floatval($max); - } - - /** - * Set the minimum value of the right y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_right_min( $min ) - { - $this->y2_min = floatval($min); - } - - /** - * Show the y label on every $step label. - * - * @param val an int argument. - * Show the label on every $step label. - */ - function y_label_steps( $val ) - { - $this->y_steps = intval( $val ); - } - - function title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the parameters of the x legend. - * - * @param text a string argument. - * The text of the x legend. - * @param font_size an int argument. - * The font size of the x legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_x_legend( $text, $size=-1, $colour='' ) - { - $this->x_legend = $this->esc( $text ); - if( $size > -1 ) - $this->x_legend_size = $size; - - if( strlen( $colour )>0 ) - $this->x_legend_colour = $colour; - } - - /** - * Set the size of the x label ticks. - * - * @param size an int argument. - * The size of the ticks in pixels. - */ - function set_x_tick_size( $size ) - { - if( $size > 0 ) - $this->x_tick_size = $size; - } - - /** - * Set how often you would like to show a tick on the x axis. - * - * @param steps an int argument. - * Show a tick ever $steps. - */ - function set_x_axis_steps( $steps ) - { - if ( $steps > 0 ) - $this->x_axis_steps = $steps; - } - - /** - * Set the depth in pixels of the 3D X axis slab. - * - * @param size an int argument. - * The depth in pixels of the 3D X axis. - */ - function set_x_axis_3d( $size ) - { - if( $size > 0 ) - $this->x_axis_3d = intval($size); - } - - /** - * The private method of building the y legend output. - */ - function _set_y_legend( $text, $size, $colour ) - { - $tmp = $text; - - if( $size > -1 ) - $tmp .= ','. $size; - - if( strlen( $colour )>0 ) - $tmp .= ','. $colour; - - return $tmp; - } - - /** - * Set the parameters of the y legend. - * - * @param text a string argument. - * The text of the y legend. - * @param font_size an int argument. - * The font size of the y legend text. - * @param colour a string argument - * The hex colour value of the font colour. - */ - function set_y_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the parameters of the right y legend. - * - * @param text a string argument. - * The text of the right y legend. - * @param font_size an int argument. - * The font size of the right y legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_y_right_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend_right = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the colour of the x axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the x axis line. - * @param grid a string argument. - * The hex colour value of the x axis grid. - */ - function x_axis_colour( $axis, $grid='' ) - { - $this->x_axis_colour = $axis; - $this->x_grid_colour = $grid; - } - - /** - * Set the colour of the y axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the y axis line. - * @param grid a string argument. - * The hex colour value of the y axis grid. - */ - function y_axis_colour( $axis, $grid='' ) - { - $this->y_axis_colour = $axis; - - if( strlen( $grid ) > 0 ) - $this->y_grid_colour = $grid; - } - - /** - * Set the colour of the right y axis line. - * - * @param colour a string argument. - * The hex colour value of the right y axis line. - */ - function y_right_axis_colour( $colour ) - { - $this->y2_axis_colour = $colour; - } - - /** - * Draw a line without markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label - * @param circles an int argument - * Need to find out. - */ - function line( $width, $colour='', $text='', $size=-1, $circles=-1 ) - { - $type = 'line'. $this->next_line(); - - $description = ''; - if( $width > 0 ) - { - $description .= $width; - $description .= ','. $colour; - } - - if( strlen( $text ) > 0 ) - { - $description.= ','. $text; - $description .= ','. $size; - } - - if( $circles > 0 ) - $description .= ','. $circles; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with solid dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_dot( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_dot'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with hollow dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_hollow( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_hollow'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw an area chart. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param alpha an int argument. - * The percentage of transparency of the fill colour. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - * @param fill_colour a string argument. - * The hex colour value of the fill colour. - */ - function area_hollow( $width, $dot_size, $colour, $alpha, $text='', $font_size='', $fill_colour='' ) - { - $type = 'area_hollow'. $this->next_line(); - - $description = "$width,$dot_size,$colour,$alpha"; - - if( strlen( $text ) > 0 ) - $description .= ",$text,$font_size"; - - if( strlen( $fill_colour ) > 0 ) - $description .= ','. $fill_colour; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart with an outline. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param colour_outline a strng argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_filled( $alpha, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'filled_bar'. $this->next_line(); - - $description = "$alpha,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - function bar_sketch( $alpha, $offset, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'bar_sketch'. $this->next_line(); - - $description = "$alpha,$offset,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_3D( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_3d'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart that looks like glass. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param outline_colour a string argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_glass( $alpha, $colour, $outline_colour, $text='', $size=-1 ) - { - $type = 'bar_glass'. $this->next_line(); - - $description = $alpha .','. $colour .','. $outline_colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a faded bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_fade( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_fade'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - function candle( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'candle'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function hlc( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'hlc'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function scatter( $data, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'scatter'. $this->next_line(); - - $description = $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - - // - // Patch by, Jeremy Miller (14th Nov, 2007) - // - /** - * Draw a pie chart. - * - * @param alpha an int argument. - * The percentage of transparency of the pie colour. - * @param $style a string argument. - * CSS style string - * @param label_colour a string argument. - * The hex colour value of the label. - * @param gradient a boolean argument. - * Use a gradient true or false. - * @param border_size an int argument. - * Size of the border in pixels. - */ - function pie( $alpha, $line_colour, $style, $gradient = true, $border_size = false ) - { - $this->pie = $alpha.','.$line_colour.','.$style; - if( !$gradient ) - { - $this->pie .= ','.!$gradient; - } - if ($border_size) - { - if ($gradient === false) - { - $this->pie .= ','; - } - $this->pie .= ','.$border_size; - } - } - - /** - * Set the values of the pie chart. - * - * @param values an array argument. - * An array of the values for the pie chart. - * @param labels an array argument. - * An array of the labels for the pie pieces. - * @param links an array argument. - * An array of the links to the pie pieces. - */ - function pie_values( $values, $labels=array(), $links=array() ) - { - $this->pie_values = implode(',',$values); - $this->pie_labels = implode(',',$labels); - $this->pie_links = implode(",",$links); - } - - /** - * Set the pie slice colours. - * - * @param colours an array argument. - * The hex colour values of the pie pieces. - */ - function pie_slice_colours( $colours ) - { - $this->pie_colours = implode(',',$colours); - } - - - /** - * Render the output. - */ - function render() - { - $tmp = array(); - - //echo headers_sent() ?'yes':'no'; - if( !headers_sent() ) - header('content-type: text; charset: utf-8'); - - if($this->output_type == 'js') - { - $this->set_unique_id(); - - $tmp[] = '
'; - $tmp[] = ''; - $tmp[] = ''; - } - - return implode("\r\n",$tmp); - } -} - -class line -{ - var $line_width; - var $colour; - var $_key; - var $key; - var $key_size; - // hold the data - var $data; - // extra tool tip info: - var $tips; - - function line( $line_width, $colour ) - { - $this->var = 'line'; - - $this->line_width = $line_width; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - function add_data_link_tip( $data, $link, $tip ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'so.addVariable("'. $this->var.$set_num .'","'. $values . '");'; - - $tmp[] = 'so.addVariable("values'. $set_num .'","'. implode( ',', $this->data ) .'");'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'so.addVariable("links'. $set_num .'","'. implode( ',', $this->links ) .'");'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'so.addVariable("tool_tips_set'. $set_num .'","'. implode( ',', $this->tips ) .'");'; - - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } -} - -class line_hollow extends line -{ - var $dot_size; - - function line_hollow( $line_width, $dot_size, $colour ) - { - parent::line( $line_width, $colour ); - $this->var = 'line_hollow'; - $this->dot_size = $dot_size; - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - else - { - $values[] = ''; - $values[] = ''; - } - $values[] = $this->dot_size; - - return $values; - } -} - -class line_dot extends line_hollow -{ - function line_dot( $line_width, $dot_size, $colour ) - { - parent::line_dot( $line_width, $colour ); - $this->var = 'line_dot'; - } -} - -class bar -{ - var $colour; - var $alpha; - var $data; - var $links; - var $_key; - var $key; - var $key_size; - var $var; - // extra tool tip info: - var $tips; - - function bar( $alpha, $colour ) - { - $this->var = 'bar'; - - $this->alpha = $alpha; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this - // bar chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'so.addVariable("'. $this->var.$set_num .'","'. $values . '");'; - - $tmp[] = 'so.addVariable("values'. $set_num .'","'. implode( ',', $this->data ) .'");'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'so.addVariable("links'. $set_num .'","'. implode( ',', $this->links ) .'");'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'so.addVariable("tool_tips_set'. $set_num .'","'. implode( ',', $this->tips ) .'");'; - - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } - -} - -class bar_3d extends bar -{ - function bar_3d( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_3d'; - } -} - -class bar_fade extends bar -{ - function bar_fade( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_fade'; - } -} - -class bar_outline extends bar -{ - var $outline_colour; - - function bar_outline( $alpha, $colour, $outline_colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'filled_bar'; - $this->outline_colour = $outline_colour; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class bar_glass extends bar_outline -{ - function bar_glass( $alpha, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_glass'; - } -} - -// -// this has an outline colour and a 'jiggle' parameter -// called offset -// -class bar_sketch extends bar_outline -{ - var $offset; - - function bar_sketch( $alpha, $offset, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_sketch'; - $this->offset = $offset; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->offset; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class candle -{ - var $out; - - function candle( $high, $open, $close, $low ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $open; - $this->out[] = $close; - $this->out[] = $low; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class hlc -{ - var $out; - - function hlc( $high, $low, $close ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $low; - $this->out[] = $close; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class point -{ - var $out; - - function point( $x, $y, $size_px ) - { - $this->out = array(); - $this->out[] = $x; - $this->out[] = $y; - $this->out[] = $size_px; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - - -function open_flash_chart_object_str( $width, $height, $url, $use_swfobject=true, $base='' ) -{ - // - // return the HTML as a string - // - return _ofc( $width, $height, $url, $use_swfobject, $base ); -} - -function open_flash_chart_object( $width, $height, $url, $use_swfobject=true, $base='' ) -{ - // - // stream the HTML into the page - // - echo _ofc( $width, $height, $url, $use_swfobject, $base ); -} - -function _ofc( $width, $height, $url, $use_swfobject, $base ) -{ - // - // I think we may use swfobject for all browsers, - // not JUST for IE... - // - //$ie = strstr(getenv('HTTP_USER_AGENT'), 'MSIE'); - - // - // escape the & and stuff: - // - $url = urlencode($url); - - // - // output buffer - // - $out = array(); - - // - // check for http or https: - // - if (isset ($_SERVER['HTTPS'])) - { - if (strtoupper ($_SERVER['HTTPS']) == 'ON') - { - $protocol = 'https'; - } - else - { - $protocol = 'http'; - } - } - else - { - $protocol = 'http'; - } - - // - // if there are more than one charts on the - // page, give each a different ID - // - global $open_flash_chart_seqno; - $obj_id = 'chart'; - $div_name = 'flashcontent'; - - //$out[] = ''; - - if( !isset( $open_flash_chart_seqno ) ) - { - $open_flash_chart_seqno = 1; - $out[] = ''; - } - else - { - $open_flash_chart_seqno++; - $obj_id .= '_'. $open_flash_chart_seqno; - $div_name .= '_'. $open_flash_chart_seqno; - } - - if( $use_swfobject ) - { - // Using library for auto-enabling Flash object on IE, disabled-Javascript proof - $out[] = '
'; - $out[] = ''; - $out[] = ''; - } - - return implode("\n",$out); -} - -$x = open_flash_chart_object( 300,300,"/images/open-flash-chart.swf", true); - -?> - - - -
- - diff --git a/workflow/engine/plugins/pmosCommunity/open_flash_chart_object.php b/workflow/engine/plugins/pmosCommunity/open_flash_chart_object.php deleted file mode 100644 index 5cf831634..000000000 --- a/workflow/engine/plugins/pmosCommunity/open_flash_chart_object.php +++ /dev/null @@ -1,109 +0,0 @@ -'; - - if( !isset( $open_flash_chart_seqno ) ) - { - $open_flash_chart_seqno = 1; - $out[] = ''; - } - else - { - $open_flash_chart_seqno++; - $obj_id .= '_'. $open_flash_chart_seqno; - $div_name .= '_'. $open_flash_chart_seqno; - } - - if( $use_swfobject ) - { - // Using library for auto-enabling Flash object on IE, disabled-Javascript proof - $out[] = '
'; - $out[] = ''; - $out[] = ''; - } - - return implode("\n",$out); -} -?> \ No newline at end of file diff --git a/workflow/engine/plugins/pmosCommunity/public_html/open-flash-chart.swf b/workflow/engine/plugins/pmosCommunity/public_html/open-flash-chart.swf deleted file mode 100644 index 85b590a28f4a5cea29eefa8c7cad6b551e29de4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64600 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 HtI>lMRC*G= diff --git a/workflow/engine/plugins/pmosCommunity/public_html/swfobject.js b/workflow/engine/plugins/pmosCommunity/public_html/swfobject.js deleted file mode 100644 index 02ca073dc..000000000 --- a/workflow/engine/plugins/pmosCommunity/public_html/swfobject.js +++ /dev/null @@ -1,233 +0,0 @@ -/** - * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ - * - * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - */ -if(typeof deconcept == "undefined") var deconcept = new Object(); -if(typeof deconcept.util == "undefined") deconcept.util = new Object(); -if(typeof deconcept.SWFObjectUtil == "undefined") deconcept.SWFObjectUtil = new Object(); -deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) { - if (!document.getElementById) { return; } - this.DETECT_KEY = detectKey ? detectKey : 'detectflash'; - this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY); - this.params = new Object(); - this.variables = new Object(); - this.attributes = new Array(); - if(swf) { this.setAttribute('swf', swf); } - if(id) { this.setAttribute('id', id); } - if(w) { this.setAttribute('width', w); } - if(h) { this.setAttribute('height', h); } - if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); } - this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(); - if (!window.opera && document.all && this.installedVer.major > 7) { - // only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE - deconcept.SWFObject.doPrepUnload = true; - } - if(c) { this.addParam('bgcolor', c); } - var q = quality ? quality : 'high'; - this.addParam('quality', q); - this.setAttribute('useExpressInstall', false); - this.setAttribute('doExpressInstall', false); - var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location; - this.setAttribute('xiRedirectUrl', xir); - this.setAttribute('redirectUrl', ''); - if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); } -} -deconcept.SWFObject.prototype = { - useExpressInstall: function(path) { - this.xiSWFPath = !path ? "expressinstall.swf" : path; - this.setAttribute('useExpressInstall', true); - }, - setAttribute: function(name, value){ - this.attributes[name] = value; - }, - getAttribute: function(name){ - return this.attributes[name]; - }, - addParam: function(name, value){ - this.params[name] = value; - }, - getParams: function(){ - return this.params; - }, - addVariable: function(name, value){ - this.variables[name] = value; - }, - getVariable: function(name){ - return this.variables[name]; - }, - getVariables: function(){ - return this.variables; - }, - getVariablePairs: function(){ - var variablePairs = new Array(); - var key; - var variables = this.getVariables(); - for(key in variables){ - variablePairs[variablePairs.length] = key +"="+ variables[key]; - } - return variablePairs; - }, - getSWFHTML: function() { - var swfNode = ""; - if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture - if (this.getAttribute("doExpressInstall")) { - this.addVariable("MMplayerType", "PlugIn"); - this.setAttribute('swf', this.xiSWFPath); - } - swfNode = ' 0){ swfNode += 'flashvars="'+ pairs +'"'; } - swfNode += '/>'; - } else { // PC IE - if (this.getAttribute("doExpressInstall")) { - this.addVariable("MMplayerType", "ActiveX"); - this.setAttribute('swf', this.xiSWFPath); - } - swfNode = ''; - swfNode += ''; - var params = this.getParams(); - for(var key in params) { - swfNode += ''; - } - var pairs = this.getVariablePairs().join("&"); - if(pairs.length > 0) {swfNode += '';} - swfNode += ""; - } - return swfNode; - }, - write: function(elementId){ - if(this.getAttribute('useExpressInstall')) { - // check to see if we need to do an express install - var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]); - if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) { - this.setAttribute('doExpressInstall', true); - this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl'))); - document.title = document.title.slice(0, 47) + " - Flash Player Installation"; - this.addVariable("MMdoctitle", document.title); - } - } - if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){ - var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId; - n.innerHTML = this.getSWFHTML(); - return true; - }else{ - if(this.getAttribute('redirectUrl') != "") { - document.location.replace(this.getAttribute('redirectUrl')); - } - } - return false; - } -} - -/* ---- detection functions ---- */ -deconcept.SWFObjectUtil.getPlayerVersion = function(){ - var PlayerVersion = new deconcept.PlayerVersion([0,0,0]); - if(navigator.plugins && navigator.mimeTypes.length){ - var x = navigator.plugins["Shockwave Flash"]; - if(x && x.description) { - PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); - } - }else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ // if Windows CE - var axo = 1; - var counter = 3; - while(axo) { - try { - counter++; - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter); -// document.write("player v: "+ counter); - PlayerVersion = new deconcept.PlayerVersion([counter,0,0]); - } catch (e) { - axo = null; - } - } - } else { // Win IE (non mobile) - // do minor version lookup in IE, but avoid fp6 crashing issues - // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ - try{ - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); - }catch(e){ - try { - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); - PlayerVersion = new deconcept.PlayerVersion([6,0,21]); - axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) - } catch(e) { - if (PlayerVersion.major == 6) { - return PlayerVersion; - } - } - try { - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - } catch(e) {} - } - if (axo != null) { - PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); - } - } - return PlayerVersion; -} -deconcept.PlayerVersion = function(arrVersion){ - this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; - this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; - this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; -} -deconcept.PlayerVersion.prototype.versionIsValid = function(fv){ - if(this.major < fv.major) return false; - if(this.major > fv.major) return true; - if(this.minor < fv.minor) return false; - if(this.minor > fv.minor) return true; - if(this.rev < fv.rev) return false; - return true; -} -/* ---- get value of query string param ---- */ -deconcept.util = { - getRequestParameter: function(param) { - var q = document.location.search || document.location.hash; - if (param == null) { return q; } - if(q) { - var pairs = q.substring(1).split("&"); - for (var i=0; i < pairs.length; i++) { - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { - return pairs[i].substring((pairs[i].indexOf("=")+1)); - } - } - } - return ""; - } -} -/* fix for video streaming bug */ -deconcept.SWFObjectUtil.cleanupSWFs = function() { - var objects = document.getElementsByTagName("OBJECT"); - for (var i = objects.length - 1; i >= 0; i--) { - objects[i].style.display = 'none'; - for (var x in objects[i]) { - if (typeof objects[i][x] == 'function') { - objects[i][x] = function(){}; - } - } - } -} -// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/ -if (deconcept.SWFObject.doPrepUnload) { - if (!deconcept.unloadSet) { - deconcept.SWFObjectUtil.prepUnload = function() { - __flash_unloadHandler = function(){}; - __flash_savedUnloadHandler = function(){}; - window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs); - } - window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload); - deconcept.unloadSet = true; - } -} -/* add document.getElementById if needed (mobile IE < 5) */ -if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }} - -/* add some aliases for ease of use/backwards compatibility */ -var getQueryParamValue = deconcept.util.getRequestParameter; -var FlashObject = deconcept.SWFObject; // for legacy support -var SWFObject = deconcept.SWFObject; diff --git a/workflow/engine/plugins/pmosCommunity/setupPage.xml b/workflow/engine/plugins/pmosCommunity/setupPage.xml deleted file mode 100644 index 3cf13ba37..000000000 --- a/workflow/engine/plugins/pmosCommunity/setupPage.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - <en>ProcessMaker Open Source Plugin</en> - - - - ProcessMaker Open Source Plugin, with this plugin you can see many differents charts related to the ProcessMaker Community web sites - - - - - Save - - \ No newline at end of file