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