function handleEnumValueChange($stack = FALSE, $oldValue = FALSE, $newValue = FALSE) { if ($stack === FALSE) { if (!isset($_POST["optionValueModificationStack"]) || !count($stack = JavaScript::jsonDecode($_POST["optionValueModificationStack"]))) { return; } // ha nem vol modositas, vagy torles } if ($oldValue !== FALSE) { // ha propagate van, nem csak azokat a modositasokat kell figyelembe venni, amik az adott modifyban tortentek, // hanem a korabbiakat is. Ezt a 'values' regi es uj ertekenek osszehasonlitasaval erjuk el. Ha talalunk olyat, // ami nincs benne az uj 'values'-ban, azt hozzaadjuk $stack-hoz egy 'delete' action-nel: $oldValueArr = splitByCommas($oldValue, FALSE); // without HTML encoding $modified = array_unique(array_map(create_function('$v', 'return $v[0]=="modify" ? $v[1] : "";'), $stack)); foreach ($oldValueArr as $val) { if (!in_array($val, $newValue) && !in_array($val, $modified)) { $stack[] = array("delete", $val); } } } if (!$stack) { return; } // ha az old es new values osszehasonlitasa utan se derul ki, hogy lett volna torles v. modositas CustomField::addCustomColumns($this->getManagedTable()); $affectedValues = array_map(create_function('$v', 'return quoteSQL(str_replace(",", ",,", $v[1]));'), $stack); $regexp = array(); $columnIndex = G::getAttr($this->id, "itemfield", "columnIndex"); foreach ($affectedValues as $v) { $regexp[] = "{$columnIndex} LIKE '%{$v}%'"; } $whereCond = " WHERE (" . implode(" OR ", $regexp) . ")"; if ($this->cid) { $whereCond .= " AND (cid={$this->cid} OR cid=0)"; } $query = "SELECT id, {$columnIndex} FROM @" . $this->getManagedTable() . $whereCond; G::load($objs, $query); $customLists = new CustomList(); $customLists->activateVariableFields(); $query = "SELECT * FROM @search {$whereCond}"; if (!loadObjectsSql($customLists, $query, $customLists)) { $objs = array_merge($objs, $customLists); } foreach ($objs as $obj) { $vals = splitByCommas($obj->{$columnIndex}, FALSE); $map = array_flip($vals); foreach ($stack as $action) { if (isset($map[$action[1]])) { // modositjuk, ha modify, uresre allitjuk, ha delete: $vals[$map[$action[1]]] = $action[0] == 'modify' ? $action[2] : ""; } } $obj->{$columnIndex} = array_filter($vals); // removes the empty values if (is_a($obj, "search")) { $obj->modify(TRUE); } else { modify($obj); } } }
function propagateField($attr, $value, $intoSubcatsOnly = FALSE, $default = FALSE, $stack = FALSE) { global $lll; load($this); if ($intoSubcatsOnly) { $wholeName = G::getAttr($this->cid, "appcategory", "wholeName"); $query = "SELECT f.* FROM @itemfield AS f, @category AS c WHERE c.id=f.cid AND c.wholeName LIKE '" . quoteSQL($wholeName) . "%' AND\n ((f.name!='' AND f.name=#name# AND f.type=#type#) OR (f.name='' AND userField!=0 AND userField=#uf#)) \n AND cid!=#cid#"; } else { $query = "SELECT * FROM @itemfield WHERE \n ((name!='' AND name=#name# AND type=#type#) OR (name='' AND userField!=0 AND userField=#uf#)) \n AND cid!=#cid#"; } // ha egy masik kategoriaban letezik olyan field aminek neve es tipusa megegyezik az eppen letrehozottal, // vagy ami ugyanarra a userFieldre mutat, azt atallitjuk common-ra: G::load($fields, array($query, $this->name, $this->type, $this->userField, $this->cid)); // a 'values' es a 'default' fieldek propagalasa specialis, mert ezekben egy tomb erkezhet: if ($default !== FALSE) { $values = JavaScript::jsonDecode($value); $defaults = JavaScript::jsonDecode($default); $stack = JavaScript::jsonDecode($stack); $value = dbEncodeEnumValue($values); $default = dbEncodeEnumValue($defaults); } foreach ($fields as $field) { if ($default === FALSE) { if (strstr($attr, "default_")) { $attr = "default"; } executeQuery("UPDATE @customfield SET `attr`=#value# WHERE id=#id#", $attr, $value, $field->id); } else { executeQuery("UPDATE @customfield SET `attr`=#value#, `default`=#default# WHERE id=#id#", $attr, $value, "default", $default, $field->id); $field->handleEnumValueChange($stack, $field->values, $values); } if ($attr == "mainPicture" && $value != "0") { $field->mainPicture = $value; $field->handleMainPictureChange(); } elseif ($attr == "seo" && $value != "0") { $field->seo = $value; $field->handleSeoChange(); } } return count($fields); }