/** * Aktualizacja uprawnień do grup sms * * @param Logic_Ws_Client_Permissions_Form_GroupSms $form formularz z danymi do zapisania * @param integer $id id edytowanego clienta * @param string $namespace rodzaj uprawnienia */ public function updatePermissionsToGroup($form, $id) { $data = $form->getValues(); $this->getAdapter()->beginTransaction(); try { $newData = array(); foreach ($data as $key => $value) { $namespaceSet = explode('_', $key); if ($namespaceSet[0] != 'limits') { $newData[$namespaceSet[0]][$namespaceSet[1]]['value'] = $value; } else { $newData[$namespaceSet[1]][$namespaceSet[2]][$namespaceSet[0]] = $value; } } $unset = false; foreach ($newData as $namespace => $row) { $groupModel = new WsClientHasServiceGroup(); $referencesColumn = 'id_service_group'; if ($namespace == Wsclient::GROUP_SERVICE_SET) { $groupModel = new WsClientHasServiceSet(); $wsServiceSetLimit = new WsServiceSetLimits(); $wsServiceSetLimit->deleteLimits($id); $referencesColumn = 'id_service_set'; } if (!$unset || $namespace == Wsclient::GROUP_SERVICE_SET) { if ($namespace == Wsclient::GROUP_EMAIL || $namespace == Wsclient::GROUP_SMS) { $unset = true; } $groupModel->removeClientPermisions($id); } foreach ($row as $rowId => $val) { if ($val['value']) { $values[$referencesColumn] = $rowId; $values['id_client'] = $id; $row = $groupModel->createRow($values); $row->save(); if ($val['limits']) { $value = $val['limits']; $value['ws_service_set_id'] = $rowId; $value['ws_client_id'] = $id; $wsServiceSetLimit->addLimits($value); } } } } $this->getAdapter()->commit(); } catch (Exception $e) { $this->getAdapter()->rollBack(); throw $e; } }