campo-sirio/ba/ba1400.cpp

115 lines
2.6 KiB
C++
Raw Normal View History

#include <relapp.h>
#include <stdtypes.h>
#include <modaut.h>
#include <utility.h>
#include "ba1.h"
#include "ba0100a.h"
class TSet_users : public TRelation_application
{
TMask* _msk;
TRelation* _rel;
virtual bool user_create() ;
virtual bool user_destroy() ;
virtual TMask* get_mask(int mode) { return _msk;}
virtual bool changing_mask(int mode) { return FALSE;}
virtual TRelation* get_relation() const { return _rel;}
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
void enable_aut(TMask& m);
static bool password_handler(TMask_field& f, KEY key);
virtual void init_query_mode(TMask& m) { enable_aut(m);}
virtual void init_insert_mode(TMask& m) { enable_aut(m);}
virtual void init_modify_mode(TMask& m) { enable_aut(m);}
public:
TSet_users() : _msk(NULL), _rel(NULL) {}
};
bool TSet_users::password_handler(TMask_field& f, KEY key)
{
if (f.mask().mode() == MODE_QUERY || key != K_ENTER) return TRUE;
const bool ok = f.get().len() > 3 ;
if (!ok) f.error_box("La password deve essere almeno 3 caratteri");
return ok;
}
void TSet_users::enable_aut(TMask& m)
{
const bool prassi = (m.get(F_USER) == "PRASSI");
for (int i = 1; i < ENDAUT; i++)
{
if (i == MUAUT) continue;
const int pos = _msk->id2pos(F_BASE + i);
if (pos >= 0)
{
TMask_field& f = m.fld(pos);
f.enable(!prassi && has_module(i, CHK_DONGLE));
if (prassi) f.set("X");
}
}
}
bool TSet_users::user_create()
{
if (user() != "PRASSI")
return error_box("Utente non abilitato all'uso di questo programma");
_msk = new TMask("ba1400a") ;
_rel = new TRelation(LF_USER);
_msk->field(F_MU).disable();
_msk->set_handler(F_PASSWORD, password_handler);
return TRUE;
}
int TSet_users::read(TMask& m)
{
TRelation_application::read(m);
const TRelation *r = get_relation();
m.set(F_PASSWORD, decode(r->lfile().get("PASSWORD")));
return NOERR;
}
int TSet_users::write(const TMask& m)
{
TRelation *r = get_relation();
TString16 s(encode(m.get(F_PASSWORD)));
r->lfile().put("PASSWORD", (const char *) s);
return TRelation_application::write(m);
}
int TSet_users::rewrite(const TMask& m)
{
TRelation *r = get_relation();
TString16 s(encode(m.get(F_PASSWORD)));
r->lfile().put("PASSWORD", s);
return TRelation_application::rewrite(m);
}
bool TSet_users::user_destroy()
{
if (_msk != NULL) delete _msk;
if (_rel != NULL) delete _rel;
return TRUE;
}
int ba1400(int argc, char** argv)
{
TSet_users a ;
a.run(argc, argv, "Configurazione utenti");
return 0;
}