/** * @copydoc DBElement::check_values_validity() */ public static function check_values_validity(&$database, &$current_user, &$log, &$values, $is_new, &$element = NULL) { // first, we let all parent classes to check the values parent::check_values_validity($database, $current_user, $log, $values, $is_new, $element); // set "last_modified" to current datetime $values['last_modified'] = date('Y-m-d H:i:s'); // set the datetype of the boolean attributes settype($values['visible'], 'boolean'); settype($values['manual_order'], 'boolean'); // check "instock" if (!is_int($values['instock']) && !ctype_digit($values['instock'])) { debug('warning', '"instock" ist keine gültige Zahl: "' . $values['instock'] . '"!', __FILE__, __LINE__, __METHOD__); throw new Exception('Der neue Lagerbestand ist ungültig!'); } elseif ($values['instock'] < 0) { throw new Exception('Der neue Lagerbestand von "' . $values['name'] . '" wäre negativ und kann deshalb nicht gespeichert werden!'); } // check "order_orderdetails_id" try { if ($values['order_orderdetails_id'] == 0) { $values['order_orderdetails_id'] = NULL; } if (!$is_new && $values['order_orderdetails_id'] == NULL && ($values['instock'] < $values['mininstock'] || $values['manual_order']) && ($element->get_instock() >= $element->get_mininstock() && !$element->get_manual_order())) { // if this part will be added now to the list of parts to order (instock is now less than mininstock, or manual_order is now true), // and this part has only one orderdetails, we will set that orderdetails as orderdetails to order from (attribute "order_orderdetails_id"). // Note: If that part was already in the list of parts to order, wo mustn't change the orderdetails to order!! $orderdetails = $element->get_orderdetails(); $order_orderdetails_id = count($orderdetails) == 1 ? $orderdetails[0]->get_id() : NULL; $values['order_orderdetails_id'] = $order_orderdetails_id; } if ($values['order_orderdetails_id'] != NULL) { $order_orderdetails = new Orderdetails($database, $current_user, $log, $values['order_orderdetails_id']); } } catch (Exception $e) { debug('error', 'Ungültige "order_orderdetails_id": "' . $values['order_orderdetails_id'] . '"' . "\n\nUrsprüngliche Fehlermeldung: " . $e->getMessage(), __FILE__, __LINE__, __METHOD__); throw new Exception('Die gewählte Einkaufsinformation existiert nicht!'); } // check "order_quantity" if (!is_int($values['order_quantity']) && !ctype_digit($values['order_quantity']) || $values['order_quantity'] < 1) { debug('error', 'order_quantity = "' . $values['order_quantity'] . '"', __FILE__, __LINE__, __METHOD__); throw new Exception('Die Bestellmenge ist ungültig!'); } // check if we have to reset the order attributes ("instock" is now less than "mininstock") if ($values['instock'] < $values['mininstock'] && ($is_new || $element->get_instock() >= $element->get_mininstock())) { if (!$values['manual_order']) { $values['order_quantity'] = $values['mininstock'] - $values['instock']; } $values['manual_order'] = false; } // check "mininstock" if (!is_int($values['mininstock']) && !ctype_digit($values['mininstock']) || $values['mininstock'] < 0) { debug('warning', '"mininstock" ist keine gültige Zahl: "' . $values['mininstock'] . '"!', __FILE__, __LINE__, __METHOD__); throw new Exception('Der neue Mindestlagerbestand ist ungültig!'); } // check "id_category" try { // id_category == NULL means "no category", and this is not allowed! if ($values['id_category'] == NULL) { throw new Exception('"id_category" ist Null!'); } $category = new Category($database, $current_user, $log, $values['id_category']); } catch (Exception $e) { debug('warning', 'Ungültige "id_category": "' . $values['id_category'] . '"' . "\n\nUrsprüngliche Fehlermeldung: " . $e->getMessage(), __FILE__, __LINE__, __METHOD__); throw new Exception('Die gewählte Kategorie existiert nicht!'); } // check "id_footprint" try { if ($values['id_footprint'] == 0 && $values['id_footprint'] !== NULL) { $values['id_footprint'] = NULL; } $footprint = new Footprint($database, $current_user, $log, $values['id_footprint']); } catch (Exception $e) { debug('warning', 'Ungültige "id_footprint": "' . $values['id_footprint'] . '"' . "\n\nUrsprüngliche Fehlermeldung: " . $e->getMessage(), __FILE__, __LINE__, __METHOD__); throw new Exception('Der gewählte Footprint existiert nicht!'); } // check "id_storelocation" try { if ($values['id_storelocation'] == 0 && $values['id_storelocation'] !== NULL) { $values['id_storelocation'] = NULL; } $storelocation = new Storelocation($database, $current_user, $log, $values['id_storelocation']); } catch (Exception $e) { debug('warning', 'Ungültige "id_storelocation": "' . $values['id_storelocation'] . '"' . "\n\nUrsprüngliche Fehlermeldung: " . $e->getMessage(), __FILE__, __LINE__, __METHOD__); throw new Exception('Der gewählte Lagerort existiert nicht!'); } // check "id_manufacturer" try { if ($values['id_manufacturer'] == 0 && $values['id_manufacturer'] !== NULL) { $values['id_manufacturer'] = NULL; } $manufacturer = new Manufacturer($database, $current_user, $log, $values['id_manufacturer']); } catch (Exception $e) { debug('warning', 'Ungültige "id_manufacturer": "' . $values['id_manufacturer'] . '"' . "\n\nUrsprüngliche Fehlermeldung: " . $e->getMessage(), __FILE__, __LINE__, __METHOD__); throw new Exception('Der gewählte Hersteller existiert nicht!'); } // check "id_master_picture_attachement" try { if ($values['id_master_picture_attachement']) { $master_picture_attachement = new Attachement($database, $current_user, $log, $values['id_master_picture_attachement']); } else { $values['id_master_picture_attachement'] = NULL; } // this will replace the integer "0" with NULL } catch (Exception $e) { debug('warning', 'Ungültige "id_master_picture_attachement": "' . $values['id_master_picture_attachement'] . '"' . "\n\nUrsprüngliche Fehlermeldung: " . $e->getMessage(), __FILE__, __LINE__, __METHOD__); throw new Exception('Die gewählte Datei existiert nicht!'); } }
/** * @copydoc DBElement::check_values_validity() */ public static function check_values_validity(&$database, &$current_user, &$log, &$values, $is_new, &$element = NULL) { // first, we let all parent classes to check the values parent::check_values_validity($database, $current_user, $log, $values, $is_new, $element); // check "group_id" try { $group = new Group($database, $current_user, $log, $values['group_id']); } catch (Exception $e) { debug('warning', 'Ungültige "group_id": "' . $values['group_id'] . '"' . "\n\nUrsprüngliche Fehlermeldung: " . $e->getMessage(), __FILE__, __LINE__, __METHOD__); throw new Exception('Die gewählte Gruppe existiert nicht!'); } }
/** * @copydoc DBElement::check_values_validity() */ public static function check_values_validity(&$database, &$current_user, &$log, &$values, $is_new, &$element = NULL) { if ($values['parent_id'] == 0) { $values['parent_id'] = NULL; } // NULL is the root node // first, we let all parent classes to check the values parent::check_values_validity($database, $current_user, $log, $values, $is_new, $element); if (!$is_new && $values['id'] == 0) { throw new Exception('Die Oberste Ebene kann nicht bearbeitet werden!'); } // with get_called_class() we can get the class of the element which will be edited/created. // example: if you write "$new_cat = Category::add(...);", get_called_class() returns "Category" $classname = get_called_class(); // check "parent_id" if (!$is_new && $values['parent_id'] == $values['id']) { throw new Exception('Ein Element kann nicht als Unterelement von sich selber zugeordnet werden!'); } try { $parent_element = new $classname($database, $current_user, $log, $values['parent_id'], true); } catch (Exception $e) { debug('warning', 'Ungültige "parent_id": "' . $values['parent_id'] . '"' . "\n\nUrsprüngliche Fehlermeldung: " . $e->getMessage(), __FILE__, __LINE__, __METHOD__); throw new Exception('Das ausgewählte übergeordnete Element existiert nicht!'); } // to avoid infinite parent_id loops (this is not the same as the "check parent_id" above!) if (!$is_new && $parent_element->get_parent_id() == $values['id']) { throw new Exception('Ein Element kann nicht einem seiner direkten Unterelemente zugeordnet werden!'); } // check "name" + "parent_id" (the first check of "name" was already done by // "parent::check_values_validity", here we check only the combination of "parent_id" and "name") // we search for an element with the same name and parent ID, there shouldn't be one! $id = $is_new ? -1 : $values['id']; $query_data = $database->query('SELECT * FROM ' . $parent_element->get_tablename() . ' WHERE name=? AND parent_id <=> ? AND id<>?', array($values['name'], $values['parent_id'], $id)); if (count($query_data) > 0) { throw new Exception('Es existiert bereits ein Element auf gleicher Ebene (' . $classname . '::' . $parent_element->get_full_path() . ') mit gleichem Namen (' . $values['name'] . ')!'); } }