Return TypeFunction nameArguments
hzEcodehdsExec::Exec(hzChain&,hzHttpEvent*,)

Declared in file: hzDissemino.h
Defined in file : hdsExec.cpp

Function Logic:

0:START 1:!pE 2:Fatal 3:hzHttpEvent::Session pInfo Exec2Txt Exec2Txt hzChain::Printf 4:m_Command 5:EXEC_SENDEMAIL 6:hdsExec::SendEmail rc

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 ;
}