Forums

custom code in onSubmit event not working

Lesanjo 17 Aug, 2012
Hello....

I keep coming across a very strange problem; I have custom code that updates a database record (updateObject()) but if this code is placed in the onsubmit event, no change to the database occurs! Even stranger is that if the exact same code is placed on a custom code element on the form designer or onLoad, the code executes the database update perfectly.

I cannot use the dbsave action because instead of updating the changes to the record, it duplicates it.

Please help

Using V4 RC 3.4
GreyHead 17 Aug, 2012
Hi Lesanjo,

There's probably a bug in the process flow in the On Submit event or a critical value is missing. I can't think of any other reason.

You can use the DB Save action have - it will update a record provided that there is a valid value for the primary key of an existing record in the form data.

Bob
Lesanjo 23 Aug, 2012
Hello,

Must be a bug because I also load the index (cf_id) using the dbloader() but it still duplicates the records...

the workaround works well for now though.

I have another issue. I'm trying to use pChart using chronoform customHTML component but it outputs strange symbols in place of the chart . However, it successfully saves a PNG.

Any idea on how to use pCharts in Joomla?

Thanks.
GreyHead 24 Aug, 2012
Hi Lesanjo,

Sorry, I don't know anything about pChart or what it outputs :-(

I have used the Google chart code successfully with ChronoForms.

Bob
Lesanjo 24 Aug, 2012
I've checked out Google charts but its use is limited by the fact that the Js file is online, need a complete offline package.

I'm using FlashChart extension for article charting, its brilliant. This begs the question: is it possible to use these plugins in the chronoform custom HTML element? eg {flashchart}mychart{/flashchart}

thanks
GreyHead 24 Aug, 2012
Hi Lesanjo,

Probably - you need to add the Joomla! Plug-ins action. Then plug-ins should work provided that they use the right Joomla! event hook.

Bob
Lesanjo 29 Aug, 2012
Hello Greyhead,

The plugin must not have the requisite event hook, The form is outputting the code as it is. I'm back to trying to use pChart. 2.x with the form.
let me create a topic to this effect.

thanks
Lesanjo 29 Aug, 2012
Hello again,

Finally figured out usage of pChart in chronoform. works like a dream.

Send anyone with a similar issue my way🙂

Greetings from Kenya.
GreyHead 29 Aug, 2012
Habari Lasanjo,

What did you need to do to get it working?

Bob
Lesanjo 31 Aug, 2012
Hello,

I placed pChart files in the libraries folder of the joomla installation.

Place the following into the custom element code box:

include('pdata.class.php');
// also include all required files

{chart generation code here}

Note that you have to use <img src /> to load the generated PNG.

Will upload the complete code soon.
Rangor 09 Oct, 2012
I did it too!
Here's the code on event's custom code:
<?php    
 /* CAT:Area Chart */ 

 /* pChart library inclusions */ 
 require_once('YOUR ABSOLUTE PATH/pChart/class/pData.class.php'); 
 require_once('YOUR ABSOLUTE PATH/pChart/class/pDraw.class.php'); 
 require_once('YOUR ABSOLUTE PATH/pChart/class/pImage.class.php'); 

 /* Create and populate the pData object */ 
 $MyData = new pData();   
 $MyData->addPoints(array(4,2,10,12,8,3),"Probe 1"); 
 $MyData->addPoints(array(3,12,15,8,5,5),"Probe 2"); 
 $MyData->addPoints(array(2,7,5,18,15,22),"Probe 3"); 
 $MyData->setSerieTicks("Probe 2",4); 
 $MyData->setAxisName(0,"Temperatures"); 
 $MyData->addPoints(array("Jan","Feb","Mar","Apr","May","Jun"),"Labels"); 
 $MyData->setSerieDescription("Labels","Months"); 
 $MyData->setAbscissa("Labels"); 

 /* Create the pChart object */ 
 $myPicture = new pImage(700,230,$MyData); 

 /* Turn of Antialiasing */ 
 $myPicture->Antialias = FALSE; 

 /* Draw the background */  
 $Settings = array("R"=>170, "G"=>183, "B"=>87, "Dash"=>1, "DashR"=>190, "DashG"=>203, "DashB"=>107); 
 $myPicture->drawFilledRectangle(0,0,700,230,$Settings);  

 /* Overlay with a gradient */  
 $Settings = array("StartR"=>219, "StartG"=>231, "StartB"=>139, "EndR"=>1, "EndG"=>138, "EndB"=>68, "Alpha"=>50); 
 $myPicture->drawGradientArea(0,0,700,230,DIRECTION_VERTICAL,$Settings);  
  
 /* Add a border to the picture */ 
 $myPicture->drawRectangle(0,0,699,229,array("R"=>0,"G"=>0,"B"=>0)); 
  
 /* Write the chart title */  
 $myPicture->setFontProperties(array("FontName"=>"YOUR ABSOLUTE PATH/pChart/fonts/Forgotte.ttf","FontSize"=>11)); 
 $myPicture->drawText(150,35,"Average temperature",array("FontSize"=>20,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); 

 /* Set the default font */ 
 $myPicture->setFontProperties(array("FontName"=>"YOUR ABSOLUTE PATH/pChart/fonts/pf_arma_five.ttf","FontSize"=>6)); 

 /* Define the chart area */ 
 $myPicture->setGraphArea(60,40,650,200); 

 /* Draw the scale */ 
 $scaleSettings = array("XMargin"=>10,"YMargin"=>10,"Floating"=>TRUE,"GridR"=>255,"GridG"=>255,"GridB"=>255,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE); 
 $myPicture->drawScale($scaleSettings); 

 /* Write the chart legend */ 
 $myPicture->drawLegend(540,20,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); 

 /* Turn on Antialiasing */ 
 $myPicture->Antialias = TRUE; 

 /* Draw the area chart */ 
 $myPicture->drawAreaChart(); 

 /* Draw a line and a plot chart on top */ 
 $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); 
 $myPicture->drawLineChart(); 
 $myPicture->drawPlotChart(array("PlotBorder"=>TRUE,"PlotSize"=>3,"BorderSize"=>1,"Surrounding"=>-60,"BorderAlpha"=>80)); 
 
 /* Render the picture (choose the best way) */ 
 $myPicture->Render("YOUR ABSOLUTE PATH/pChart/pictures/example.png");
 echo '<img src="YOUR ABSOLUTE PATH/pChart/pictures/example.png" />';   
?>


Thanks to all for your help!
Salvo
Lesanjo 20 Oct, 2012
Your welcome :-)
GreyHead 25 Oct, 2012
Hi,

Thank you both. I've added a FAQ based on these posts here. I changed some paths and variable names and added a randomiser for the data displayed (so you may get some odd temperatures!).

Bob
Jen19 04 Nov, 2013

I did it too!
Below you can see the code on event's custom code:
post:

<?php    
 /* CAT:Area Chart */ 

 /* pChart library inclusions */ 
 require_once('YOUR ABSOLUTE PATH/pChart/class/pData.class.php'); 
 require_once('YOUR ABSOLUTE PATH/pChart/class/pDraw.class.php'); 
 require_once('YOUR ABSOLUTE PATH/pChart/class/pImage.class.php'); 

 /* Create and populate the pData object */ 
 $MyData = new pData();   
 $MyData->addPoints(array(4,2,10,12,8,3),"Probe 1"); 
 $MyData->addPoints(array(3,12,15,8,5,5),"Probe 2"); 
 $MyData->addPoints(array(2,7,5,18,15,22),"Probe 3"); 
 $MyData->setSerieTicks("Probe 2",4); 
 $MyData->setAxisName(0,"Temperatures"); 
 $MyData->addPoints(array("Jan","Feb","Mar","Apr","May","Jun"),"Labels"); 
 $MyData->setSerieDescription("Labels","Months"); 
 $MyData->setAbscissa("Labels"); 

 /* Create the pChart object */ 
 $myPicture = new pImage(700,230,$MyData); 

 /* Turn of Antialiasing */ 
 $myPicture->Antialias = FALSE; 

 /* Draw the background */  
 $Settings = array("R"=>170, "G"=>183, "B"=>87, "Dash"=>1, "DashR"=>190, "DashG"=>203, "DashB"=>107); 
 $myPicture->drawFilledRectangle(0,0,700,230,$Settings);  

 /* Overlay with a gradient */  
 $Settings = array("StartR"=>219, "StartG"=>231, "StartB"=>139, "EndR"=>1, "EndG"=>138, "EndB"=>68, "Alpha"=>50); 
 $myPicture->drawGradientArea(0,0,700,230,DIRECTION_VERTICAL,$Settings);  
  
 /* Add a border to the picture */ 
 $myPicture->drawRectangle(0,0,699,229,array("R"=>0,"G"=>0,"B"=>0)); 
  
 /* Write the chart title */  
 $myPicture->setFontProperties(array("FontName"=>"YOUR ABSOLUTE PATH/pChart/fonts/Forgotte.ttf","FontSize"=>11)); 
 $myPicture->drawText(150,35,"Average temperature",array("FontSize"=>20,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); 

 /* Set the default font */ 
 $myPicture->setFontProperties(array("FontName"=>"YOUR ABSOLUTE PATH/pChart/fonts/pf_arma_five.ttf","FontSize"=>6)); 

 /* Define the chart area */ 
 $myPicture->setGraphArea(60,40,650,200); 

 /* Draw the scale */ 
 $scaleSettings = array("XMargin"=>10,"YMargin"=>10,"Floating"=>TRUE,"GridR"=>255,"GridG"=>255,"GridB"=>255,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE); 
 $myPicture->drawScale($scaleSettings); 

 /* Write the chart legend */ 
 $myPicture->drawLegend(540,20,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); 

 /* Turn on Antialiasing */ 
 $myPicture->Antialias = TRUE; 

 /* Draw the area chart */ 
 $myPicture->drawAreaChart(); 

 /* Draw a line and a plot chart on top */ 
 $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); 
 $myPicture->drawLineChart(); 
 $myPicture->drawPlotChart(array("PlotBorder"=>TRUE,"PlotSize"=>3,"BorderSize"=>1,"Surrounding"=>-60,"BorderAlpha"=>80)); 
 
 /* Render the picture (choose the best way) */ 
 $myPicture->Render("YOUR ABSOLUTE PATH/pChart/pictures/example.png");
 echo '<img src="YOUR ABSOLUTE PATH/pChart/pictures/example.png" />';   
?>


Thanks to all for your help!
Salvo



Hello Salvo,

When I tried this code, I get an error. Do you know for a fact that this is working? it is very possible that I am doing something wrong, but wanted to make sure the code is good first.
GreyHead 05 Nov, 2013
Hi Jen19,

What exactly is the code that you are using? Have you checked the FAQ?

Bob
This topic is locked and no more replies can be posted.