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  780878706a186d23b8635c53b35b29802e583483 (commit)
       via  ef2d60dff6aede8c70525ed5826a02bba562c9e4 (commit)
      from  956c614125dbb1325ed628d015ca2a55e6478769 (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=780878706a186d23b8635c53b35b29802e583483

commit 780878706a186d23b8635c53b35b29802e583483
Author: Stéphane-Eymeric Bredthauer <[email protected]>
Date:   Mon Jul 4 12:47:17 2016 +0200

    Tracker: Auto Assign, fix comment

diff --git a/src/common/tracker/include/ArtifactTypeHtml.class.php 
b/src/common/tracker/include/ArtifactTypeHtml.class.php
index 50deb5f..0a808b5 100644
--- a/src/common/tracker/include/ArtifactTypeHtml.class.php
+++ b/src/common/tracker/include/ArtifactTypeHtml.class.php
@@ -327,7 +327,7 @@ class ArtifactTypeHtml extends ArtifactType {
 
                                $str = 
$this->renderRelationField($efarr[$i]['extra_field_id'],$selected[$efarr[$i]['extra_field_id']],$efarr[$i]['attribute1'],$efarr[$i]['attribute2'],
 $attrs);
                                if ($mode == 'UPDATE') {
-                                       $post_name = 
html_image('ic/forum_edit.gif', 37, 15, array('title'=>"Click to edit", 
'alt'=>"Click to edit", 'onclick'=>"switch2edit(this, 'show$i', 'edit$i')"));
+                                       $post_name = 
html_image('ic/forum_edit.gif','37','15',array('title'=>"Click to edit", 
'alt'=>"Click to edit", 'onclick'=>"switch2edit(this, 'show$i', 'edit$i')"));
                                }
                        } elseif ($efarr[$i]['field_type'] == 
ARTIFACT_EXTRAFIELDTYPE_USER) {
                                $str = 
$this->renderUserField($efarr[$i]['extra_field_id'],$selected[$efarr[$i]['extra_field_id']],$efarr[$i]['show100'],$efarr[$i]['show100label'],$show_any,$text_any,false,
 $attrs);

https://scm.fusionforge.org/anonscm/gitweb/?p=fusionforge/fusionforge.git;a=commitdiff;h=ef2d60dff6aede8c70525ed5826a02bba562c9e4

commit ef2d60dff6aede8c70525ed5826a02bba562c9e4
Author: Stéphane-Eymeric Bredthauer <[email protected]>
Date:   Mon Jul 4 12:39:25 2016 +0200

    Tracker: Auto Assign

diff --git a/src/common/tracker/Artifact.class.php 
b/src/common/tracker/Artifact.class.php
index ae9f774..1856bf8 100644
--- a/src/common/tracker/Artifact.class.php
+++ b/src/common/tracker/Artifact.class.php
@@ -904,8 +904,26 @@ class Artifact extends FFError {
                        
$description=htmlspecialchars_decode($this->getDetails());
                        $canned_response=100;
                        $new_artifact_type_id=$this->ArtifactType->getID();
-                       $assigned_to=$this->getAssignedTo();
-
+                       $autoAssignField = 
$this->getArtifactType()->getAutoAssignField();
+                       if ($autoAssignField!=100) {
+                               $ef = new 
ArtifactExtraField($this->getArtifactType(),$autoAssignField);
+                               if (!$ef || !is_object($ef)) {
+                                       exit_error(_('Unable to create 
ArtifactExtraField Object'),'tracker');
+                               } elseif ($ef->isError()) {
+                                       
exit_error($ef->getErrorMessage(),'tracker');
+                               } else {
+                                       $efe = new 
ArtifactExtraFieldElement($ef,$extra_fields[$autoAssignField]);
+                                       if (!$efe || !is_object($efe)) {
+                                               exit_error(_('Unable to create 
ArtifactExtraFieldElement Object'),'tracker');
+                                       } elseif ($efe->isError()) {
+                                               
exit_error($efe->getErrorMessage(),'tracker');
+                                       } else {
+                                               $assigned_to = 
$efe->getAutoAssignto();
+                                       }
+                               }
+                       } else {
+                               $assigned_to=$this->getAssignedTo();
+                       }
                        if (!forge_check_perm ('tracker', 
$this->ArtifactType->getID(), 'tech')) {
                                $this->setPermissionDeniedError();
                                return false;
diff --git a/src/common/tracker/ArtifactExtraField.class.php 
b/src/common/tracker/ArtifactExtraField.class.php
index 76f31fb..b82570b 100644
--- a/src/common/tracker/ArtifactExtraField.class.php
+++ b/src/common/tracker/ArtifactExtraField.class.php
@@ -104,9 +104,10 @@ class ArtifactExtraField extends FFError {
         * @param       string  $description    Description used for help text.
         * @param       string  $pattern        A regular expression to check 
the field.
         * @param       int     $parent         Parent extra field id.
+        * @param       int     $autoassign     True or false whether it 
triggers auto-assignment rules
         * @return      bool    true on success / false on failure.
         */
-       function create($name, $field_type, $attribute1, $attribute2, 
$is_required = 0, $alias = '', $show100 = true, $show100label = 'none', 
$description = '', $pattern='', $parent=100) {
+       function create($name, $field_type, $attribute1, $attribute2, 
$is_required = 0, $alias = '', $show100 = true, $show100label = 'none', 
$description = '', $pattern='', $parent=100, $autoassign=0) {
                //
                //      data validation
                //
@@ -149,13 +150,11 @@ class ArtifactExtraField extends FFError {
                }  elseif ($field_type == ARTIFACT_EXTRAFIELDTYPE_USER) {
                        $show100label='nobody';
                }
-               if ($is_required) {
-                       $is_required=1;
-               } else {
-                       $is_required=0;
-               }
+               $is_required = ($is_required ? 1 : 0);
+               $autoassign = ($autoassign ? 1 : 0);
 
                if (!($alias = $this->generateAlias($alias,$name))) {
+                       $this->setError(_('Unable to generate alias'));
                        return false;
                }
 
@@ -185,8 +184,13 @@ class ArtifactExtraField extends FFError {
                                db_rollback();
                                return false;
                        }
+                       if ($autoassign && $this->setAutoAssign()) {
+                               $this->setError(_('Unable to set Auto Assign 
Field')._(':').db_error());
+                               return false;
+                       }
                        if ($field_type == ARTIFACT_EXTRAFIELDTYPE_STATUS) {
                                if 
(!$this->ArtifactType->setCustomStatusField($id)) {
+                                       $this->setError(_('Unable to set Custom 
Status Field')._(':').db_error());
                                        db_rollback();
                                        return false;
                                } else {
@@ -195,18 +199,18 @@ class ArtifactExtraField extends FFError {
                                        //
                                        $ao = new 
ArtifactExtraFieldElement($this);
                                        if (!$ao || !is_object($ao)) {
-                                               $feedback .= 'Unable to create 
ArtifactExtraFieldElement Object';
+                                               $this->setError(_('Unable to 
create ArtifactExtraFieldElement Object'));
                                                db_rollback();
                                                return false;
                                        } else {
                                                if (!$ao->create('Open', '1')) {
-                                                       $feedback .= _('Insert 
Error')._(': ').$ao->getErrorMessage();
+                                                       
$this->setError(_('Insert Error')._(': ').$ao->getErrorMessage());
                                                        $ao->clearError();
                                                        db_rollback();
                                                        return false;
                                                }
                                                if (!$ao->create('Closed', 
'2')) {
-                                                       $feedback .= _('Insert 
Error')._(': ').$ao->getErrorMessage();
+                                                       
$this->setError(_('Insert Error')._(': ').$ao->getErrorMessage());
                                                        $ao->clearError();
                                                        db_rollback();
                                                        return false;
@@ -417,6 +421,38 @@ class ArtifactExtraField extends FFError {
        }
 
        /**
+        * isAutoAssign
+        *
+        * @return      boolean assign.
+        */
+       function isAutoAssign() {
+               if ($this->getArtifactType()->getAutoAssignField() == 
$this->getID()) {
+                       return true;
+               }
+               else {
+                       return false;
+               }
+       }
+
+       /**
+        * setAutoAssign - set this field that triggers auto-assignment rules.
+        *
+        * @return      boolean
+        */
+       function setAutoAssign() {
+               return 
$this->getArtifactType()->setAutoAssignField($this->getID());
+       }
+
+       /**
+        * unsetAutoAssign - unset this field that triggers auto-assignment 
rules.
+        *
+        * @return      boolean
+        */
+       function unsetAutoAssign() {
+               return $this->getArtifactType()->setAutoAssignField(100);
+       }
+
+       /**
         * getAvailableTypes - the types of text fields and their names 
available.
         *
         * @return      array   types.
@@ -520,7 +556,7 @@ class ArtifactExtraField extends FFError {
         * @param       int     $parent         Parent extra field id.
         * @return      bool    success.
         */
-       function update($name, $attribute1, $attribute2, $is_required = 0, 
$alias = "", $show100 = true, $show100label = 'none', $description = '', 
$pattern='', $parent=100) {
+       function update($name, $attribute1, $attribute2, $is_required = 0, 
$alias = "", $show100 = true, $show100label = 'none', $description = '', 
$pattern='', $parent=100, $autoassign=0) {
                if (!forge_check_perm ('tracker_admin', 
$this->ArtifactType->Group->getID())) {
                        $this->setPermissionDeniedError();
                        return false;
@@ -542,11 +578,9 @@ class ArtifactExtraField extends FFError {
                        $this->setError(_('Field name already exists'));
                        return false;
                }
-               if ($is_required) {
-                       $is_required=1;
-               } else {
-                       $is_required=0;
-               }
+
+               $is_required = ($is_required ? 1 : 0);
+               $autoassign = ($autoassign ? 1 : 0);
 
                if (!($alias = $this->generateAlias($alias,$name))) {
                        return false;
@@ -577,6 +611,18 @@ class ArtifactExtraField extends FFError {
                                                          $this->getID(),
                                                          
$this->ArtifactType->getID())) ;
                if ($result && db_affected_rows($result) > 0) {
+                       if ($autoassign && !$this->isAutoAssign()) {
+                               if (!$this->setAutoAssign()) {
+                                       $this->setError(_('Unable to set Auto 
Assign Field')._(':').db_error());
+                                       return false;
+                               }
+                       }
+                       if (!$autoassign && $this->isAutoAssign()) {
+                               if (!$this->unsetAutoAssign()) {
+                                       $this->setError(_('Unable to unset Auto 
Assign Field')._(':').db_error());
+                                       return false;
+                               }
+                       }
                        return true;
                } else {
                        $this->setError(db_error());
@@ -613,6 +659,12 @@ class ArtifactExtraField extends FFError {
                                                        return false;
                                                }
                                        }
+                                       if ($this->isAutoAssign()) {
+                                               if (!$this->unsetAutoAssign()) {
+                                                       db_rollback();
+                                                       return false;
+                                               }
+                                       }
                                        db_commit();
                                        return true;
                                } else {
diff --git a/src/common/tracker/ArtifactExtraFieldElement.class.php 
b/src/common/tracker/ArtifactExtraFieldElement.class.php
index f6b44c0..5d67f85 100644
--- a/src/common/tracker/ArtifactExtraFieldElement.class.php
+++ b/src/common/tracker/ArtifactExtraFieldElement.class.php
@@ -101,7 +101,7 @@ class ArtifactExtraFieldElement extends FFError {
         * @param       int     $status_id      Id the box that contains the 
choice (optional).
         * @return      bool    true on success / false on failure.
         */
-       function create($name,$status_id=0) {
+       function create($name,$status_id=0,$auto_assign_to=100) {
                //
                //      data validation
                //
@@ -129,10 +129,11 @@ class ArtifactExtraFieldElement extends FFError {
                        return false;
                }
                db_begin();
-               $result = db_query_params ('INSERT INTO 
artifact_extra_field_elements (extra_field_id,element_name,status_id) VALUES 
($1,$2,$3)',
+               $result = db_query_params ('INSERT INTO 
artifact_extra_field_elements 
(extra_field_id,element_name,status_id,auto_assign_to) VALUES ($1,$2,$3,$4)',
                                           array 
($this->ArtifactExtraField->getID(),
                                                  htmlspecialchars($name),
-                                                 $status_id)) ;
+                                                 $status_id,
+                                                 $auto_assign_to));
                if ($result && db_affected_rows($result) > 0) {
                        $this->clearError();
                        
$id=db_insertid($result,'artifact_extra_field_elements','element_id');
@@ -223,6 +224,15 @@ class ArtifactExtraFieldElement extends FFError {
        }
 
        /**
+        * getAutoAssignedUser - return id of the user witch issue is auto 
assign to.
+        *
+        * @return      integer user id.
+        */
+       function getAutoAssignto() {
+               return $this->data_array['auto_assign_to'];
+       }
+
+       /**
         * getParentElements - return the list of the elements of the parent 
field on which depends the current element
         *
         * @return      array of parent elements
@@ -339,7 +349,7 @@ class ArtifactExtraFieldElement extends FFError {
         * @param       int     $status_id      optional for status box - maps 
to either open/closed.
         * @return      bool    success.
         */
-       function update($name,$status_id=0) {
+       function update($name,$status_id=0,$auto_assign_to=100) {
                if (!forge_check_perm ('tracker_admin', 
$this->ArtifactExtraField->ArtifactType->Group->getID())) {
                        $this->setPermissionDeniedError();
                        return false;
@@ -365,10 +375,11 @@ class ArtifactExtraFieldElement extends FFError {
                        $status_id=0;
                }
                $result = db_query_params ('UPDATE artifact_extra_field_elements
-                       SET element_name=$1, status_id=$2
-                       WHERE element_id=$3',
+                       SET element_name=$1, status_id=$2, auto_assign_to=$3
+                       WHERE element_id=$4',
                                           array (htmlspecialchars($name),
                                                  $status_id,
+                                                 $auto_assign_to,
                                                  $this->getID())) ;
                if ($result && db_affected_rows($result) > 0) {
                        return true;
diff --git a/src/common/tracker/ArtifactType.class.php 
b/src/common/tracker/ArtifactType.class.php
index c071898..3a2fbaa 100644
--- a/src/common/tracker/ArtifactType.class.php
+++ b/src/common/tracker/ArtifactType.class.php
@@ -466,6 +466,29 @@ class ArtifactType extends FFError {
        }
 
        /**
+        * getAutoAssignField - get the extra_field_id of the field that 
triggers auto-assignment rules.
+        *
+        * @return      int     extra_field_id.
+        */
+       function getAutoAssignField() {
+               return $this->data_array['auto_assign_field'];
+       }
+
+       /**
+        * setAutoAssignField - set the extra_field_id of the field that 
triggers auto-assignment rules.
+        *
+        * @param       int     $extra_field_id The extra field id.
+        * @return      boolean success.
+        */
+       function setAutoAssignField($extra_field_id) {
+               $res = db_query_params('UPDATE artifact_group_list SET 
auto_assign_field=$1
+                       WHERE group_artifact_id=$2',
+                               array ($extra_field_id,
+                                      $this->getID()));
+               return $res;
+       }
+
+       /**
         * usesCustomStatuses - boolean
         *
         * @return      boolean use_custom_statues.
diff --git a/src/common/tracker/actions/admin-updates.php 
b/src/common/tracker/actions/admin-updates.php
index 4ca6abe..4633603 100644
--- a/src/common/tracker/actions/admin-updates.php
+++ b/src/common/tracker/actions/admin-updates.php
@@ -45,7 +45,7 @@ if (getStringFromRequest('add_extrafield')) {
        $alias = getStringFromRequest('alias');
        $hide100 = getStringFromRequest('hide100');
        $show100label = getStringFromRequest('show100label');
-
+       $autoassign = getStringFromRequest('autoassign');
        $ab = new ArtifactExtraField($ath);
 
        if (!$ab || !is_object($ab)) {
@@ -58,7 +58,7 @@ if (getStringFromRequest('add_extrafield')) {
                } else {
                        $show100 = 1;
                }
-               if (!$ab->create($name, $field_type, $attribute1, $attribute2, 
$is_required, $alias, $show100, $show100label, $description, $pattern, 
$parent)) {
+               if (!$ab->create($name, $field_type, $attribute1, $attribute2, 
$is_required, $alias, $show100, $show100label, $description, $pattern, $parent, 
$autoassign)) {
                        $error_msg .= _('Error inserting a custom field')._(': 
').$ab->getErrorMessage();
                        $ab->clearError();
                } else {
@@ -240,7 +240,7 @@ if (getStringFromRequest('add_extrafield')) {
        $alias = getStringFromRequest('alias');
        $hide100 = getStringFromRequest('hide100');
        $show100label = getStringFromRequest('show100label');
-
+       $autoassign = getStringFromRequest('autoassign');
        $ac = new ArtifactExtraField($ath, $id);
        if (!$ac || !is_object($ac)) {
                $error_msg .= _('Unable to create ArtifactExtraField Object');
@@ -252,7 +252,7 @@ if (getStringFromRequest('add_extrafield')) {
                } else {
                        $show100 = 1;
                }
-               if (!$ac->update($name, $attribute1, $attribute2, $is_required, 
$alias, $show100, $show100label, $description, $pattern, $parent)) {
+               if (!$ac->update($name, $attribute1, $attribute2, $is_required, 
$alias, $show100, $show100label, $description, $pattern, $parent, $autoassign)) 
{
                        $error_msg .= _('Update failed')._(': 
').$ac->getErrorMessage();
                        $ac->clearError();
                } else {
@@ -265,16 +265,14 @@ if (getStringFromRequest('add_extrafield')) {
 //     Update an Element
 //
 } elseif (getStringFromRequest('update_opt')) {
-       $id = getStringFromRequest('id');
        $boxid = getStringFromRequest('boxid');
-       $parentElements = getStringFromRequest('parent_elements');
-
        $ac = new ArtifactExtraField($ath,$boxid);
        if (!$ac || !is_object($ac)) {
                $error_msg .= _('Unable to create ArtifactExtraField Object');
        } elseif ($ac->isError()) {
                $error_msg .= $ac->getErrorMessage();
        } else {
+               $id = getStringFromRequest('id');
                $ao = new ArtifactExtraFieldElement($ac,$id);
                if (!$ao || !is_object($ao)) {
                        $error_msg .= _('Unable to create 
ArtifactExtraFieldElement Object');
@@ -283,7 +281,8 @@ if (getStringFromRequest('add_extrafield')) {
                } else {
                        $name = getStringFromRequest('name');
                        $status_id = getIntFromRequest('status_id');
-                       if (!$ao->update($name,$status_id)) {
+                       $autoAssignTo = getStringFromRequest('auto_assign_to');
+                       if (!$ao->update($name,$status_id,$autoAssignTo)) {
                                $error_msg .= _('Update failed')._(': 
').$ao->getErrorMessage();
                                $ao->clearError();
                        } else {
diff --git a/src/common/tracker/actions/browse.php 
b/src/common/tracker/actions/browse.php
index 9a3571c..251bf9c 100644
--- a/src/common/tracker/actions/browse.php
+++ b/src/common/tracker/actions/browse.php
@@ -732,7 +732,7 @@ if ($art_arr && $art_cnt > 0) {
                                $sel[$keys[$i]]='100';
                        }
                }
-               $ath->renderExtraFields($sel,true,_('No Change'),false,'', 
array(ARTIFACT_EXTRAFIELD_FILTER_INT),true);
+               $ath->renderExtraFields($sel,true,_('No Change'),false,'', 
array(ARTIFACT_EXTRAFIELD_FILTER_INT),true,'UPDATE');
                echo '<tr>';
                echo '<td><strong>'._('Priority')._(':').'</strong><br />';
                echo build_priority_select_box ('priority', '100', true);
diff --git a/src/common/tracker/actions/mod-limited.php 
b/src/common/tracker/actions/mod-limited.php
index bb5ced2..fc81746 100644
--- a/src/common/tracker/actions/mod-limited.php
+++ b/src/common/tracker/actions/mod-limited.php
@@ -147,7 +147,7 @@ if (session_loggedin()) {
                        <strong><?php echo _('State')._(':'); ?></strong><br />
                        <span id="tracker-status_id" title="<?php echo 
util_html_secure(html_get_tooltip_description('status_id_tracker')) ?>">
                        <?php echo $ath->statusBox ('status_id', 
$ah->getStatusID() ); ?>
-                       <span>
+                       </span>
                </td>
                <td>
                </td>
diff --git a/src/common/tracker/include/ArtifactTypeHtml.class.php 
b/src/common/tracker/include/ArtifactTypeHtml.class.php
index 8ef2679..50deb5f 100644
--- a/src/common/tracker/include/ArtifactTypeHtml.class.php
+++ b/src/common/tracker/include/ArtifactTypeHtml.class.php
@@ -31,6 +31,7 @@ require_once $gfcommon.'tracker/ArtifactExtraField.class.php';
 require_once $gfcommon.'tracker/ArtifactExtraFieldElement.class.php';
 require_once $gfcommon.'tracker/ArtifactWorkflow.class.php';
 require_once $gfcommon.'include/utils_crossref.php';
+require_once $gfcommon.'include/UserManager.class.php';
 
 class ArtifactTypeHtml extends ArtifactType {
 
@@ -346,6 +347,18 @@ class ArtifactTypeHtml extends ArtifactType {
                }
                return false;
        };
+       $(".autoassign[name^='extra_fields']").on('change', function(){
+               if ($(this).prop('tagName') == 'SELECT') {
+                       var elmnts = $(this).children('option:selected');
+               } else {
+                       var elmnts = $(this).siblings('input:checked');
+               }
+               elmnts.each(function(i){
+                       var aat = $(this).data("autoassignto");
+                       $("select#tracker-assigned_to 
option[value="+aat.id+"]").prop('selected', true);
+                       $("span#tracker-assigned_to").text(aat.name);
+               });
+       });
        $(".with-depcy[name^='extra_fields']").on('change', function(){
                if ($(this).prop('tagName') == 'SELECT') {
                        var elmnts = $(this).children('option:selected');
@@ -659,6 +672,9 @@ EOS;
                if (!empty($aefChildren)) {
                        $attrs['class'] = (empty($attrs['class']) ? 
'':$attrs['class'].' ').'with-depcy';
                }
+               if ($aef->isAutoAssign())  {
+                       $attrs['class'] = (empty($attrs['class']) ? 
'':$attrs['class'].' ').'autoassign';
+               }
                $vals = array();
                $texts = array();
                $opt_attrs = array();
@@ -682,6 +698,10 @@ EOS;
                                        $opt_attrs[$i]= array( 
'data-dependency'=>$dependency);
                                }
                        }
+                       if ($aef->isAutoAssign()) {
+                               $autoAssignTo = 
UserManager::instance()->getUserById($aefe->getAutoAssignto());
+                               
$opt_attrs[$i]=array_merge(isset($opt_attrs[$i]) ? $opt_attrs[$i] : array(), 
array( 'data-autoassignto'=>'{"id":'.$aefe->getAutoAssignto().', 
"name":"'.$autoAssignTo->getRealName().' 
('.$autoAssignTo->getUnixName().')"}'));
+                       }
                }
 
                if ($show_100 && !empty($aefChildren)) {
@@ -775,6 +795,10 @@ EOS;
                                        
$radios_attrs[$i]['data-dependency']=$dependency;
                                }
                        }
+                       if ($aef->isAutoAssign()) {
+                               $autoAssignTo = 
UserManager::instance()->getUserById($aefe->getAutoAssignto());
+                               
$radios_attrs[$i]=array_merge(isset($radios_attrs[$i]) ? $radios_attrs[$i] : 
array(), array( 'data-autoassignto'=>'{"id":'.$aefe->getAutoAssignto().', 
"name":"'.$autoAssignTo->getRealName().' 
('.$autoAssignTo->getUnixName().')"}'));
+                       }
                }
                if ($show_100 && !empty($aefChildren)) {
                        $attrs_100 = array( 'data-dependency'=>'{"fields": 
['.implode(', ',$aefChildren).']}');
diff --git a/src/common/tracker/views/form-addextrafield.php 
b/src/common/tracker/views/form-addextrafield.php
index 4de2cac..71d4571 100644
--- a/src/common/tracker/views/form-addextrafield.php
+++ b/src/common/tracker/views/form-addextrafield.php
@@ -44,8 +44,11 @@ if ($rows > 0) {
        $title_arr=array();
        $title_arr[]=_('Custom Fields Defined');
        $title_arr[]=_('Type');
+       $title_arr[]=_('Auto Assign');
+       $title_arr[]=_('Depend on');
        $title_arr[]=_('Elements Defined');
        $title_arr[]=_('Add Options');
+       $autoAssignFieldId = $ath->getAutoAssignField();
        echo $HTML->listTableTop($title_arr);
        $rownb = 0;
        for ($k=0; $k < $rows; $k++) {
@@ -59,6 +62,17 @@ if ($rows > 0) {
                                
util_make_link('/tracker/admin/?copy_opt=1&id='.$efarr[$i]['extra_field_id'].'&group_id='.$group_id.'&atid='.
 $ath->getID(), ' ['._('Copy').']').
                                "</td>\n";
                echo '<td>'.$eftypes[$efarr[$i]['field_type']]."</td>\n";
+               if ($autoAssignFieldId==$i) {
+                       echo '<td 
class="align-center">'.html_image("ic/check.png",'15','13').'</td>'."\n";
+               } else {
+                       echo '<td></td>'."\n";
+               }
+               $parentFieldId = $efarr[$i]['parent'];
+               if ($parentFieldId!=100) {
+                       echo 
'<td>'.$efarr[$parentFieldId]['field_name'].'</td>'."\n";
+               } else {
+                       echo '<td></td>'."\n";
+               }
                /*
                        List of possible options for a user built Selection Box
                */
@@ -111,8 +125,10 @@ if ($rows > 0) {
        echo $HTML->warning_msg(_('You have not defined any custom fields'));
 }
 
-echo "<h2>"._('Add New Custom Field')."</h2>";
+echo html_e('h2', array(), _('Add New Custom Field'));
+
 echo $HTML->openForm(array('action' => 
'/tracker/admin/?group_id='.$group_id.'&atid='.$ath->getID(), 'method' => 
'post'));
+
 echo html_ao('p');
 echo html_e('input', array('type'=>'hidden', 'name'=>'add_extrafield', 
'value'=>'y'));
 
@@ -131,14 +147,17 @@ echo html_e('input', array('type'=>'text', 
'name'=>'description', 'value'=>'', '
 echo html_ac(html_ap() - 1);
 
 echo html_ao('p');
-echo html_e('strong', array(), _('Type of custom 
field').utils_requiredField()._(':')).html_e('br');
+echo html_build_checkbox('is_required', false, false);
+echo html_e('label', array('for'=>'is_required'), _('Field is mandatory'));
+echo html_ac(html_ap() - 1);
 
+echo html_ao('p');
+echo html_e('strong', array(), _('Type of custom 
field').utils_requiredField()._(':')).html_e('br');
 if ($ath->usesCustomStatuses()) {
        unset($eftypes[ARTIFACT_EXTRAFIELDTYPE_STATUS]);
 }
 $vals = array_keys($eftypes);
 $texts = array_values($eftypes);
-
 echo html_build_radio_buttons_from_arrays($vals, $texts, 'field_type', '', 
false, '', false ,'', false, array('required'=>'required') );
 echo html_ac(html_ap() - 1);
 
@@ -148,9 +167,24 @@ echo _('Text Field Size/Text Area Rows');
 echo html_e('input', array('type'=>'text', 'name'=>'attribute1', 
'value'=>'20', 'size'=>'2', 'maxlength'=>'2')).html_e('br');
 echo _('Text Field Maxlength/Text Area Columns');
 echo html_e('input', array('type'=>'text', 'name'=>'attribute2', 
'value'=>'80', 'size'=>'2', 'maxlength'=>'2')).html_e('br');
+echo html_ac(html_ap() - 1);
+
+echo html_ao('p');
 echo _('Text Field Pattern');
-echo html_e('input', array('type'=>'text', 'name'=>'pattern', 'value'=>'', 
'size'=>'80', 'maxlength'=>'255')).html_e('br');
+echo html_e('input', array('type'=>'text', 'name'=>'pattern', 'value'=>'', 
'size'=>'50', 'maxlength'=>'255')).html_e('br');
+echo html_ac(html_ap() - 1);
+
+echo html_ao('p');
+echo html_build_checkbox('hide100', false, false);
+echo html_e('label', array('for'=>'hide100'), _('Hide the default none 
value'));
+echo html_ac(html_ap() - 1);
+
+echo html_ao('p');
+echo _('Label for the none value');
+echo html_e('input', array('type'=>'text', 'name'=>'show100label', 
'value'=>_('none'), 'size'=>'30')).html_e('br');
+echo html_ac(html_ap() - 1);
 
+echo html_ao('p');
 $pfarr = $ath->getExtraFields(array(ARTIFACT_EXTRAFIELDTYPE_RADIO, 
ARTIFACT_EXTRAFIELDTYPE_CHECKBOX,ARTIFACT_EXTRAFIELDTYPE_SELECT,ARTIFACT_EXTRAFIELDTYPE_MULTISELECT));
 $parentField = array();
 if (is_array($pfarr)) {
@@ -161,15 +195,11 @@ if (is_array($pfarr)) {
 asort($parentField,SORT_FLAG_CASE | SORT_STRING);
 echo _('Parent Field');
 echo html_build_select_box_from_arrays(array_keys($parentField), 
array_values($parentField), 'parent', null, true, 'none').html_e('br');
-echo _('Hide the default none value');
-echo html_build_checkbox('hide100','',false).html_e('br');
-echo _('Label for the none value');
-echo html_e('input', array('type'=>'text', 'name'=>'show100label', 
'value'=>_('none'), 'size'=>'30')).html_e('br');
 echo html_ac(html_ap() - 1);
 
 echo html_ao('p');
-echo html_build_checkbox('is_required','',false);
-echo html_e('label', array('for'=>'is_required'), _('Field is mandatory'));
+echo html_build_checkbox('autoassign', false, false);
+echo html_e('label', array('for'=>'autoassign'), _('Field that triggers 
auto-assignment rules'));
 echo html_ac(html_ap() - 1);
 
 echo $HTML->warning_msg(_('Warning: this add new custom field'));
diff --git a/src/common/tracker/views/form-updateextrafield.php 
b/src/common/tracker/views/form-updateextrafield.php
index 2a36247..0a938af 100644
--- a/src/common/tracker/views/form-updateextrafield.php
+++ b/src/common/tracker/views/form-updateextrafield.php
@@ -55,35 +55,63 @@ if (!$ac || !is_object($ac)) {
        echo html_ac(html_ap() - 1);
 
        echo html_ao('p');
+       echo html_e('label', array('for'=>'alias'), html_e('strong', array(), 
_('Field alias')._(':')).html_e('br'));
+       echo html_e('input', array('type'=>'text', 'id'=>'alias', 
'name'=>'alias', 'value'=>$ac->getAlias(), 'size'=>'15', 'maxlength'=>'30'));
+       echo html_ac(html_ap() - 1);
+
+       echo html_ao('p');
        echo html_e('label', array('for'=>'description'), html_e('strong', 
array(), _('Description')._(':')).html_e('br'));
        echo html_e('input', array('type'=>'text', 'name'=>'description', 
'value'=>$ac->getDescription(), 'size'=>'50', 'maxlength'=>'255'));
        echo html_ac(html_ap() - 1);
 
        echo html_ao('p');
+       echo html_build_checkbox('is_required', false, $ac->isRequired());
+       echo html_e('label', array('for'=>'is_required'), _('Field is 
mandatory'));
+       echo html_ac(html_ap() - 1);
+
        $efType=$ac->getType();
        if ($efType == ARTIFACT_EXTRAFIELDTYPE_TEXTAREA) {
-               echo html_e('label', array('for'=>'attribute1'), html_e('b', 
array(), _('Text Area Columns')).html_e('br'));
+               echo html_ao('p');
+               echo html_e('label', array('for'=>'attribute1'), _('Text Area 
Columns'));
                echo html_e('input', array('type'=>'text', 'id'=>'attribute1', 
'name'=>'attribute1', 'value'=>$ac->getAttribute1(), 'size'=>'2', 
'maxlength'=>'2'));
                echo html_ac(html_ap() - 1);
+
                echo html_ao('p');
-               echo html_e('label', array('for'=>'attribute2'), html_e('b', 
array(), _('Text Area Columns')).html_e('br'));
+               echo html_e('label', array('for'=>'attribute2'), _('Text Area 
Columns'));
                echo html_e('input', array('type'=>'text', 'id'=>'attribute2', 
'name'=>'attribute2', 'value'=>$ac->getAttribute2(), 'size'=>'2', 
'maxlength'=>'2'));
+               echo html_ac(html_ap() - 1);
+
        } elseif ($efType == ARTIFACT_EXTRAFIELDTYPE_TEXT || $efType == 
ARTIFACT_EXTRAFIELDTYPE_RELATION) {
-               echo html_e('label', array('for'=>'attribute1'), html_e('b', 
array(), _('Text Field Size')).html_e('br'));
+               echo html_ao('p');
+               echo html_e('label', array('for'=>'attribute1'), _('Text Field 
Size'));
                echo html_e('input', array('type'=>'text', 'id'=>'attribute1', 
'name'=>'attribute1', 'value'=>$ac->getAttribute1(), 'size'=>'2', 
'maxlength'=>'2'));
                echo html_ac(html_ap() - 1);
+
                echo html_ao('p');
-               echo html_e('label', array('for'=>'attribute2'), html_e('b', 
array(), _('Text Field Maxlength')).html_e('br'));
+               echo html_e('label', array('for'=>'attribute2'), _('Text Field 
Maxlength'));
                echo html_e('input', array('type'=>'text', 'id'=>'attribute2', 
'name'=>'attribute2', 'value'=>$ac->getAttribute2(), 'size'=>'2', 
'maxlength'=>'2'));
+               echo html_ac(html_ap() - 1);
+
                if ($efType == ARTIFACT_EXTRAFIELDTYPE_TEXT) {
-                       echo html_ac(html_ap() - 1);
                        echo html_ao('p');
-                       echo html_e('label', array('for'=>'pattern'), 
html_e('b', array(), _('Text Field Pattern')).html_e('br'));
-                       echo html_e('input', array('type'=>'text', 
'id'=>'pattern', 'name'=>'pattern', 'value'=>$ac->getPattern(), 'size'=>'80', 
'maxlength'=>'255'));
+                       echo html_e('label', array('for'=>'pattern'), _('Text 
Field Pattern'));
+                       echo html_e('input', array('type'=>'text', 
'id'=>'pattern', 'name'=>'pattern', 'value'=>$ac->getPattern(), 'size'=>'50', 
'maxlength'=>'255'));
+                       echo html_ac(html_ap() - 1);
                }
        } else {
                echo html_e('input', array('type'=>'hidden', 
'name'=>'attribute1', 'value'=>'0'));
                echo html_e('input', array('type'=>'hidden', 
'name'=>'attribute2', 'value'=>'0'));
+
+               echo html_ao('p');
+               echo html_build_checkbox('hide100', false, !$ac->getShow100());
+               echo html_e('label', array('for'=>'hide100'), _('Hide the 
default none value'));
+               echo html_ac(html_ap() - 1);
+
+               echo html_ao('p');
+               echo html_e('label', array('for'=>'show100label'), html_e('b', 
array(), _('Label for the none value')).html_e('br'));
+               echo html_e('input', array('type'=>'text', 
'name'=>'show100label', 'value'=>$ac->getShow100label(), 'size'=>'30'));
+               echo html_ac(html_ap() - 1);
+
                if (in_array($efType, array(ARTIFACT_EXTRAFIELDTYPE_RADIO, 
ARTIFACT_EXTRAFIELDTYPE_CHECKBOX,ARTIFACT_EXTRAFIELDTYPE_SELECT,ARTIFACT_EXTRAFIELDTYPE_MULTISELECT)))
 {
                        $pfarr = 
$ath->getExtraFields(array(ARTIFACT_EXTRAFIELDTYPE_RADIO, 
ARTIFACT_EXTRAFIELDTYPE_CHECKBOX,ARTIFACT_EXTRAFIELDTYPE_SELECT,ARTIFACT_EXTRAFIELDTYPE_MULTISELECT));
                        $parentField = array();
@@ -100,24 +128,13 @@ if (!$ac || !is_object($ac)) {
                        echo 
html_build_select_box_from_arrays(array_keys($parentField), 
array_values($parentField), 'parent', $ac->getParent(), true, 
'none').html_e('br');
                        echo html_ac(html_ap() - 1);
                }
-               echo html_e('label', array('for'=>'hide100'), html_e('b', 
array(), _('Hide the default none value')).html_e('br'));
-               echo html_build_checkbox('hide100','',!$ac->getShow100());
-               echo html_ac(html_ap() - 1);
-               echo html_ao('p');
-               echo html_e('label', array('for'=>'show100label'), html_e('b', 
array(), _('Label for the none value')).html_e('br'));
-               echo html_e('input', array('type'=>'text', 
'name'=>'show100label', 'value'=>$ac->getShow100label(), 'size'=>'30'));
+               if (in_array($efType, array(ARTIFACT_EXTRAFIELDTYPE_RADIO, 
ARTIFACT_EXTRAFIELDTYPE_SELECT))) {
+                       echo html_ao('p');
+                       echo html_build_checkbox('autoassign', false, 
$ac->isAutoAssign());
+                       echo html_e('label', array('for'=>'autoassign'), 
_('Field that triggers auto-assignment rules'));
+                       echo html_ac(html_ap() - 1);
+               }
        }
-       echo html_ac(html_ap() - 1);
-
-       echo html_ao('p');
-       echo html_e('label', array('for'=>'alias'), html_e('strong', array(), 
_('Field alias')._(':')).html_e('br'));
-       echo html_e('input', array('type'=>'text', 'id'=>'alias', 
'name'=>'alias', 'value'=>$ac->getAlias(), 'size'=>'15', 'maxlength'=>'30'));
-       echo html_ac(html_ap() - 1);
-
-       echo html_ao('p');
-       echo html_build_checkbox('is_required','',$ac->isRequired());
-       echo html_e('label', array('for'=>'is_required'), _('Field is 
mandatory'));
-       echo html_ac(html_ap() - 1);
 
        echo $HTML->warning_msg(_('It is not recommended that you change the 
custom field name because other things are dependent upon it. When you change 
the custom field name, all related items will be changed to the new name.'));
 
diff --git a/src/common/tracker/views/form-updateextrafieldelement.php 
b/src/common/tracker/views/form-updateextrafieldelement.php
index 6af9164..6514166 100644
--- a/src/common/tracker/views/form-updateextrafieldelement.php
+++ b/src/common/tracker/views/form-updateextrafieldelement.php
@@ -71,11 +71,24 @@ if (!$ac || !is_object($ac)) {
                        $checkedElmntsArr = $ao->getParentElements();
                        echo 
html_build_checkboxes_from_array($parentFieldElmntVals, 'parent_elements', 
$checkedElmntsArr, true);
                }
+               if ($ac->isAutoAssign()) {
+                       echo html_e('strong',array(),_('Auto assign 
to')._(':')).html_e('br');
+                       $engine = RBACEngine::getInstance () ;
+                       $techs = $engine->getUsersByAllowedAction ('tracker', 
$ath->getID(), 'tech') ;
+                       sortUserList($techs);
+                       foreach ($techs as $tech) {
+                               $ids[] = $tech->getID() ;
+                               $names[] = 
$tech->getRealName().(($tech->getStatus()=='S') ? ' '._('[SUSPENDED]') : '');
+                       }
+                       $AutoAssignTo = $ao->getAutoAssignTo();
+                       echo html_build_select_box_from_arrays($ids, $names, 
'auto_assign_to', $AutoAssignTo, true,'nobody');
+               } else {
+                       echo html_e('input', array('type'=>'hidden', 
'name'=>'auto_assign_to', 'value'=>100));
+               }
                echo $HTML->warning_msg(_('It is not recommended that you 
change the custom field name because other things are dependent upon it. When 
you change the custom field name, all related items will be changed to the new 
name.'));
-                       ?>
-                       <p>
-                       <input type="submit" name="post_changes" value="<?php 
echo _('Update') ?>" /></p>
-               <?php
+               echo html_ao('p');
+               echo html_e('input', array('type'=>'submit', 
'name'=>'post_changes', 'value'=> _('Update')));
+               echo html_ac(html_ap()-1);
                echo $HTML->closeForm();
                $ath->footer();
        }
diff --git a/src/db/20160627-tracker-autoassign.sql 
b/src/db/20160627-tracker-autoassign.sql
new file mode 100644
index 0000000..0e82ab0
--- /dev/null
+++ b/src/db/20160627-tracker-autoassign.sql
@@ -0,0 +1,26 @@
+ALTER TABLE artifact_group_list
+   ADD auto_assign_field integer NOT NULL DEFAULT 100;
+
+ALTER TABLE artifact_group_list
+   ADD CONSTRAINT auto_assign_field_extra_field_id_fkey FOREIGN KEY 
(auto_assign_field)
+      REFERENCES artifact_extra_field_list (extra_field_id) MATCH FULL;
+
+DROP VIEW artifact_group_list_vw;
+
+CREATE VIEW artifact_group_list_vw AS 
+ SELECT agl.group_artifact_id, agl.group_id, agl.name, agl.description, 
+    agl.email_all_updates, agl.email_address, agl.due_period, 
+    agl.submit_instructions, agl.browse_instructions, agl.browse_list, 
+    agl.datatype, agl.status_timeout, agl.custom_status_field, 
+    agl.custom_renderer, agl.auto_assign_field, aca.count, aca.open_count
+   FROM artifact_group_list agl
+   LEFT JOIN artifact_counts_agg aca USING (group_artifact_id);
+
+INSERT INTO artifact_extra_field_list(extra_field_id, group_artifact_id, 
field_name, alias, description) VALUES (100, 100, 'Default', 'default', 
'Default Data - Dont Edit');
+
+ALTER TABLE artifact_extra_field_elements
+   ADD auto_assign_to integer NOT NULL DEFAULT 100;
+
+ALTER TABLE artifact_extra_field_elements
+   ADD CONSTRAINT artifact_extra_field_elements_user_id_fkey FOREIGN KEY 
(auto_assign_to)
+      REFERENCES users (user_id) MATCH FULL;
diff --git a/src/www/include/html.php b/src/www/include/html.php
index f633c92..780ed5d 100644
--- a/src/www/include/html.php
+++ b/src/www/include/html.php
@@ -584,6 +584,9 @@ function html_build_select_box_from_arrays($vals, $texts, 
$select_name, $checked
        if ($text_100 == 'none') {
                $text_100 = _('None');
        }
+       if ($text_100 == 'nobody') {
+               $text_100 = _('Nobody');
+       }
        $have_a_subelement = false;
        $return = '';
 
@@ -816,14 +819,18 @@ function 
html_build_multiple_select_box_from_arrays($vals, $texts, $name, $check
 /**
  * html_build_checkbox() - Render checkbox control
  *
- * @param      string  $name           name of control
- * @param      string  $value          value of control
- * @param      bool    $checked        true if control should be checked
- * @param      array   $attrs          Array of other attributes for this 
element
+ * @param      string          $name           name of control
+ * @param      bool|string     $value          value of control (if false then 
no attribute value)
+ * @param      bool            $checked        true if control should be 
checked
+ * @param      array           $attrs          Array of other attributes for 
this element
  * @return     html code for checkbox control
  */
 function html_build_checkbox($name, $value, $checked, $attrs=array()) {
-       $attrs = array_merge(array('id' => $name, 'name' => $name, 'value' => 
$value, 'type' => 'checkbox'), $attrs);
+       if ($value === false) {
+               $attrs = array_merge(array('id' => $name, 'name' => $name, 
'type' => 'checkbox'), $attrs);
+       } else {
+               $attrs = array_merge(array('id' => $name, 'name' => $name, 
'value' => $value, 'type' => 'checkbox'), $attrs);
+       }
        if ($checked) {
                $attrs['checked'] = 'checked';
        }

-----------------------------------------------------------------------

Summary of changes:
 src/common/tracker/Artifact.class.php              | 22 +++++-
 src/common/tracker/ArtifactExtraField.class.php    | 82 ++++++++++++++++++----
 .../tracker/ArtifactExtraFieldElement.class.php    | 23 ++++--
 src/common/tracker/ArtifactType.class.php          | 23 ++++++
 src/common/tracker/actions/admin-updates.php       | 15 ++--
 src/common/tracker/actions/browse.php              |  2 +-
 src/common/tracker/actions/mod-limited.php         |  2 +-
 .../tracker/include/ArtifactTypeHtml.class.php     | 26 ++++++-
 src/common/tracker/views/form-addextrafield.php    | 50 ++++++++++---
 src/common/tracker/views/form-updateextrafield.php | 65 ++++++++++-------
 .../tracker/views/form-updateextrafieldelement.php | 21 ++++--
 src/db/20160627-tracker-autoassign.sql             | 26 +++++++
 src/www/include/html.php                           | 17 +++--
 13 files changed, 297 insertions(+), 77 deletions(-)
 create mode 100644 src/db/20160627-tracker-autoassign.sql


hooks/post-receive
-- 
FusionForge

_______________________________________________
Fusionforge-commits mailing list
[email protected]
http://lists.fusionforge.org/cgi-bin/mailman/listinfo/fusionforge-commits

Reply via email to