/** * Store the member * * @return boolean */ public function store() { global $zdb, $hist; try { $values = array(); $fields = self::getDbFields(); /** FIXME: quote? */ foreach ($fields as $field) { if ($field !== 'date_modif_adh' || !isset($this->_id) || $this->_id == '') { $prop = '_' . $this->_fields[$field]['propname']; if (($field === 'bool_admin_adh' || $field === 'bool_exempt_adh' || $field === 'bool_display_info') && $this->{$prop} === false) { //Handle booleans for postgres ; bugs #18899 and #19354 $values[$field] = 'false'; } elseif ($field === 'parent_id') { //handle parents if ($this->_parent === null) { $values['parent_id'] = new Expression('NULL'); } elseif ($this->parent instanceof Adherent) { $values['parent_id'] = $this->_parent->id; } else { $values['parent_id'] = $this->_parent; } } else { $values[$field] = $this->{$prop}; } } } //an empty value will cause date to be set to 1901-01-01, a null //will result in 0000-00-00. We want a database NULL value here. if (!$this->_birthdate) { $values['ddn_adh'] = new Expression('NULL'); } if (!$this->_due_date) { $values['date_echeance'] = new Expression('NULL'); } if ($this->_title instanceof Title) { $values['titre_adh'] = $this->_title->id; } else { $values['titre_adh'] = new Expression('NULL'); } if (!$this->_parent) { $values['parent_id'] = new Expression('NULL'); } if (!isset($this->_id) || $this->_id == '') { //we're inserting a new member unset($values[self::PK]); //set modification date $this->_modification_date = date('Y-m-d'); $values['date_modif_adh'] = $this->_modification_date; $insert = $zdb->insert(self::TABLE); $insert->values($values); $add = $zdb->execute($insert); if ($add->count() > 0) { if ($zdb->isPostgres()) { $this->_id = $zdb->driver->getLastGeneratedValue(PREFIX_DB . 'adherents_id_seq'); } else { $this->_id = $zdb->driver->getLastGeneratedValue(); } $this->_picture = new Picture($this->_id); // logging $hist->add(_T("Member card added"), strtoupper($this->_login)); return true; } else { $hist->add(_T("Fail to add new member.")); throw new \Exception('An error occured inserting new member!'); } } else { //we're editing an existing member if (!$this->isDueFree()) { // deadline $due_date = Contribution::getDueDate($this->_id); if ($due_date) { $values['date_echeance'] = $due_date; } } if (!$this->_password) { unset($values['mdp_adh']); } $update = $zdb->update(self::TABLE); $update->set($values); $update->where(self::PK . '=' . $this->_id); $edit = $zdb->execute($update); //edit == 0 does not mean there were an error, but that there //were nothing to change if ($edit->count() > 0) { $this->_updateModificationDate(); $hist->add(_T("Member card updated"), strtoupper($this->_login)); } return true; } //DEBUG return false; } catch (\Exception $e) { Analog::log('Something went wrong :\'( | ' . $e->getMessage() . "\n" . $e->getTraceAsString(), Analog::ERROR); return false; } }
if ($id_cotis != '') { $contrib = new Contribution((int) $id_cotis); if ($contrib->id == '') { //not possible to load contribution, exit header('location: index.php'); die; } } else { $args = array('type' => $selected_type, 'adh' => $id_adh); if ($trans_id != '') { $args['trans'] = $trans_id; } if ($preferences->pref_membership_ext != '') { $args['ext'] = $preferences->pref_membership_ext; } $contrib = new Contribution($args); if ($contrib->isTransactionPart()) { $id_adh = $contrib->member; //Should we disable contribution member selection if we're from //a transaction? In most cases, it would be OK I guess, but I'm //very unsure //$disabled['id_adh'] = ' disabled="disabled"'; } } //second step only: first step, and all the rest // flagging required fields for second step $second_required = array('montant_cotis' => 1, 'date_debut_cotis' => 1, 'date_fin_cotis' => $contrib->isCotis()); $required = $required + $second_required; } } // Validation
/** * Detach a contribution from a transaction * * @param int $trans_id Transaction identifier * @param int $contrib_id Contribution identifier * * @return boolean */ public static function unsetTransactionPart($trans_id, $contrib_id) { global $zdb; try { //first, we check if contribution is part of transaction $c = new Contribution((int) $contrib_id); if ($c->isTransactionPartOf($trans_id)) { $update = $zdb->update(self::TABLE); $update->set(array(Transaction::PK => null))->where(self::PK . ' = ' . $contrib_id); $zdb->execute($update); return true; } else { Analog::log('Contribution #' . $contrib_id . ' is not actually part of transaction #' . $trans_id, Analog::WARNING); return false; } } catch (\Exception $e) { Analog::log('Unable to detach contribution #' . $contrib_id . ' to transaction #' . $trans_id . ' | ' . $e->getMessage(), Analog::ERROR); return false; } }
$transaction['trans_amount'] = get_numeric_form_value("trans_amount", ''); $transaction['trans_date'] = get_form_value("trans_date", ''); $transaction['trans_desc'] = get_form_value("trans_desc", ''); $transaction['id_adh'] = get_numeric_form_value("id_adh", ''); // flagging required fields $required = array('trans_amount' => 1, 'trans_date' => 1, 'trans_desc' => 1, 'id_adh' => 1); $disabled = array(); if (isset($_GET['detach'])) { if (!Contribution::unsetTransactionPart($trans_id, $_GET['detach'])) { $error_detected[] = _T("Unable to detach contribution from transaction"); } else { $success_detected[] = _T("Contribution has been successfully detached from current transaction"); } } if (isset($_GET['cid']) && $_GET['cid'] != null) { if (!Contribution::setTransactionPart($trans_id, $_GET['cid'])) { $error_detected[] = _T("Unable to attach contribution to transaction"); } else { $success_detected[] = _T("Contribution has been successfully attached to current transaction"); } } if ($trans_id != '') { // initialize transactions structure with database values $trans->load($trans_id); if ($trans->id == '') { //not possible to load transaction, exit header('location: index.php'); die; } } // Validation
/** * Remove specified contributions * * @param integer|array $ids Contributions identifiers to delete * @param boolean $transaction True to begin a database transaction * * @return boolean */ public function removeContributions($ids, $transaction = true) { global $zdb, $hist; $list = array(); if (is_numeric($ids)) { //we've got only one identifier $list[] = $ids; } else { $list = $ids; } if (is_array($list)) { $res = true; try { if ($transaction) { $zdb->connection->beginTransaction(); } $select = $zdb->select(self::TABLE); $select->where->in(self::PK, $list); $contributions = $zdb->execute($select); foreach ($contributions as $contribution) { $c = new Contribution($contribution); $res = $c->remove(false); if ($res === false) { throw new \Exception(); } } if ($transaction) { $zdb->connection->commit(); } $hist->add(str_replace('%list', print_r($list, true), _T("Contributions deleted (%list)"))); } catch (\Exception $e) { if ($transaction) { $zdb->connection->rollBack(); } Analog::log('An error occured trying to remove contributions | ' . $e->getMessage(), Analog::ERROR); return false; } } else { //not numeric and not an array: incorrect. Analog::log('Asking to remove contribution, but without providing an array or a single numeric value.', Analog::WARNING); return false; } }