Пример #1
0
 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);
         }
     }
 }
Пример #2
0
 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);
 }