@@ -346,12 +346,21 @@ bool CDatabaseFolder::MoveFolder(int id, int newParentId)
346346 qWarning (log) << GetError ();
347347 return false ;
348348 }
349+ // Check the newParentId is not the child of id
350+ bool bRet = InSubFolder (id, newParentId);
351+ if (bRet) {
352+ SetError (" The id is the parent of newParentId. "
353+ + QString::number (id) + " is the parent of "
354+ + QString::number (newParentId));
355+ qWarning (log) << GetError ();
356+ return false ;
357+ }
349358 QSqlQuery query (GetDatabase ());
350359 query.prepare (" UPDATE `" + m_szTableName + " ` "
351360 " SET `parent_id` = :parent_id WHERE `id` = :id" );
352361 query.bindValue (" :id" , id);
353362 query.bindValue (" :parent_id" , newParentId);
354- bool bRet = query.exec ();
363+ bRet = query.exec ();
355364 if (bRet)
356365 emit sigChanged ();
357366 else {
@@ -449,6 +458,19 @@ QList<TreeItem> CDatabaseFolder::GetSubFolders(int parentId)
449458 return folders;
450459}
451460
461+ bool CDatabaseFolder::InSubFolder (int parentId, int id)
462+ {
463+ bool bRet = false ;
464+ auto items = GetSubFolders (parentId);
465+ foreach (auto it, items) {
466+ if (it.GetId () == id)
467+ return true ;
468+ bRet = InSubFolder (it.GetId (), id);
469+ if (bRet) return true ;
470+ }
471+ return bRet;
472+ }
473+
452474int CDatabaseFolder::GetCount (int parentId)
453475{
454476 QSqlQuery query (GetDatabase ());
0 commit comments