Return Type | Function name | Arguments |
---|---|---|
hzEcode | hdsExec::Exec | (hzChain&,hzHttpEvent*,) |
Declared in file: hzDissemino.h
Defined in file : hdsExec.cpp
Function Logic:
Function body:
hzEcode hdsExec::Exec (hzChain& errorReport, hzHttpEvent* pE) { _hzfunc("hdsExec::Exec") ; const hdbClass* pClass ; const hdbMember* pMbr ; ifstream is ; hdbObject* pCurObj ; hzAtom atom ; hzChain bval ; hdbObjRepos* pRepos ; hdsInfo* pInfo ; hdbObject* pObj ; hzString param1 ; hzString param2 ; hzString param3 ; hzString param4 ; hzString param5 ; hzString param6 ; hzString strVal ; hzString S ; hzString a ; hzString b ; uint32_t objId = 0; hzEcode rc = E_OK ; if (!pE) Fatal("%s. No HTTP event supplied\n", __func__) ; pInfo = (hdsInfo*) pE->Session() ; threadLog("%s Commencing with info %p -> ", Exec2Txt(m_Command), pInfo) ; errorReport.Printf("%s Commencing with info %p -> ", Exec2Txt(m_Command), pInfo) ; switch (m_Command) { case EXEC_SENDEMAIL: rc = SendEmail(errorReport, pE) ; break ; case EXEC_SETVAR: if (!pInfo) { errorReport.Printf("EXEC_SETVAR No session in place\n") ; return E_CORRUPT ; } param2 = m_pApp->m_ExecParams[m_FstParam+1]; if (param2[0]== CHAR_PERCENT) rc = m_pApp->PcEntConv(atom, param2, pE) ; else rc = atom.SetValue(m_type, param2) ; param1 = m_pApp->m_ExecParams[m_FstParam] ; if (!pInfo->m_Sessvals.Exists(param1)) pInfo->m_Sessvals.Insert(param1, atom) ; else pInfo->m_Sessvals[param1] = atom ; break ; case EXEC_ADDUSER: rc = Adduser(errorReport, pE) ; break ; case EXEC_LOGON: rc = Logon(errorReport, pE) ; break ; case EXEC_TEST: param1 = m_pApp->m_ExecParams[m_FstParam] ; param2 = m_pApp->m_ExecParams[m_FstParam+1]; a = m_pApp->ConvertText(param1, pE) ; b = m_pApp->ConvertText(param2, pE) ; if (a == b) errorReport.Printf("exec test OK: a = %s, b = %s\n", *a, *b) ; else { errorReport.Printf("exec test FAIL: a = %s, b = %s\n", *a, *b) ; rc = E_NOTFOUND ; } break ; case EXEC_EXTRACT: rc = Extract(errorReport, pE) ; break ; case EXEC_OBJ_TEMP: param1 = m_pApp->m_ExecParams[m_FstParam] ; param2 = m_pApp->m_ExecParams[m_FstParam+1]; threadLog("Got exec params of %s and %s\n", *param1, *param2) ; pClass = m_pApp->m_ADP.GetPureClass(param2) ; if (!pClass) { errorReport.Printf("EXEC_OBJ_TEMP FAIL: No such class as %s\n", *param2) ; rc = E_NOTFOUND ; break ; } if (pE->m_pContextObj) { errorReport.Printf("EXEC_OBJ_TEMP FAIL: Already a temp object\n") ; rc = E_NOTFOUND ; break ; } pE->m_pContextObj = pObj = new hdbObject() ; pObj->Init(pClass) ; pObj->SetName(param1) ; errorReport.Printf("EXEC_OBJ_TEMP: Allocated a temp object of %s\n", *param1) ; break ; case EXEC_OBJ_START: if (!pInfo) { errorReport.Printf("EXEC_OBJ_START FAIL: No user session\n") ; rc = E_NOINIT ; break ; } threadLog("Got exec param of %d\n", m_FstParam) ; param1 = m_pApp->m_ExecParams[m_FstParam] ; threadLog("Got exec param of %d\n", m_FstParam) ; threadLog("Got exec param of %s\n", *param1) ; param2 = m_pApp->m_ExecParams[m_FstParam+1]; threadLog("Got exec param of %s\n", *param2) ; pClass = m_pApp->m_ADP.GetPureClass(param2) ; pInfo->ObjectAssert(param1, pClass) ; break ; case EXEC_OBJ_FETCH: case EXEC_OBJ_IMPORT: case EXEC_OBJ_EXPORT: case EXEC_OBJ_SETMBR: case EXEC_OBJ_COMMIT: case EXEC_OBJ_CLOSE: param1 = m_pApp->m_ExecParams[m_FstParam] ; if (pE->m_pContextObj) pCurObj = (hdbObject*) pE->m_pContextObj ; else { if (!pInfo) { errorReport.Printf("%s FAIL: No user session\n", Exec2Txt(m_Command)) ; rc = E_NOINIT ; break ; } pCurObj = pInfo->ObjectSelect(param1) ; pCurObj = pInfo->m_pObj ; if (!pInfo->m_pObj) { errorReport.Printf("%s FAIL: No current object\n", Exec2Txt(m_Command)) ; rc = E_NOINIT ; break ; } } switch (m_Command) { case EXEC_OBJ_FETCH: break ; case EXEC_OBJ_IMPORT: param2 = m_pApp->m_ExecParams[m_FstParam+1]; strVal = m_pApp->ConvertText(param2, pE) ; if (rc != E_OK) { errorReport.Printf("%s FAIL: String %s could not be converted\n", Exec2Txt(m_Command), *param2) ; rc = E_OPENFAIL ; break ; } is.open(*strVal) ; if (is.fail()) { errorReport.Printf("%s FAIL: File %s could not be opened\n", Exec2Txt(m_Command), *strVal) ; ; rc = E_OPENFAIL ; break ; } bval << is ; is.close() ; pCurObj->ImportJSON(bval) ; break ; case EXEC_OBJ_EXPORT: param2 = m_pApp->m_ExecParams[m_FstParam+1]; break ; case EXEC_OBJ_SETMBR: param2 = m_pApp->m_ExecParams[m_FstParam+1]; param3 = m_pApp->m_ExecParams[m_FstParam+2]; param4 = m_pApp->m_ExecParams[m_FstParam+3]; pClass = m_pApp->m_ADP.GetPureClass(param2) ; if (!pClass) { errorReport.Printf("EXEC_OBJ_SETMBR FAIL: No such class as %s\n", *param2) ; rc = E_NOTFOUND ; break ; } pMbr = pClass->GetMember(param3) ; if (!pMbr) { errorReport.Printf("EXEC_OBJ_SETMBR FAIL: Class %s has no member of %s\n", *param2, *param3) ; rc = E_NOTFOUND ; break ; } switch (pMbr->Basetype()) { case BASETYPE_TXTDOC: case BASETYPE_BINARY: if (pE->m_Uploads.Exists(param4)) { hzHttpFile hf ; hf = pE->m_Uploads[param4] ; strVal = m_pApp->ConvertText(param4, pE) ; errorReport.Printf("Step %s=%s (fld %s file %s of %d bytes) mime=%d\n", *param3, *param4, *hf.m_fldname, *hf.m_filename, hf.m_file.Size(), hf.m_mime) ; rc = pCurObj->SetBinary(pMbr, hf.m_file) ; } if (pE->m_mapChains.Exists(param4)) { bval = pE->m_mapChains[param4] ; strVal.Clear() ; errorReport.Printf("Step %s=%s (chain %d bytes)\n", *param3, *param4, bval.Size()) ; rc = pCurObj->SetBinary(pMbr, bval) ; } break ; case BASETYPE_EMADDR: case BASETYPE_URL: case BASETYPE_STRING: strVal = m_pApp->ConvertText(param4, pE) ; errorReport.Printf("Strlike Step %s = %s (%s)\n", *param3, *param4, *strVal) ; atom = strVal ; rc = pCurObj->SetValue(pMbr, atom) ; break ; default: rc = m_pApp->PcEntConv(atom, param4, pE) ; errorReport.Printf("Numlike Step %s = %s (%s)\n", *param3, *param4, atom.Show()) ; rc = pCurObj->SetValue(pMbr, atom) ; break ; } break ; case EXEC_OBJ_COMMIT: if (!pCurObj) { errorReport.Printf("EXEC_OBJ_COMMIT FAIL: No current object\n") ; rc = E_NOINIT ; break ; } pRepos = m_pApp->m_ADP.GetObjRepos(pCurObj->ReposId()) ; if (!pRepos) { errorReport.Printf("EXEC_OBJ_COMMIT FAIL: Object %s No repository\n", *param1) ; rc = E_NOINIT ; break ; } if (pCurObj->GetObjId()) rc = pRepos->Update(*pCurObj, pCurObj->GetObjId()) ; else rc = pRepos->Insert(objId, *pCurObj) ; if (rc != E_OK) errorReport.Printf("EXEC_OBJ_COMMIT FAIL: Insert/Modify on repository of %s failed with error %s\n", *param2, Err2Txt(rc)) ; break ; case EXEC_OBJ_CLOSE: break ; } break ; case EXEC_TREE_DCL: if (!pInfo) { errorReport.Printf("EXEC_TREE_DCL FAIL. No user session\n") ; return E_NOTFOUND ; } param1 = m_pApp->m_ExecParams[m_FstParam] ; if (pInfo->m_pTree) { if (pInfo->m_pTree->m_Groupname == param1) break ; delete pInfo->m_pTree ; } pInfo->m_pTree = new hdsNavtree() ; pInfo->m_pTree->m_Groupname = param1 ; threadLog("SET tree %s in session %p\n", *pInfo->m_pTree->m_Groupname, pInfo) ; break ; /* ** case EXEC_TREE_CPY: // If the current user session tree is empty, copy headings from the named public tree (if supplied) and copy entries from a source ** // object (if supplied). This command can only apply to the current user session tree. If this is not present or does not have the ** // supplied id, this is an error. The command will do nothing if the current user session tree is not empty. It is for initializing ** // values only. ** ** if (!pInfo) ** { errorReport.Printf("EXEC_TREE_CPY FAIL. No user session\n") ; return E_NOTFOUND ; } ** ** param1 = m_pApp->m_ExecParams[m_FstParam] ; // Tree id ** param2 = m_pApp->m_ExecParams[m_FstParam+1] ; // Tree to copy (if applicable) ** param3 = m_pApp->m_ExecParams[m_FstParam+2] ; // Object to copy (if applicable) ** ** // Check source tree if supplied ** if (param2) ** { ** pTree = m_pApp->m_ArticleGroups[param2] ; ** if (!pTree) ** { errorReport.Printf("EXEC_TREE_CPY FAIL. Named source tree %s not found\n", *param2) ; return E_NOTFOUND ; } ** } ** ** // Check source object if supplied ** if (param3) ** { ** } ** ** if (pInfo->m_pTree->Count()) ** break ; ** */ case EXEC_TREE_HEAD: if (!pE) Fatal("No HTTP event supplied\n") ; pInfo = (hdsInfo*) pE->Session() ; if (!pInfo) { errorReport.Printf("EXEC_TREEOP FAIL. No user session\n") ; return E_NOTFOUND ; } if (!pInfo->m_pTree) { errorReport.Printf("EXEC_TREEOP FAIL. No user tree\n") ; return E_NOTFOUND ; } param1 = m_pApp->m_ExecParams[m_FstParam] ; param2 = m_pApp->m_ExecParams[m_FstParam+1]; param3 = m_pApp->m_ExecParams[m_FstParam+2]; param4 = m_pApp->m_ExecParams[m_FstParam+3]; if (pInfo->m_pTree->m_Groupname != param1) { errorReport.Printf("EXEC_TREEOP FAIL. Wrong tree\n") ; return E_NOTFOUND ; } if (param2 && !pInfo->m_pTree->Exists(param2)) { errorReport.Printf("EXEC_TREEOP FAIL. Stated parent (%s) does not exist\n", *param2) ; return E_NOTFOUND ; } pInfo->m_pTree->AddHead(param2, param3, param4, false) ; break ; case EXEC_TREE_ITEM: if (!pE) Fatal("No HTTP event supplied\n") ; pInfo = (hdsInfo*) pE->Session() ; if (!pInfo) { errorReport.Printf("EXEC_TREEOP FAIL. No user session\n") ; return E_NOTFOUND ; } if (!pInfo->m_pTree) { errorReport.Printf("EXEC_TREEOP FAIL. No user tree\n") ; return E_NOTFOUND ; } param1 = m_pApp->m_ExecParams[m_FstParam] ; param2 = m_pApp->m_ExecParams[m_FstParam+1]; param3 = m_pApp->m_ExecParams[m_FstParam+2]; param4 = m_pApp->m_ExecParams[m_FstParam+3]; if (pInfo->m_pTree->m_Groupname != param1) { errorReport.Printf("EXEC_TREEOP FAIL. Wrong tree\n") ; return E_NOTFOUND ; } if (param2 && !pInfo->m_pTree->Exists(param2)) { errorReport.Printf("EXEC_TREEOP FAIL. Stated parent (%s) does not exist\n", *param2) ; return E_NOTFOUND ; } pInfo->m_pTree->AddItem(param2, param3, param4, 0,false) ; break ; case EXEC_TREE_FORM: if (!pInfo) { errorReport.Printf("EXEC_TREEOP FAIL. No user session\n") ; return E_NOTFOUND ; } if (!pInfo->m_pTree) { errorReport.Printf("EXEC_TREEOP FAIL. No user tree\n") ; return E_NOTFOUND ; } param1 = m_pApp->m_ExecParams[m_FstParam] ; param2 = m_pApp->m_ExecParams[m_FstParam+1]; param3 = m_pApp->m_ExecParams[m_FstParam+2]; param4 = m_pApp->m_ExecParams[m_FstParam+3]; param5 = m_pApp->m_ExecParams[m_FstParam+4]; param6 = m_pApp->m_ExecParams[m_FstParam+5]; if (pInfo->m_pTree->m_Groupname != param1) { errorReport.Printf("EXEC_TREEOP FAIL. Wrong tree\n") ; return E_NOTFOUND ; } hdsArticleStd* pArt ; hdsFormref* pFormRef ; pArt = new hdsArticleStd() ; pArt->m_Refname = param3 ; pArt->m_Title = param4 ; pArt->m_bFlags |= HZ_TREEITEM_FORM ; pArt->m_bFlags |= HZ_TREEITEM_LINK ; // Add form reference to the article pFormRef = new hdsFormref(0); pFormRef->m_Formname = param5 ; pArt->AddFormref(pFormRef) ; pArt->AddVisent(pFormRef) ; pInfo->m_pTree->AddItem(param2, param3, param4, pArt, false) ; break ; case EXEC_TREE_SYNC: /* ** if (!pE) ** Fatal("No HTTP event supplied\n") ; ** pInfo = (hdsInfo*) pE->Session() ; ** ** if (!pInfo) ** { errorReport.Printf("EXEC_TREEOP FAIL. No user session\n") ; return E_NOTFOUND ; } ** ** if (!pInfo->m_pTree) ** { errorReport.Printf("EXEC_TREEOP FAIL. No user tree\n") ; return E_NOTFOUND ; } ** ** param1 = m_pApp->m_ExecParams[m_FstParam] ; // Tree id ** param2 = m_pApp->m_ExecParams[m_FstParam+1] ; // Object id ** ** if (pInfo->m_pTree->m_Groupname != param1) ** { errorReport.Printf("EXEC_TREEOP FAIL. Wrong tree\n") ; return E_NOTFOUND ; } ** ** // Then obtain existing user session or temp object ** if (pE->m_pContextObj) ** pCurObj = (hdbObject*) pE->m_pContextObj ; ** else ** { ** if (!pInfo) ** { errorReport.Printf("%s FAIL: No user session\n", Exec2Txt(m_Command)) ; rc = E_NOINIT ; break ; } ** ** pCurObj = pInfo->ObjectSelect(param2) ; ** pCurObj = pInfo->m_pObj ; ** ** if (!pInfo->m_pObj) ** { errorReport.Printf("%s FAIL: No current object\n", Exec2Txt(m_Command)) ; rc = E_NOINIT ; break ; } ** } ** ** pInfo->m_pTree->Sync(*pCurObj) ; ** */ break ; case EXEC_TREE_DEL: break ; case EXEC_TREE_EXP: break ; case EXEC_TREE_CLR: break ; case EXEC_SRCH_PAGES: rc = SrchPages(errorReport, pE) ; break ; case EXEC_SRCH_REPOS: rc = SrchRepos(errorReport, pE) ; break ; case EXEC_FILESYS: rc = Filesys(errorReport, pE) ; break ; } return rc ; }