/** * 创建或更新主表记录时,保存关联的数据 * * @param array $row 要保存的关联数据 * * @return boolean */ function _saveAssocDataBase(&$row) { switch (strtolower($this->saveAssocMethod)) { case 'create': return $this->assocTDG->create($row); case 'update': return $this->assocTDG->update($row); case 'replace': return $this->assocTDG->replace($row); default: return $this->assocTDG->save($row); } }
/** * 创建用户记录,返回新建用户记录的主键值 * * @param array $row * * @return mixed */ function create(&$row) { if (isset($this->functionFields['registerIpField']) && $this->functionFields['registerIpField'] != '') { $row[$this->functionFields['registerIpField']] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1'; } return parent::create($row); }
/** * 添加一个用户组,返回该用户组的 ID * * @param array $group * @param int $parentId * * @return int */ function create($group, $parentId = 0) { $parentId = (int) $parentId; if ($parentId) { $parent = parent::find($parentId); if (!$parent) { // 指定的父用户组不存在 FLEA::loadClass('FLEA_Acl_Exception_UserGroupNotFound'); __THROW(new FLEA_Acl_Exception_UserGroupNotFound($parentId)); return false; } } else { // 如果未指定 $parentId 为 0 或 null,则创建一个顶级用户组 $parent = parent::find(array('name' => $this->_rootGroupName)); if (!$parent) { // 如果根用户组不存在,则自动创建 $parent = array('name' => $this->_rootGroupName, 'description' => '', 'left_value' => 1, 'right_value' => 2, 'parent_id' => -1); if (!parent::create($parent)) { return false; } } // 确保所有 _#_ROOT_GROUP_#_ 的直接子用户组的 parent_id 都为 0 $parent[$this->primaryKey] = 0; } $this->dbo->startTrans(); // 根据父用户组的左值和右值更新数据 $sql = "UPDATE {$this->fullTableName} SET left_value = left_value + 2 " . "WHERE left_value >= {$parent['right_value']}"; $this->dbo->execute($sql); $sql = "UPDATE {$this->fullTableName} SET right_value = right_value + 2 " . "WHERE right_value >= {$parent['right_value']}"; $this->dbo->execute($sql); // 插入新用户组记录 $group['left_value'] = $parent['right_value']; $group['right_value'] = $parent['right_value'] + 1; $group['parent_id'] = $parent[$this->primaryKey]; $ret = parent::create($group); if ($ret) { $this->dbo->completeTrans(); } else { $this->dbo->completeTrans(false); } return $ret; }