/** * Save a group. * @param \vakata\user\GroupInterface $group the group to save * @return self */ public function saveGroup(GroupInterface $group) : UserManagementInterface { $trans = $this->db->begin(); try { if (!$this->db->one("SELECT 1 FROM " . $this->options['tableGroups'] . " WHERE grp = ?", [$group->getID()])) { $this->db->query("INSERT INTO " . $this->options['tableGroups'] . " (grp, created) VALUES (?, ?)", [$group->getID(), date('Y-m-d H:i:s')]); } foreach ($group->getPermissions() as $permission) { if (!$this->db->one("SELECT 1 FROM " . $this->options['tablePermissions'] . " WHERE perm = ?", [$permission])) { $this->db->query("INSERT INTO " . $this->options['tablePermissions'] . " (perm, created) VALUES (?, ?)\n ON DUPLICATE KEY UPDATE perm = perm", [$permission, date('Y-m-d H:i:s')]); } if (!$this->db->one("SELECT 1 FROM " . $this->options['tableGroupsPermissions'] . " WHERE grp = ? AND perm = ?", [$group->getID(), $permission])) { $this->db->query("INSERT INTO " . $this->options['tableGroupsPermissions'] . " (grp, perm, created) VALUES (?, ?, ?)", [$group->getID(), $permission, date('Y-m-d H:i:s')]); } } $this->db->commit(); parent::saveGroup($group); return $this; } catch (\Exception $e) { $this->db->rollback($trans); throw $e; } }