This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "FusionForge".
The branch, master has been updated
via 565ad9f70ef3d78eb311ddc44f57db11e8eaa8bf (commit)
via 1aff208d96e3b4a374632dbd8a449cec6fc3bb6c (commit)
from 12d8b01f07383926182f88855290f5afe4680af4 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://scm.fusionforge.org/anonscm/gitweb/?p=fusionforge/fusionforge.git;a=commitdiff;h=565ad9f70ef3d78eb311ddc44f57db11e8eaa8bf
commit 565ad9f70ef3d78eb311ddc44f57db11e8eaa8bf
Author: Stéphane-Eymeric Bredthauer <[email protected]>
Date: Thu Mar 9 17:29:29 2017 +0100
Tracker: formula improvement 2 Fix 2
diff --git a/src/common/tracker/Artifact.class.php
b/src/common/tracker/Artifact.class.php
index 527eda3..d0c70b6 100644
--- a/src/common/tracker/Artifact.class.php
+++ b/src/common/tracker/Artifact.class.php
@@ -1629,7 +1629,7 @@ class Artifact extends FFObject {
$type=$ef[$efid]['field_type'];
//special treatment for DATETIME
if ($type == ARTIFACT_EXTRAFIELDTYPE_DATETIME
&& $extra_fields[$efid]!='' ) {
- $dateTime =
DateTime::createFromFormat('Y-m-d H:i', $extra_fields[$efid]);
+ $dateTime =
DateTime::createFromFormat(_('Y-m-d H:i'), $extra_fields[$efid]);
$extra_fields[$efid] =
$dateTime->format('U');
}
//determine the type of field and whether it
should have multiple rows supporting it
https://scm.fusionforge.org/anonscm/gitweb/?p=fusionforge/fusionforge.git;a=commitdiff;h=1aff208d96e3b4a374632dbd8a449cec6fc3bb6c
commit 1aff208d96e3b4a374632dbd8a449cec6fc3bb6c
Author: Stéphane-Eymeric Bredthauer <[email protected]>
Date: Thu Mar 9 17:29:05 2017 +0100
Tracker: formula improvement 2 Fix 2
diff --git a/src/common/tracker/ArtifactExpression.class.php
b/src/common/tracker/ArtifactExpression.class.php
index 4f348ef..423f437 100644
--- a/src/common/tracker/ArtifactExpression.class.php
+++ b/src/common/tracker/ArtifactExpression.class.php
@@ -61,11 +61,12 @@ class ArtifactExpression extends FFError {
public function __construct()
{
$this->functionsDescription = array('in_array'=>_('Test if a
value is in an (json) array'));
-
+ $this->functionsDescription = array('datetime_add'=>_('Add to a
date/time a duration (duration in ISO 8601 Format)'));
$this->expression = new Expression;
$this->expression->suppress_errors = true;
$this->expression->fb = array();
$this->expression->functions ['in_array'] = 'expr_in_array';
+ $this->expression->functions ['datetime_add'] =
'expr_datetime_add';
}
public function evaluate($expression) {
@@ -110,8 +111,28 @@ class ArtifactExpression extends FFError {
public function getFunctionDescription($function) {
return $this->functionsDescription[$function];
}
+
+ public function setConstant($name,$value) {
+ $return = null;
+ $this->clearError();
+ if (is_integer($value)) {
+ $expression = $name.'='.$value;
+ } else {
+ $expression = $name.'=\''.$value.'\'';
+ }
+ $result = $this->expression->evaluate($expression);
+ $result = $this->vb[] = $name;
+ }
}
+
function expr_in_array($value, $jsonArray) {
$array = json_decode($jsonArray, true);
return in_array($value, $array);
}
+
+function expr_datetime_add($datetime, $interval) {
+ $dateTimeObj = DateTime::createFromFormat(_('Y-m-d H:i'), $datetime);
+ $intervalObj = new DateInterval($interval);
+ $dateTimeObj->add($intervalObj);
+ return $dateTimeObj->format(_('Y-m-d H:i'));
+}
diff --git a/src/common/tracker/actions/ajax.php
b/src/common/tracker/actions/ajax.php
index 38c8952..5311762 100644
--- a/src/common/tracker/actions/ajax.php
+++ b/src/common/tracker/actions/ajax.php
@@ -38,7 +38,12 @@ switch ($function) {
break;
case 'get_formulas_results':
$extra_fields = getArrayFromRequest('extra_fields');
- echo get_formulas_results($group, $atid, $extra_fields);
+ $status = getStringFromRequest('status');
+ $assigned_to = getStringFromRequest('assigned_to');
+ $priority = getStringFromRequest('priority');
+ $summary = getStringFromRequest('summary');
+ $description = getStringFromRequest('description');
+ echo get_formulas_results($group, $atid, $extra_fields,
$status, $assigned_to, $priority, $summary, $description);
break;
default:
echo '';
@@ -56,7 +61,7 @@ function get_canned_response($id) {
}
}
-function get_formulas_results($group, $atid, $extra_fields=array()){
+function get_formulas_results($group, $atid, $extra_fields=array(),
$status='', $assigned_to='', $priority=0, $summary='', $description=''){
$ret = array('message' => '');
$at = new ArtifactType($group, $atid);
if (!$at || !is_object($at)) {
@@ -72,22 +77,57 @@ function get_formulas_results($group, $atid,
$extra_fields=array()){
$expr = new ArtifactExpression();
- // Variable assignment
+ // Constants assignment
+ // Internal Fields
+ if (!$at->usesCustomStatuses()) {
+ $expr->setConstant('status', $status);
+ if ($expr->isError()) {
+ $ret['message'] = $expr->getErrorMessage()._(':').'
status=\''.$status.'\'';
+ return json_encode($ret);
+ exit();
+ }
+ }
+ $expr->setConstant('assigned_to', $assigned_to);
+ if ($expr->isError()) {
+ $ret['message'] = $expr->getErrorMessage()._(':').'
assigned_to=\''.$assigned_to.'\'';
+ return json_encode($ret);
+ exit();
+ }
+ $expr->setConstant('priority', $priority);
+ if ($expr->isError()) {
+ $ret['message'] = $expr->getErrorMessage()._(':').'
priority=\''.$priority.'\'';
+ return json_encode($ret);
+ exit();
+ }
+ $expr->setConstant('summary', $summary);
+ if ($expr->isError()) {
+ $ret['message'] = $expr->getErrorMessage()._(':').'
summary=\''.$summary.'\'';
+ return json_encode($ret);
+ exit();
+ }
+ $expr->setConstant('description', $description);
+ if ($expr->isError()) {
+ $ret['message'] = $expr->getErrorMessage()._(':').'
description=\''.$description.'\'';
+ return json_encode($ret);
+ exit();
+ }
+ // Extra Fields
$extraFields = $at->getExtraFields();
foreach ($extraFields as $extraField) {
if (isset($extra_fields[$extraField['extra_field_id']])) {
- $varAss = false;
+ $value = '';
$type = $extraField['field_type'];
if ($type==ARTIFACT_EXTRAFIELDTYPE_INTEGER) {
- $varAss =
$extraField['alias'].'='.$extra_fields[$extraField['extra_field_id']];
+ $value =
(integer)$extra_fields[$extraField['extra_field_id']];
} elseif ($type==ARTIFACT_EXTRAFIELDTYPE_TEXT ||
$type==ARTIFACT_EXTRAFIELDTYPE_TEXTAREA
||
-
$type==ARTIFACT_EXTRAFIELDTYPE_RELATION) {
- $varAss =
$extraField['alias'].'="'.addslashes($extra_fields[$extraField['extra_field_id']]).'"';
+ $type==ARTIFACT_EXTRAFIELDTYPE_RELATION
||
+
$type==ARTIFACT_EXTRAFIELDTYPE_DATETIME) {
+ $value =
addslashes($extra_fields[$extraField['extra_field_id']]);
} elseif (in_array($type,
unserialize(ARTIFACT_EXTRAFIELDTYPEGROUP_SINGLECHOICE))) {
$ef = new ArtifactExtraField($at,
$extraField['extra_field_id']);
$efe = new
ArtifactExtraFieldElement($ef,$extra_fields[$extraField['extra_field_id']] );
- $varAss =
$extraField['alias'].'="'.addslashes($efe->getName()).'"';
+ $value = addslashes($efe->getName());
} elseif (in_array($type,
unserialize(ARTIFACT_EXTRAFIELDTYPEGROUP_MULTICHOICE))) {
$var = array();
$ef = new ArtifactExtraField($at,
$extraField['extra_field_id']);
@@ -95,15 +135,13 @@ function get_formulas_results($group, $atid,
$extra_fields=array()){
$efe = new
ArtifactExtraFieldElement($ef,$element_id);
$var[]= $efe->getName();
}
- $varAss = $extraField['alias'].'=\''.
json_encode($var).'\'';
+ $value = json_encode($var);
}
- if ($varAss) {
- $expr->evaluate($varAss);
- if ($expr->isError()) {
- $ret['message'] =
$expr->getErrorMessage()._(':').' '.$varAss;
- return json_encode($ret);
- exit();
- }
+ $expr->setConstant($extraField['alias'], $value);
+ if ($expr->isError()) {
+ $ret['message'] =
$expr->getErrorMessage()._(':').'
'.$extraField['alias'].'='.($type==ARTIFACT_EXTRAFIELDTYPE_INTEGER?'':'\'').$value.($type==ARTIFACT_EXTRAFIELDTYPE_INTEGER?'':'\'');
+ return json_encode($ret);
+ exit();
}
}
}
diff --git a/src/common/tracker/include/ArtifactTypeHtml.class.php
b/src/common/tracker/include/ArtifactTypeHtml.class.php
index 456c822..1c76f67 100644
--- a/src/common/tracker/include/ArtifactTypeHtml.class.php
+++ b/src/common/tracker/include/ArtifactTypeHtml.class.php
@@ -1146,7 +1146,12 @@ class ArtifactTypeHtml extends ArtifactType {
$datetime_format = _('Y-m-d H:i');
$datetime = date($datetime_format, $datetime);
}
- return html_e('input', array_merge(array('type'=>'text',
'name'=>'extra_fields['.$extra_field_id.']', 'class'=>'datetimepicker',
'value'=>$datetime), $attrs));
+ if (isset($attrs['class'])) {
+ $attrs['class'] = $attrs['class'] . ' datetimepicker';
+ } else {
+ $attrs['class'] = 'datetimepicker';
+ }
+ return html_e('input', array_merge(array('type'=>'text',
'name'=>'extra_fields['.$extra_field_id.']', 'value'=>$datetime), $attrs));
}
function renderDateRange($extra_field_id, $dateRange, $attrs = array())
{
@@ -1372,10 +1377,11 @@ class ArtifactTypeHtml extends ArtifactType {
if(event.keyCode !== 9) return false;
});
$(".in-formula[name^='extra_fields']").on('change', function(){
+
console.log('rtype=ajax&function=get_formulas_results&group_id='+groupId+'&atid='+atId+'&status='+$("select[name='status_id']
option:selected").text()+'&assigned_to='+$("select[name='assigned_to']
option:selected").text()+'&priority='+$("select[name='priority']
option:selected").text()+'&summary='+$('input#tracker-summary').val()+'&description='+$('textarea#tracker-description').val()+'&'+$("[name^='extra_fields']"
).serialize());
$.ajax({
type: 'POST',
url: 'index.php',
- data:
'rtype=ajax&function=get_formulas_results&group_id='+groupId+'&atid='+atId+'&'+$("[name^='extra_fields']"
).serialize(),
+ data:
'rtype=ajax&function=get_formulas_results&group_id='+groupId+'&atid='+atId+'&status='+$("select[name='status_id']
option:selected").text()+'&assigned_to='+$("select[name='assigned_to']
option:selected").text()+'&priority='+$("select[name='priority']
option:selected").text()+'&summary='+$('input#tracker-summary').val()+'&description='+$('textarea#tracker-description').val()+'&'+$("[name^='extra_fields']"
).serialize(),
async: false,
dataType: 'json',
success: function(answer){
diff --git a/src/common/tracker/views/form-editformula.php
b/src/common/tracker/views/form-editformula.php
index e1032ee..1ef8926 100644
--- a/src/common/tracker/views/form-editformula.php
+++ b/src/common/tracker/views/form-editformula.php
@@ -59,6 +59,19 @@ if (!$efe_id) {
}
$efarr = $ath->getExtraFields(array(),false,true);
+$efarr [] = array('field_name'=>'Assigned to','alias'=>'assigned_to',
'field_type'=>ARTIFACT_EXTRAFIELDTYPE_USER,'extra_field_id'=>0);
+$efarr [] = array('field_name'=>'Priority','alias'=>'priority',
'field_type'=>ARTIFACT_EXTRAFIELDTYPE_SELECT, 'extra_field_id'=>0);
+$efarr [] = array('field_name'=>'Summary','alias'=>'summary',
'field_type'=>ARTIFACT_EXTRAFIELDTYPE_TEXT ,'extra_field_id'=>0);
+$efarr [] = array('field_name'=>'Detailed description','alias'=>'description',
'field_type'=>ARTIFACT_EXTRAFIELDTYPE_TEXTAREA, 'extra_field_id'=>0);
+
+if (!$ath->usesCustomStatuses()) {
+ $efarr [] = array('field_name'=>'Status','alias'=>'status',
'field_type'=>'');
+}
+
+usort($efarr, function($a, $b) {
+ return strcasecmp($a['field_name'],$b['field_name']);
+});
+
$eftypes=ArtifactExtraField::getAvailableTypes();
$keys=array_keys($efarr);
$rows=count($keys);
@@ -71,7 +84,7 @@ echo html_e('p',array(),_('Variable'));
if ($rows > 0) {
$title_arr = array();
$classth = array();
- $title_arr[] = _('Custom Fields');
+ $title_arr[] = _('Fields');
$classth[] = '';
$title_arr[] = _('Variable');
$classth[] = '';
@@ -90,52 +103,69 @@ if ($rows > 0) {
$cells[] =
array(html_e('span',array('class'=>'insert'),$efarr[$i]['alias']),
'class'=>'align-right');
$cells[] = array($eftypes[$efarr[$i]['field_type']],
'class'=>'align-right');
- //$id=str_replace('@','',$efarr[$i]['alias']);
-
- /*
- List of possible options for a user built
Selection Box
- */
-
- $elearray =
$ath->getExtraFieldElements($efarr[$i]['extra_field_id']);
-/*
- if ($efarr[$i]['field_type'] ==
ARTIFACT_EXTRAFIELDTYPE_USER && !isset($roles)) {
- $rolesarray = array();
- $roles = $ath->getGroup()->getRoles();
- foreach ($roles as $role) {
-
$rolesarray[$role->getID()]=$role->getName();
+ switch ($efarr[$i]['field_name']) {
+ case 'Status':
+ if (!$ath->usesCustomStatuses()) {
+ $statuses =
util_result_column_to_array($ath->getStatuses(),1);
+ $elearray = array();
+ $i=0;
+ foreach ($statuses as $status) {
+ $elearray [$i++] =
array('element_name'=>$status);
}
+ } else {
+ $elearray =
$ath->getExtraFieldElements($efarr[$i]['extra_field_id']);
}
- if ($efarr[$i]['field_type'] ==
ARTIFACT_EXTRAFIELDTYPE_RELEASE && !isset($packages)) {
- $packagesarray = array();
- $packages = $packages =
get_frs_packages($ath->getGroup());
- foreach ($packages as $package) {
-
$packagesarray[$package->getID()]=$package->getName();
- }
+ break;
+ case 'Priority':
+ $elearray = array();
+ for ($i = 0; $i < 5; $i++) {
+ $elearray[$i] =
array('element_name'=>$i+1);
}
+ break;
+ case 'Summary':
+ case 'Detailed description':
+ case 'Assigned to':
+ $elearray = array();
+ break;
+ default:
+ $elearray =
$ath->getExtraFieldElements($efarr[$i]['extra_field_id']);
+ }
+/*
+ if ($efarr[$i]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_USER &&
!isset($roles)) {
+ $rolesarray = array();
+ $roles = $ath->getGroup()->getRoles();
+ foreach ($roles as $role) {
+ $rolesarray[$role->getID()]=$role->getName();
+ }
+ }
+ if ($efarr[$i]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_RELEASE
&& !isset($packages)) {
+ $packagesarray = array();
+ $packages = $packages =
get_frs_packages($ath->getGroup());
+ foreach ($packages as $package) {
+
$packagesarray[$package->getID()]=$package->getName();
+ }
+ }
*/
+ $content = '';
+ if (!empty($elearray)) {
+ $optrows=count($elearray);
- $content = '';
- if (!empty($elearray)) {
- $optrows=count($elearray);
-
- for ($j=0; $j <$optrows; $j++) {
- switch
($efarr[$i]['field_type']) {
- case
ARTIFACT_EXTRAFIELDTYPE_USER:
- $content .=
$rolesarray[$elearray[$j]['element_name']];
- break;
- case
ARTIFACT_EXTRAFIELDTYPE_RELEASE:
- $content .=
$packagesarray[$elearray[$j]['element_name']];
- break;
- default:
- $content .=
html_e('span',array('class'=>'insert'),$elearray[$j]['element_name']);
- }
- $content .= html_e('br');
- }
+ for ($j=0; $j <$optrows; $j++) {
+ switch ($efarr[$i]['field_type']) {
+ case ARTIFACT_EXTRAFIELDTYPE_USER:
+ $content .=
$rolesarray[$elearray[$j]['element_name']];
+ break;
+ case ARTIFACT_EXTRAFIELDTYPE_RELEASE:
+ $content .=
$packagesarray[$elearray[$j]['element_name']];
+ break;
+ default:
+ $content .=
html_e('span',array('class'=>'insert'),$elearray[$j]['element_name']);
}
-
- $cells[] = array($content,
'class'=>'align-right');
-
- echo $HTML->multiTableRow($row_attrs, $cells);
+ $content .= html_e('br');
+ }
+ }
+ $cells[] = array($content, 'class'=>'align-right');
+ echo $HTML->multiTableRow($row_attrs, $cells);
}
echo $HTML->listTableBottom();
} else {
@@ -251,5 +281,22 @@ echo html_e('p', array(), _('The instructions have to be
terminated with a semic
echo html_e('p', array(), _('The instructions must be separated by carriage
returns'));
echo html_e('p', array(), _('Each line that begins with a hash mark is a
comment'));
echo html_e('p', array(), _('The last line must be the value to be calculated
from the field'));
-
+if (!$efe_id) {
+ echo html_e('p', array(), _('Example to define wished_date in function
of priority, submit_date and severity')._(':'));
+ echo html_ao('code');
+ echo '(priority==1)'.html_e('br');
+ echo '    ?
datetime_add(submit_date,\'P1D\')'.html_e('br');
+ echo '    : (priority == 2)'.html_e('br');
+ echo '        ?
datetime_add(submit_date,\'P3D\')'.html_e('br');
+ echo '        : (priority == 3 ||
severity == \'Low\')'.html_e('br');
+ echo '            ?
datetime_add(submit_date,\'P5D\')'.html_e('br');
+ echo '            :
datetime_add(submit_date,\'P7D\');';
+ echo html_ac(html_ap() - 1);
+} else {
+ echo html_e('p', array(), _('Example to define priority value according
to impact and severity matrix').' '._('(formula for priority is not yet
available)'));
+ echo html_e('p', array(), _('For the element \'3\' of the priority
field')._(':'));
+ echo html_ao('code');
+ echo 'impact == \'high\' && severity == \'Low\'';
+ echo html_ac(html_ap() - 1);
+}
$ath->footer();
diff --git a/src/common/tracker/views/form-updateextrafield.php
b/src/common/tracker/views/form-updateextrafield.php
index 5341079..2f2e05c 100644
--- a/src/common/tracker/views/form-updateextrafield.php
+++ b/src/common/tracker/views/form-updateextrafield.php
@@ -197,7 +197,7 @@ if (!$ac || !is_object($ac)) {
break;
}
- if (in_array($efType, array(ARTIFACT_EXTRAFIELDTYPE_TEXT,
ARTIFACT_EXTRAFIELDTYPE_INTEGER, ARTIFACT_EXTRAFIELDTYPE_TEXTAREA))) {
+ if (in_array($efType, array(ARTIFACT_EXTRAFIELDTYPE_TEXT,
ARTIFACT_EXTRAFIELDTYPE_INTEGER, ARTIFACT_EXTRAFIELDTYPE_TEXTAREA,
ARTIFACT_EXTRAFIELDTYPE_DATE, ARTIFACT_EXTRAFIELDTYPE_DATETIME))) {
echo html_ao('p');
echo html_e('label', array('for'=>'formula'), _('Formula to
calculate field value'));
echo html_e('br');
diff --git a/src/www/include/expression.php b/src/www/include/expression.php
index 01b502e..e95d2b7 100644
--- a/src/www/include/expression.php
+++ b/src/www/include/expression.php
@@ -185,7 +185,7 @@ class Expression {
// $ops_p =
array('+'=>4,'-'=>4,'*'=>4,'/'=>4,'_'=>4,'%'=>4,'^'=>5,'>'=>2,'<'=>2,
//
'>='=>2,'<='=>2,'=='=>2,'!='=>2,'=~'=>2,'&&'=>1,'||'=>1,'!'=>5); // operator
precedence
$ops_p = array (
- ':' => 0, ':?' => 0,
+ ':' => 0, '?:' => 0,
'?' => 1,
'&&' => 2, '||' => 2,
'>' => 3, '<' => 3, '>=' => 3, '<=' => 3, '=='
=> 3, '!=' => 3, '=~' => 3,
-----------------------------------------------------------------------
Summary of changes:
src/common/tracker/Artifact.class.php | 2 +-
src/common/tracker/ArtifactExpression.class.php | 23 +++-
src/common/tracker/actions/ajax.php | 70 ++++++++---
.../tracker/include/ArtifactTypeHtml.class.php | 10 +-
src/common/tracker/views/form-editformula.php | 131 ++++++++++++++-------
src/common/tracker/views/form-updateextrafield.php | 2 +-
src/www/include/expression.php | 2 +-
7 files changed, 176 insertions(+), 64 deletions(-)
hooks/post-receive
--
FusionForge
_______________________________________________
Fusionforge-commits mailing list
[email protected]
http://lists.fusionforge.org/cgi-bin/mailman/listinfo/fusionforge-commits