Ejemplo n.º 1
0
void gfileedit() {
  int i;
  char s[81];

  if (!ValidateSysopPassword()) {
    return;
  }
  showsec();
  bool done = false;
  do {
    bout.nl();
    bout << "|#2G-files: D:elete, I:nsert, M:odify, Q:uit, ? : ";
    char ch = onek("QDIM?");
    switch (ch) {
    case '?':
      showsec();
      break;
    case 'Q':
      done = true;
      break;
    case 'M':
      bout.nl();
      bout << "|#2Section number? ";
      input(s, 2);
      i = atoi(s);
      if ((s[0] != 0) && (i >= 0) && (i < session()->num_sec)) {
        modify_sec(i);
      }
      break;
    case 'I':
      if (session()->num_sec < session()->max_gfilesec) {
        bout.nl();
        bout << "|#2Insert before which section? ";
        input(s, 2);
        i = atoi(s);
        if ((s[0] != 0) && (i >= 0) && (i <= session()->num_sec)) {
          insert_sec(i);
        }
      }
      break;
    case 'D':
      bout.nl();
      bout << "|#2Delete which section? ";
      input(s, 2);
      i = atoi(s);
      if ((s[0] != 0) && (i >= 0) && (i < session()->num_sec)) {
        bout.nl();
        bout << "|#5Delete " << gfilesec[i].name << "?";
        if (yesno()) {
          delete_sec(i);
        }
      }
      break;
    }
  } while (!done && !hangup);
  File gfileDat(syscfg.datadir, GFILE_DAT);
  gfileDat.Open(File::modeReadWrite | File::modeBinary | File::modeCreateFile | File::modeTruncate);
  gfileDat.Write(&gfilesec[0], session()->num_sec * sizeof(gfiledirrec));
  gfileDat.Close();
}
Ejemplo n.º 2
0
/**
 * Finds GetSession()->usernum and system number from emailAddress, sets network number as
 * appropriate.
 * @param emailAddress The text of the email address.
 * @param pUserNumber OUT The User Number
 * @param pSystemmNumber OUT The System Number
 */
void parse_email_info(const std::string emailAddress, int *pUserNumber, int *pSystemNumber) {
  char *ss1, onx[20], ch, *mmk;
  unsigned nUserNumber, nSystemNumber;
  int i, nv, on, xx, onxi, odci;
  net_system_list_rec *csne;

  char szEmailAddress[ 255 ];
  strcpy(szEmailAddress, emailAddress.c_str());

  *pUserNumber = 0;
  *pSystemNumber = 0;
  net_email_name[0] = '\0';
  char *ss = strrchr(szEmailAddress, '@');
  if (ss == NULL) {
    nUserNumber = finduser1(szEmailAddress);
    if (nUserNumber > 0) {
      *pUserNumber = static_cast< unsigned short >(nUserNumber);
    } else if (wwiv::strings::IsEquals(szEmailAddress, "SYSOP")) {     // Add 4.31 Build3
      *pUserNumber = 1;
    } else {
      GetSession()->bout << "Unknown user.\r\n";
    }
  } else if (atoi(ss + 1) == 0) {
    for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) {
      set_net_num(i);
      if ((WWIV_STRNICMP("internet", GetSession()->GetNetworkName(), 8) == 0) ||
          ((WWIV_STRNICMP("filenet", GetSession()->GetNetworkName(), 7) == 0) && (*pSystemNumber == 32767))) {
        strcpy(net_email_name, szEmailAddress);
        for (ss1 = net_email_name; *ss1; ss1++) {
          if ((*ss1 >= 'A') && (*ss1 <= 'Z')) {
            *ss1 += 'a' - 'A';
          }
        }
        *pSystemNumber = 1;
        break;
      }
    }
    if (i >= GetSession()->GetMaxNetworkNumber()) {
      GetSession()->bout << "Unknown user.\r\n";
    }
  } else {
    ss[0] = '\0';
    ss = &(ss[1]);
    i = strlen(szEmailAddress);
    while (i > 0 && szEmailAddress[i - 1] == ' ') {
      --i;
    }
    szEmailAddress[i] = 0;
    nUserNumber = atoi(szEmailAddress);
    if (nUserNumber == 0 && szEmailAddress[0] == '#') {
      nUserNumber = atoi(szEmailAddress + 1);
    }
    if (strchr(szEmailAddress, '@')) {
      nUserNumber = 0;
    }
    nSystemNumber = atoi(ss);
    ss1 = strchr(ss, '.');
    if (ss1) {
      ss1++;
    }
    if (nUserNumber == 0) {
      strcpy(net_email_name, szEmailAddress);
      i = strlen(net_email_name);
      while (i > 0 && net_email_name[i - 1] == ' ') {
        --i;
      }
      net_email_name[i] = '\0';
      if (net_email_name[0]) {
        *pSystemNumber = static_cast< unsigned short >(nSystemNumber);
      } else {
        GetSession()->bout << "Unknown user.\r\n";
      }
    } else {
      *pUserNumber = static_cast< unsigned short >(nUserNumber);
      *pSystemNumber = static_cast< unsigned short >(nSystemNumber);
    }
    if (*pSystemNumber && ss1) {
      for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) {
        set_net_num(i);
        if (wwiv::strings::IsEqualsIgnoreCase(ss1, GetSession()->GetNetworkName())) {
          if (!valid_system(*pSystemNumber)) {
            GetSession()->bout.NewLine();
            GetSession()->bout << "There is no " << ss1 << " @" << *pSystemNumber << ".\r\n\n";
            *pSystemNumber = *pUserNumber = 0;
          } else {
            if (*pSystemNumber == net_sysnum) {
              *pSystemNumber = 0;
              if (*pUserNumber == 0) {
                *pUserNumber = static_cast< unsigned short >(finduser(net_email_name));
              }
              if (*pUserNumber == 0 || *pUserNumber > 32767) {
                *pUserNumber = 0;
                GetSession()->bout << "Unknown user.\r\n";
              }
            }
          }
          break;
        }
      }
      if (i >= GetSession()->GetMaxNetworkNumber()) {
        GetSession()->bout.NewLine();
        GetSession()->bout << "This system isn't connected to " << ss1 << "\r\n";
        *pSystemNumber = *pUserNumber = 0;
      }
    } else if (*pSystemNumber && GetSession()->GetMaxNetworkNumber() > 1) {
      odc[0] = '\0';
      odci = 0;
      onx[0] = 'Q';
      onx[1] = '\0';
      onxi = 1;
      nv = 0;
      on = GetSession()->GetNetworkNumber();
      ss = static_cast<char *>(BbsAllocA(GetSession()->GetMaxNetworkNumber()));
      WWIV_ASSERT(ss != NULL);
      xx = -1;
      for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) {
        set_net_num(i);
        if (net_sysnum == *pSystemNumber) {
          xx = i;
        } else if (valid_system(*pSystemNumber)) {
          ss[nv++] = static_cast< char >(i);
        }
      }
      set_net_num(on);
      if (nv == 0) {
        if (xx != -1) {
          set_net_num(xx);
          *pSystemNumber = 0;
          if (*pUserNumber == 0) {
            *pUserNumber = static_cast< unsigned short >(finduser(net_email_name));
            if (*pUserNumber == 0 || *pUserNumber > 32767) {
              *pUserNumber = 0;
              GetSession()->bout << "Unknown user.\r\n";
            }
          }
        } else {
          GetSession()->bout.NewLine();
          GetSession()->bout << "Unknown system\r\n";
          *pSystemNumber = *pUserNumber = 0;
        }
      } else if (nv == 1) {
        set_net_num(ss[0]);
      } else {
        GetSession()->bout.NewLine();
        for (i = 0; i < nv; i++) {
          set_net_num(ss[i]);
          csne = next_system(*pSystemNumber);
          if (csne) {
            if (i < 9) {
              onx[onxi++] = static_cast< char >(i + '1');
              onx[onxi] = 0;
            } else {
              odci = static_cast< char >((i + 1) / 10);
              odc[odci - 1] = static_cast< char >(odci + '0');
              odc[odci] = 0;
            }
            GetSession()->bout << i + 1 << ". " << GetSession()->GetNetworkName() << " (" << csne->name << ")\r\n";
          }
        }
        GetSession()->bout << "Q. Quit\r\n\n";
        GetSession()->bout << "|#2Which network (number): ";
        if (nv < 9) {
          ch = onek(onx);
          if (ch == 'Q') {
            i = -1;
          } else {
            i = ch - '1';
          }
        } else {
          mmk = mmkey(2);
          if (*mmk == 'Q') {
            i = -1;
          } else {
            i = atoi(mmk) - 1;
          }
        }
        if (i >= 0 && i < nv) {
          set_net_num(ss[i]);
        } else {
          GetSession()->bout << "\r\n|#6Aborted.\r\n\n";
          *pUserNumber = *pSystemNumber = 0;
        }
      }
      free(ss);
    } else {
      if (*pSystemNumber == net_sysnum) {
        *pSystemNumber = 0;
        if (*pUserNumber == 0) {
          *pUserNumber = static_cast< unsigned short >(finduser(net_email_name));
        }
        if (*pUserNumber == 0 || *pUserNumber > 32767) {
          *pUserNumber = 0;
          GetSession()->bout << "Unknown user.\r\n";
        }
      } else if (!valid_system(*pSystemNumber)) {
        GetSession()->bout << "\r\nUnknown user.\r\n";
        *pSystemNumber = *pUserNumber = 0;
      }
    }
  }
}
Ejemplo n.º 3
0
void edit_languages() {
  char s1[81];
  int i, i1, i2;

  bool done = false;
  do {
    out->Cls();
    nlx();
    for (i = 0; i < initinfo.num_languages; i++) {
      if (i && ((i % 23) == 0)) {
        pausescr();
      }
      Printf("%-2d. %-20s    %-50s\n", i + 1, languages[i].name, languages[i].dir);
    }
    nlx();
    out->SetColor(Scheme::PROMPT);
    Puts("Languages: M:odify, D:elete, I:nsert, Q:uit : ");
    out->SetColor(Scheme::NORMAL);
    char ch = onek("Q\033MID");
    switch (ch) {
    case 'Q':
    case '\033':
      done = true;
      break;
    case 'M':
      nlx();
      out->SetColor(Scheme::PROMPT);
      sprintf(s1, "Edit which (1-%d) ? ", initinfo.num_languages);
      Puts(s1);
      out->SetColor(Scheme::NORMAL);
      i = input_number(2);
      if ((i > 0) && (i <= initinfo.num_languages)) {
        edit_lang(i - 1);
      }
      break;
    case 'D':
      if (initinfo.num_languages > 1) {
        nlx();
        sprintf(s1, "Delete which (1-%d) ? ", initinfo.num_languages);
        out->SetColor(Scheme::PROMPT);
        Puts(s1);
        out->SetColor(Scheme::NORMAL);
        i = input_number(2);
        if ((i > 0) && (i <= initinfo.num_languages)) {
          nlx();
          out->SetColor(Scheme::ERROR_TEXT);
          Puts("Are you sure? ");
          out->SetColor(Scheme::NORMAL);
          ch = onek("YN\r");
          if (ch == 'Y') {
            initinfo.num_languages--;
            for (i1 = i - 1; i1 < initinfo.num_languages; i1++) {
              languages[i1] = languages[i1 + 1];
            }
            if (initinfo.num_languages == 1) {
              languages[0].num = 0;
            }
          }
        }
      } else {
        nlx();
        out->SetColor(Scheme::ERROR_TEXT);
        Printf("You must leave at least one language.\n");
        out->SetColor(Scheme::NORMAL);
        nlx();
        out->GetChar();
      }
      break;
    case 'I':
      if (initinfo.num_languages >= MAX_LANGUAGES) {
        out->SetColor(Scheme::ERROR_TEXT);
        Printf("Too many languages.\n");
        out->SetColor(Scheme::NORMAL);
        nlx();
        out->GetChar();
        break;
      }
      nlx();
      out->SetColor(Scheme::PROMPT);
      sprintf(s1, "Insert before which (1-%d) ? ", initinfo.num_languages + 1);
      Puts(s1);
      out->SetColor(Scheme::NORMAL);
      i = input_number(2);
      if ((i > 0) && (i <= initinfo.num_languages + 1)) {
        out->SetColor(Scheme::ERROR_TEXT);
        Puts("Are you sure? ");
        out->SetColor(Scheme::NORMAL);
        ch = onek("YN\r");
        if (ch == 'Y') {
          --i;
          for (i1 = initinfo.num_languages; i1 > i; i1--) {
            languages[i1] = languages[i1 - 1];
          }
          initinfo.num_languages++;
          strcpy(languages[i].name, "English");
          strncpy(languages[i].dir, syscfg.gfilesdir, sizeof(languages[i1].dir) - 1);
          strncpy(languages[i].mdir, syscfg.gfilesdir, sizeof(languages[i1].mdir) - 1);
          i2 = 0;
          for (i1 = 0; i1 < initinfo.num_languages; i1++) {
            if ((i != i1) && (languages[i1].num >= i2)) {
              i2 = languages[i1].num + 1;
            }
          }
          if (i2 >= 250) {
            for (i2 = 0; i2 < 255; i2++) {
              for (i1 = 0; i1 < initinfo.num_languages; i1++) {
                if ((i != i1) && (languages[i1].num == i2)) {
                  break;
                }
              }
              if (i1 >= initinfo.num_languages) {
                break;
              }
            }
          }
          languages[i].num = i2;
          edit_lang(i);
        }
      }
      break;
    }
  } while (!done);

  char szFileName[ MAX_PATH ];
  sprintf(szFileName, "%slanguage.dat", syscfg.datadir);
  unlink(szFileName);
  int hFile = open(szFileName, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  write(hFile, (void *)languages, initinfo.num_languages * sizeof(languagerec));
  close(hFile);
}
Ejemplo n.º 4
0
void modify_sec(int n) {
  char s[81];

  gfiledirrec r = gfilesec[n];
  bool done = false;
  do {
    bout.cls();
    bout.litebar("Editing G-File Area # %d", n);
    bout << "|#9A) Name       : |#2" << r.name << wwiv::endl;
    bout << "|#9B) Filename   : |#2" << r.filename << wwiv::endl;
    bout << "|#9C) SL         : |#2" << static_cast<int>(r.sl) << wwiv::endl;
    bout << "|#9D) Min. Age   : |#2" << static_cast<int>(r.age) << wwiv::endl;
    bout << "|#9E) Max Files  : |#2" << r.maxfiles << wwiv::endl;
    bout << "|#9F) AR         : |#2" << GetArString(r, s) << wwiv::endl;
    bout.nl();
    bout << "|#7(|#2Q|#7=|#1Quit|#7) Which (|#1A|#7-|#1F,|#1[|#7,|#1]|#7) : ";
    char ch = onek("QABCDEF[]", true);
    switch (ch) {
    case 'Q':
      done = true;
      break;
    case '[':
      gfilesec[n] = r;
      if (--n < 0) {
        n = session()->num_sec - 1;
      }
      r = gfilesec[n];
      break;
    case ']':
      gfilesec[n] = r;
      if (++n >= session()->num_sec) {
        n = 0;
      }
      r = gfilesec[n];
      break;
    case 'A':
      bout.nl();
      bout << "|#2New name? ";
      inputl(s, 40);
      if (s[0]) {
        strcpy(r.name, s);
      }
      break;
    case 'B': {
      bout.nl();
      File dir(syscfg.gfilesdir, r.filename);
      if (dir.Exists()) {
        bout << "\r\nThere is currently a directory for this g-file section.\r\n";
        bout << "If you change the filename, the directory will still be there.\r\n\n";
      }
      bout.nl();
      bout << "|#2New filename? ";
      input(s, 8);
      if ((s[0] != 0) && (strchr(s, '.') == 0)) {
        strcpy(r.filename, s);
        File dir(syscfg.gfilesdir, r.filename);
        if (!dir.Exists()) {
          bout.nl();
          bout << "|#5Create directory for this section? ";
          if (yesno()) {
            File dir(syscfg.gfilesdir, r.filename);
            File::mkdirs(dir);
          } else {
            bout << "\r\nYou will have to create the directory manually, then.\r\n\n";
          }
        } else {
          bout << "\r\nA directory already exists under this filename.\r\n\n";
        }
        pausescr();
      }
    }
    break;
    case 'C': {
      bout.nl();
      bout << "|#2New SL? ";
      input(s, 3);
      int i = atoi(s);
      if (i >= 0 && i < 256 && s[0]) {
        r.sl = static_cast<unsigned char>(i);
      }
    }
    break;
    case 'D': {
      bout.nl();
      bout << "|#2New Min Age? ";
      input(s, 3);
      int i = atoi(s);
      if ((i >= 0) && (i < 128) && (s[0])) {
        r.age = static_cast<unsigned char>(i);
      }
    }
    break;
    case 'E': {
      bout.nl();
      bout << "|#1Max 99 files/section.\r\n|#2New max files? ";
      input(s, 3);
      int i = atoi(s);
      if ((i >= 0) && (i < 99) && (s[0])) {
        r.maxfiles = static_cast<unsigned short>(i);
      }
    }
    break;
    case 'F':
      bout.nl();
      bout << "|#2New AR (<SPC>=None) ? ";
      char ch2 = onek("ABCDEFGHIJKLMNOP ");
      if (ch2 == SPACE) {
        r.ar = 0;
      } else {
        r.ar = 1 << (ch2 - 'A');
      }
      break;
    }
  } while (!done && !hangup);
  gfilesec[n] = r;
}
Ejemplo n.º 5
0
void valscan() {
  // Must be local cosysop or better
  if (!lcs()) {
    return;
  }

  int ac = 0;
  int os = GetSession()->GetCurrentMessageArea();

  if (uconfsub[1].confnum != -1 && okconf(GetSession()->GetCurrentUser())) {
    ac = 1;
    tmp_disable_conf(true);
  }
  bool done = false;
  for (int sn = 0; sn < GetSession()->num_subs && !hangup && !done; sn++) {
    if (!iscan(sn)) {
      continue;
    }
    if (GetSession()->GetCurrentReadMessageArea() < 0) {
      return;
    }

    uint32_t sq = qsc_p[sn];

    // Must be sub with validation "on"
    if (!(xsubs[GetSession()->GetCurrentReadMessageArea()].num_nets)
        || !(subboards[GetSession()->GetCurrentReadMessageArea()].anony & anony_val_net)) {
      continue;
    }

    GetSession()->bout.NewLine();
    GetSession()->bout.Color(2);
    GetSession()->bout.ClearEOL();
    GetSession()->bout << "{{ ValScanning " << subboards[GetSession()->GetCurrentReadMessageArea()].name << " }}\r\n";
    lines_listed = 0;
    GetSession()->bout.ClearEOL();
    if (okansi() && !newline) {
      GetSession()->bout << "\r\x1b[2A";
    }

    for (int i = 1; i <= GetSession()->GetNumMessagesInCurrentMessageArea() && !hangup && !done; i++) {    // was i = 0
      if (get_post(i)->status & status_pending_net) {
        CheckForHangup();
        GetSession()->localIO()->tleft(true);
        if (i > 0 && i <= GetSession()->GetNumMessagesInCurrentMessageArea()) {
          bool next;
          int val;
          read_message(i, &next, &val);
          GetSession()->bout << "|#4[|#4Subboard: " << subboards[GetSession()->GetCurrentReadMessageArea()].name << "|#1]\r\n";
          GetSession()->bout <<  "|#1D|#9)elete, |#1R|#9)eread |#1V|#9)alidate, |#1M|#9)ark Validated, |#1Q|#9)uit: |#2";
          char ch = onek("QDVMR");
          switch (ch) {
          case 'Q':
            done = true;
            break;
          case 'R':
            i--;
            continue;
          case 'V': {
            open_sub(true);
            resynch(&i, nullptr);
            postrec *p1 = get_post(i);
            p1->status &= ~status_pending_net;
            write_post(i, p1);
            close_sub();
            send_net_post(p1, subboards[GetSession()->GetCurrentReadMessageArea()].filename,
                          GetSession()->GetCurrentReadMessageArea());
            GetSession()->bout.NewLine();
            GetSession()->bout << "|#7Message sent.\r\n\n";
          }
          break;
          case 'M':
            if (lcs() && i > 0 && i <= GetSession()->GetNumMessagesInCurrentMessageArea() &&
                subboards[GetSession()->GetCurrentReadMessageArea()].anony & anony_val_net &&
                xsubs[GetSession()->GetCurrentReadMessageArea()].num_nets) {
              open_sub(true);
              resynch(&i, nullptr);
              postrec *p1 = get_post(i);
              p1->status &= ~status_pending_net;
              write_post(i, p1);
              close_sub();
              GetSession()->bout.NewLine();
              GetSession()->bout << "|#9Not set for net pending now.\r\n\n";
            }
            break;
          case 'D':
            if (lcs()) {
              if (i > 0) {
                open_sub(true);
                resynch(&i, nullptr);
                postrec p2 = *get_post(i);
                delete_message(i);
                close_sub();
                if (p2.ownersys == 0) {
                  WUser tu;
                  GetApplication()->GetUserManager()->ReadUser(&tu, p2.owneruser);
                  if (!tu.IsUserDeleted()) {
                    if (static_cast<unsigned long>(date_to_daten(tu.GetFirstOn())) < p2.daten) {
                      GetSession()->bout.NewLine();
                      GetSession()->bout << "|#2Remove how many posts credit? ";
                      char szNumCredits[ 11 ];
                      input(szNumCredits, 3, true);
                      int nNumPostCredits = 1;
                      if (szNumCredits[0]) {
                        nNumPostCredits = atoi(szNumCredits);
                      }
                      nNumPostCredits = std::min<int>(tu.GetNumMessagesPosted(), nNumPostCredits);
                      if (nNumPostCredits) {
                        tu.SetNumMessagesPosted(tu.GetNumMessagesPosted() - static_cast<unsigned short>(nNumPostCredits));
                      }
                      GetSession()->bout.NewLine();
                      GetSession()->bout << "|#3Post credit removed = " << nNumPostCredits << wwiv::endl;
                      tu.SetNumDeletedPosts(tu.GetNumDeletedPosts() + 1);
                      GetApplication()->GetUserManager()->WriteUser(&tu, p2.owneruser);
                      GetApplication()->UpdateTopScreen();
                    }
                  }
                }
                resynch(&i, &p2);
              }
            }
            break;
          }
        }
      }
    }
    qsc_p[sn] = sq;
  }

  if (ac) {
    tmp_disable_conf(false);
  }

  GetSession()->SetCurrentMessageArea(os);
  GetSession()->bout.NewLine(2);
}
Ejemplo n.º 6
0
void ConfigUserMenuSet() {
  if (session()->usernum != nSecondUserRecLoaded) {
    if (!LoadMenuSetup(session()->usernum)) {
      LoadMenuSetup(1);
    }
  }

  nSecondUserRecLoaded = session()->usernum;

  bout.cls();
  bout.litebar("Configure Menus");
  printfile(MENUWEL_NOEXT);
  bool bDone = false;
  while (!bDone && !hangup) {
    bout.nl();
    bout << "|#11|#9) Menuset      :|#2 " << pSecondUserRec->szMenuSet << wwiv::endl;
    bout << "|#12|#9) Use hot keys :|#2 " << (pSecondUserRec->cHotKeys == HOTKEYS_ON ? "Yes" : "No ")
         << wwiv::endl;
    bout.nl();
    bout << "|#9(|#2Q|#9=|#1Quit|#9) : ";
    char chKey = onek("Q12?");

    switch (chKey) {
    case 'Q':
      bDone = true;
      break;
    case '1': {
      ListMenuDirs();
      bout.nl(2);
      bout << "|#9Enter the menu set to use : ";
      string menuSetName;
      inputl(&menuSetName, 8);
      if (ValidateMenuSet(menuSetName.c_str())) {
        wwiv::menus::MenuDescriptions descriptions(GetMenuDirectory());
        bout.nl();
        bout << "|#9Menu Set : |#2" <<  menuSetName.c_str() << " :  |#1" << descriptions.description(menuSetName) << wwiv::endl;
        bout << "|#5Use this menu set? ";
        if (noyes()) {
          strcpy(pSecondUserRec->szMenuSet, menuSetName.c_str());
          break;
        }
      }
      bout.nl();
      bout << "|#6That menu set does not exists, resetting to the default menu set" << wwiv::endl;
      pausescr();
      if (pSecondUserRec->szMenuSet[0] == '\0') {
        strcpy(pSecondUserRec->szMenuSet, "wwiv");
      }
    }
    break;
    case '2':
      pSecondUserRec->cHotKeys = !pSecondUserRec->cHotKeys;
      break;
    case '3':
      pSecondUserRec->cMenuType = !pSecondUserRec->cMenuType;
      break;
    case '?':
      printfile(MENUWEL_NOEXT);
      continue;                           // bypass the below cls()
    }
    bout.cls();
  }

  // If menu is invalid, it picks the first one it finds
  if (!ValidateMenuSet(pSecondUserRec->szMenuSet)) {
    if (session()->num_languages > 1 && session()->user()->GetLanguage() != 0) {
      bout << "|#6No menus for " << languages[session()->user()->GetLanguage()].name
           << " language.";
      input_language();
    }
  }

  WriteMenuSetup(session()->usernum);
  MenuSysopLog(StringPrintf("Menu in use : %s - %s - %s", pSecondUserRec->szMenuSet,
          pSecondUserRec->cHotKeys == HOTKEYS_ON ? "Hot" : "Off", pSecondUserRec->cMenuType == MENUTYPE_REGULAR ? "REG" : "PD"));
  bout.nl(2);
}
Ejemplo n.º 7
0
/**
 * Writes the auto message
 */
void write_automessage() {
  std::vector<std::string> lines;
  std::string rollOver;

  GetSession()->bout << "\r\n|#9Enter auto-message. Max 5 lines. Colors allowed:|#0\r\n\n";
  for (int i = 0; i < 5; i++) {
    GetSession()->bout << "|#7" << i + 1 << ":|#0";
    std::string line;
    inli(line, rollOver, 70);
    StringTrimEnd(line);
    lines.push_back(line);
  }
  GetSession()->bout.NewLine();
  bool bAnonStatus = false;
  if (getslrec(GetSession()->GetEffectiveSl()).ability & ability_post_anony) {
    GetSession()->bout << "|#9Anonymous? ";
    bAnonStatus = yesno();
  }

  GetSession()->bout << "|#9Is this OK? ";
  if (yesno()) {
    WStatus *pStatus = GetApplication()->GetStatusManager()->BeginTransaction();
    pStatus->SetAutoMessageAnonymous(bAnonStatus);
    pStatus->SetAutoMessageAuthorUserNumber(GetSession()->usernum);
    GetApplication()->GetStatusManager()->CommitTransaction(pStatus);

    WTextFile file(syscfg.gfilesdir, AUTO_MSG, "wt");
    std::string authorName = GetSession()->GetCurrentUser()->GetUserNameAndNumber(GetSession()->usernum);
    file.WriteFormatted("%s\r\n", authorName.c_str());
    sysoplog("Changed Auto-message");
#if defined(_MSC_VER) && (_MSC_VER < 1800)
    for (std::vector<std::string>::const_iterator iter = lines.begin(); iter != lines.end(); ++iter) {
      std::string line = (*iter);
      StringTrimEnd(line);
#else
    for (const auto& line : lines) {
#endif
      file.Write(line);
      file.Write("\r\n");
      sysoplog(line, true);
    }
    GetSession()->bout << "\r\n|#5Auto-message saved.\r\n\n";
    file.Close();
  }
}


char ShowAMsgMenuAndGetInput(const std::string& autoMessageLockFileName) {
  bool bCanWrite = false;
  if (!GetSession()->GetCurrentUser()->IsRestrictionAutomessage() && !WFile::Exists(autoMessageLockFileName)) {
    bCanWrite = (getslrec(GetSession()->GetEffectiveSl()).posts) ? true : false;
  }

  char cmdKey = 0;
  if (cs()) {
    GetSession()->bout <<
                       "|#9(|#2Q|#9)uit, (|#2R|#9)ead, (|#2A|#9)uto-reply, (|#2W|#9)rite, (|#2L|#9)ock, (|#2D|#9)el, (|#2U|#9)nlock : ";
    cmdKey = onek("QRWALDU", true);
  } else if (bCanWrite) {
    GetSession()->bout << "|#9(|#2Q|#9)uit, (|#2R|#9)ead, (|#2A|#9)uto-reply, (|#2W|#9)rite : ";
    cmdKey = onek("QRWA", true);
  } else {
    GetSession()->bout << "|#9(|#2Q|#9)uit, (|#2R|#9)ead, (|#2A|#9)uto-reply : ";
    cmdKey = onek("QRA", true);
  }
  return cmdKey;
}