* @since 1.0
*/
class Manager{
# 传递给前端的数据 显示编辑form
public function getLastData(){
$AdminMenu = new AdminMenu;
$AdminMenu->_ajaxMenuEditUrl = CUrl::getUrl("fecadmin/menu/edit");
$menTreeHtml = $AdminMenu->getEditMenuTreeHtml();
$createMenuUrl = CUrl::getUrl("fecadmin/menu/create");
$deleteMenuUrl = CUrl::getUrl("fecadmin/menu/delete");
$editMenuUrl = CUrl::getUrl("fecadmin/menu/editsave");
return [
'menTreeHtml' => $menTreeHtml,
'createMenuUrl' => $createMenuUrl,
'deleteMenuUrl' => $deleteMenuUrl,
'editMenuUrl' => $editMenuUrl,
];
}
public function editMenuSave(){
$editFormData = CRequest::param("editFormData");
if(!isset($editFormData['id'])){
echo json_encode(["statusCode"=>"300",
"message" => "id can not empty!",
]);
exit;
}
$AdminMenu = AdminMenu::findOne(['id' => $editFormData['id'] ]);
if(!$AdminMenu->id){
echo json_encode(["statusCode"=>"300",
"message" => "id is not exist!",
]);
exit;
}
$role_key = $editFormData['role_key'] ? $editFormData['role_key'] : $this->getMenuRoleKey($editFormData['url_key']);
$AdminMenu->role_key = $role_key;
$AdminMenu->attributes = $editFormData;
$AdminMenu->updated_at = date('Y-m-d H:i:s');
if($AdminMenu->validate()){
$AdminMenu->save();
echo json_encode(["statusCode"=>"200",
"message" => "Success",
]);
exit;
}else{
$errors = $AdminMenu->errors;
echo json_encode(["statusCode"=>"300",
"message" => CModel::getErrorStr($errors),
]);
exit;
}
}
public function edit(){
$id = CRequest::param("id");
$adminMenu = AdminMenu::findOne(['id'=>$id ]);
if($adminMenu->id == null){
echo 'this menu is not exist!';
exit;
}
$id = $adminMenu->id;
$parent_id = $adminMenu->parent_id;
$name = $adminMenu->name;
$url_key = $adminMenu->url_key;
$role_key = $adminMenu->role_key;
$sort_order = $adminMenu->sort_order;
$str = '
';
echo $str;exit;
}
public function getMenuRoleKey($url_key){
if($url_key){
$url_key_arr = explode("/",$url_key);
unset($url_key_arr[count($url_key_arr)-1]);
if(!empty($url_key_arr)){
return implode("/",$url_key_arr);
}
}
return '';
}
public function createMenuSave(){
$editFormData = CRequest::param('editFormData');
$parent_id = $editFormData['parent_id'] ? $editFormData['parent_id'] :0;
$editFormData['parent_id'] = $parent_id;
$role_key = $editFormData['role_key'] ? $editFormData['role_key'] : $this->getMenuRoleKey($editFormData['url_key']);
//$name = $editFormData['name'];
//$url_key = $editFormData['url_key'];
$AdminMenu = new AdminMenu;
$AdminMenu->attributes = $editFormData;
$AdminMenu->role_key = $role_key;
if(!$parent_id){
$AdminMenu->level = 1;
}else{
$level = AdminMenu::findOne(['id'=>$parent_id])->level;
$AdminMenu->level = $level + 1;
}
$AdminMenu->created_at = date('Y-m-d H:i:s');
$AdminMenu->updated_at = date('Y-m-d H:i:s');
if($AdminMenu->validate()){
$AdminMenu->save();
echo json_encode(["statusCode"=>"200",
"message" => "Success",
]);
exit;
}else{
$errors = $AdminMenu->errors;
echo json_encode(["statusCode"=>"300",
"message" => CModel::getErrorStr($errors),
]);
exit;
}
}
public function deleteMenu(){
$id = CRequest::param("id");
if(!$id){
echo json_encode(["statusCode"=>"300",
"message" => "id can not empty",
]);
exit;
}else{
$one = AdminMenu::find()->where(" id = :id AND can_delete = 2 ",[':id'=>$id])->one();
//echo $one->id;
if($one->id){
$ids = $this->getMenuAllChildId($id);
$ids[] = $id;
# 1. 删除当前分类对应的所有子分类
# 2. 删除在menu_id 对应到权限中的所有menu_id
$innerTransaction = Yii::$app->db->beginTransaction();
try {
AdminRoleMenu::deleteAll(['in','menu_id',$ids]);
$one->deleteAll([
'and',
['can_delete' => 2],
['in','id',$ids]
]);
$innerTransaction->commit();
echo json_encode(["statusCode"=>"200",
"message" => "delete menu success! MENU NAME:".$one->name,
]);
} catch (Exception $e) {
$innerTransaction->rollBack();
}
exit;
}else{
echo json_encode(["statusCode"=>"300",
"message" => "the menu can not delete",
]);
exit;
}
}
}
public function getMenuAllChildId($id,$ids=[]){
$adminMenu = new AdminMenu;
$data = AdminMenu::find()->asArray()
//->select(['id'])
//->where(['parent_id' => $id])
->where(" parent_id = :parent_id AND can_delete = 2 ",[':parent_id'=>$id])
->all();
if(!empty($data)){
foreach($data as $node){
$ids[] = $node['id'];
if($adminMenu->hasChild($node)){
$ids[] = $this->getMenuAllChildId($node['id']);
}
}
}
return $ids;
}
}