DropdownTranslation::generateCompletename PHP Method

generateCompletename() public method

Generate completename associated with a tree dropdown
public generateCompletename ( $input, $add = true ) : nothing
$input array of user values
$add boolean true if translation is added, false if update (tgrue by default)
return nothing
    function generateCompletename($input, $add = true)
    {
        global $DB;
        // Force completename translated : used for the first translation
        $_SESSION['glpi_dropdowntranslations'][$input['itemtype']]['completename'] = 'completename';
        //If there's already a completename for this language, get it's ID, otherwise 0
        $completenames_id = self::getTranslationID($input['items_id'], $input['itemtype'], 'completename', $input['language']);
        $item = new $input['itemtype']();
        //Completename is used only for tree dropdowns !
        if ($item instanceof CommonTreeDropdown && isset($input['language'])) {
            $item->getFromDB($input['items_id']);
            $foreignKey = $item->getForeignKeyField();
            //Regenerate completename : look for item's ancestors
            $completename = "";
            //Get ancestors as an array
            if ($item->fields[$foreignKey] != 0) {
                $completename = self::getTranslatedValue($item->fields[$foreignKey], $input['itemtype'], 'completename', $input['language']);
            }
            if ($completename != '') {
                $completename .= " > ";
            }
            $completename .= self::getTranslatedValue($item->getID(), $input['itemtype'], 'name', $input['language']);
            //Add or update completename for this language
            $translation = new self();
            $tmp = array();
            $tmp['items_id'] = $input['items_id'];
            $tmp['itemtype'] = $input['itemtype'];
            $tmp['field'] = 'completename';
            $tmp['value'] = addslashes($completename);
            $tmp['language'] = $input['language'];
            $tmp['_no_completename'] = true;
            if ($completenames_id) {
                $tmp['id'] = $completenames_id;
                if ($completename === $item->fields['completename']) {
                    $translation->delete(array('id' => $completenames_id));
                } else {
                    $translation->update($tmp);
                }
            } else {
                if ($completename != $item->fields['completename']) {
                    $translation->add($tmp);
                }
            }
            $query = "SELECT `id`\n                   FROM `" . $item->getTable() . "`\n                   WHERE `{$foreignKey}` = '" . $item->getID() . "'";
            foreach ($DB->request($query) as $tmp) {
                $input2 = $input;
                $input2['items_id'] = $tmp['id'];
                $this->generateCompletename($input2, $add);
            }
        }
    }

Usage Example

 /**
  * Regenerate all completename translations for an item
  *
  * @param $itemtype    itemtype
  * @param $items_id    item ID
  *
  * @return the value translated if a translation is available, or the same value if not
  **/
 static function regenerateAllCompletenameTranslationsFor($itemtype, $items_id)
 {
     foreach (self::getTranslationsForAnItem($itemtype, $items_id, 'completename') as $data) {
         $dt = new DropdownTranslation();
         $dt->generateCompletename($data, false);
     }
 }