PMA\libraries\Table::updateInternalRelations PHP Method

updateInternalRelations() public method

Function to get update query for updating internal relations
public updateInternalRelations ( array $multi_edit_columns_name, array $destination_db, array $destination_table, array $destination_column, array $cfgRelation, array | null $existrel ) : boolean
$multi_edit_columns_name array multi edit column names
$destination_db array destination tables
$destination_table array destination tables
$destination_column array destination columns
$cfgRelation array configuration relation
$existrel array | null db, table, column
return boolean
    public function updateInternalRelations($multi_edit_columns_name, $destination_db, $destination_table, $destination_column, $cfgRelation, $existrel)
    {
        $updated = false;
        foreach ($destination_db as $master_field_md5 => $foreign_db) {
            $upd_query = null;
            // Map the fieldname's md5 back to its real name
            $master_field = $multi_edit_columns_name[$master_field_md5];
            $foreign_table = $destination_table[$master_field_md5];
            $foreign_field = $destination_column[$master_field_md5];
            if (!empty($foreign_db) && !empty($foreign_table) && !empty($foreign_field)) {
                if (!isset($existrel[$master_field])) {
                    $upd_query = 'INSERT INTO ' . Util::backquote($GLOBALS['cfgRelation']['db']) . '.' . Util::backquote($cfgRelation['relation']) . '(master_db, master_table, master_field, foreign_db,' . ' foreign_table, foreign_field)' . ' values(' . '\'' . $GLOBALS['dbi']->escapeString($this->_db_name) . '\', ' . '\'' . $GLOBALS['dbi']->escapeString($this->_name) . '\', ' . '\'' . $GLOBALS['dbi']->escapeString($master_field) . '\', ' . '\'' . $GLOBALS['dbi']->escapeString($foreign_db) . '\', ' . '\'' . $GLOBALS['dbi']->escapeString($foreign_table) . '\',' . '\'' . $GLOBALS['dbi']->escapeString($foreign_field) . '\')';
                } elseif ($existrel[$master_field]['foreign_db'] != $foreign_db || $existrel[$master_field]['foreign_table'] != $foreign_table || $existrel[$master_field]['foreign_field'] != $foreign_field) {
                    $upd_query = 'UPDATE ' . Util::backquote($GLOBALS['cfgRelation']['db']) . '.' . Util::backquote($cfgRelation['relation']) . ' SET foreign_db       = \'' . $GLOBALS['dbi']->escapeString($foreign_db) . '\', ' . ' foreign_table    = \'' . $GLOBALS['dbi']->escapeString($foreign_table) . '\', ' . ' foreign_field    = \'' . $GLOBALS['dbi']->escapeString($foreign_field) . '\' ' . ' WHERE master_db  = \'' . $GLOBALS['dbi']->escapeString($this->_db_name) . '\'' . ' AND master_table = \'' . $GLOBALS['dbi']->escapeString($this->_name) . '\'' . ' AND master_field = \'' . $GLOBALS['dbi']->escapeString($master_field) . '\'';
                }
                // end if... else....
            } elseif (isset($existrel[$master_field])) {
                $upd_query = 'DELETE FROM ' . Util::backquote($GLOBALS['cfgRelation']['db']) . '.' . Util::backquote($cfgRelation['relation']) . ' WHERE master_db  = \'' . $GLOBALS['dbi']->escapeString($this->_db_name) . '\'' . ' AND master_table = \'' . $GLOBALS['dbi']->escapeString($this->_name) . '\'' . ' AND master_field = \'' . $GLOBALS['dbi']->escapeString($master_field) . '\'';
            }
            // end if... else....
            if (isset($upd_query)) {
                $this->_dbi->query($upd_query, $GLOBALS['controllink'], 0, false);
                $updated = true;
            }
        }
        return $updated;
    }

Usage Example

 /**
  * Update for internal relation
  *
  * @return void
  */
 public function updateForInternalRelationAction()
 {
     $multi_edit_columns_name = isset($_REQUEST['fields_name']) ? $_REQUEST['fields_name'] : null;
     if ($this->upd_query->updateInternalRelations($multi_edit_columns_name, $_POST['destination_db'], $_POST['destination_table'], $_POST['destination_column'], $this->cfgRelation, isset($this->existrel) ? $this->existrel : null)) {
         $this->response->addHTML(Util::getMessage(__('Internal relations were successfully updated.'), '', 'success'));
     }
 }