/*
FILE
	tAuthorize source code of mysqlSendmail.cgi
	(built by mysqlRAD2.cgi (c) Gary Wallis 2001,2002 GPL Licensed)
	$Id: tauthorize.c 6 2005-11-24 00:02:59Z ggw $
	(tAuthorize.cPasswd template set member)
PURPOSE
*/

#include "mysqlrad.h"

//Table Variables
//uAuthorize: Primary Key
static unsigned uAuthorize=0;
//cLabel: Short label
static char cLabel[33]={""};
//cIpMask: Allow user from this IP
static char cIpMask[21]={"0.0.0.0/0"};
//uPerm: User permission level
static unsigned uPerm=0;
//uCertClient: User uClient
static unsigned uCertClient=0;
//cPasswd: Unix crypt() password
static char cPasswd[17]={""};
//uOwner: Record owner
static unsigned uOwner=0;
//uCreatedBy: uClient for last insert
static unsigned uCreatedBy=0;
#define ISM3FIELDS
//uCreatedDate: Unix seconds date last insert
static long unsigned uCreatedDate=0;
//uModBy: uClient for last update
static unsigned uModBy=0;
//uModDate: Unix seconds date last update
static long unsigned uModDate=0;




#define VAR_LIST_tAuthorize "tAuthorize.uAuthorize,tAuthorize.cLabel,tAuthorize.cIpMask,tAuthorize.uPerm,tAuthorize.uCertClient,tAuthorize.cPasswd,tAuthorize.uOwner,tAuthorize.uCreatedBy,tAuthorize.uCreatedDate,tAuthorize.uModBy,tAuthorize.uModDate"

 //Local only
void Insert_tAuthorize(void);
void Update_tAuthorize(char *rowid);
int InsertUpdate_tAuthorize(char *cKey);
void ProcesstAuthorizeListVars(pentry entries[], int x);

 //In tAuthorizefunc.h file included below
void ExtProcesstAuthorizeVars(pentry entries[], int x);
void ExttAuthorizeCommands(pentry entries[], int x);
void ExttAuthorizeButtons(void);
void ExttAuthorizeNavBar(void);
void ExttAuthorizeGetHook(entry gentries[], int x);
void ExttAuthorizeSelect(void);
void ExttAuthorizeSelectRow(void);
void ExttAuthorizeListSelect(void);
void ExttAuthorizeListFilter(void);
void ExttAuthorizeAuxTable(void);

#include "tauthorizefunc.h"

 //Table Variables Assignment Function
void ProcesstAuthorizeVars(pentry entries[], int x)
{
	register int i;


	for(i=0;i<x;i++)
	{
		if(!strcmp(entries[i].name,"uAuthorize"))
			sscanf(entries[i].val,"%u",&uAuthorize);
		else if(!strcmp(entries[i].name,"cLabel"))
			sprintf(cLabel,"%.32s",entries[i].val);
		else if(!strcmp(entries[i].name,"cIpMask"))
			sprintf(cIpMask,"%.20s",entries[i].val);
		else if(!strcmp(entries[i].name,"uPerm"))
			sscanf(entries[i].val,"%u",&uPerm);
		else if(!strcmp(entries[i].name,"uCertClient"))
			sscanf(entries[i].val,"%u",&uCertClient);
		else if(!strcmp(entries[i].name,"cPasswd"))
			sprintf(cPasswd,"%.16s",entries[i].val);
		else if(!strcmp(entries[i].name,"uOwner"))
			sscanf(entries[i].val,"%u",&uOwner);
		else if(!strcmp(entries[i].name,"uCreatedBy"))
			sscanf(entries[i].val,"%u",&uCreatedBy);
		else if(!strcmp(entries[i].name,"uCreatedDate"))
			sscanf(entries[i].val,"%lu",&uCreatedDate);
		else if(!strcmp(entries[i].name,"uModBy"))
			sscanf(entries[i].val,"%u",&uModBy);
		else if(!strcmp(entries[i].name,"uModDate"))
			sscanf(entries[i].val,"%lu",&uModDate);

	}

	//After so we can overwrite form data if needed.
	ExtProcesstAuthorizeVars(entries,x);

}//ProcesstAuthorizeVars()


void ProcesstAuthorizeListVars(pentry entries[], int x)
{
        register int i;

        for(i=0;i<x;i++)
        {
                if(!strncmp(entries[i].name,"ED",2))
                {
                        sscanf(entries[i].name+2,"%u",&uAuthorize);
                        mode=6;
                        tAuthorize("");
                }
        }
}//void ProcesstAuthorizeListVars(pentry entries[], int x)


int tAuthorizeCommands(pentry entries[], int x)
{
	ProcessControlVars(entries,x);

	ExttAuthorizeCommands(entries,x);

	if(!strcmp(function,"tAuthorizeTools"))
	{
		if(!strcmp(find,LANG_NB_LIST))
		{
			tAuthorizeList();
		}

		//Default
		ProcesstAuthorizeVars(entries,x);
		tAuthorize("");
	}
	else if(!strcmp(function,"tAuthorizeList"))
	{
		ProcessControlVars(entries,x);
		ProcesstAuthorizeListVars(entries,x);
		tAuthorizeList();
	}

	return(0);

}//tAuthorizeCommands()


void tAuthorize(const char *result)
{
	MYSQL_RES *res;
	MYSQL_RES *res2;
	MYSQL_ROW field;

	//Internal skip reloading
	if(!result[0])
	{
		if(mode)
			ExttAuthorizeSelectRow();
		else
			ExttAuthorizeSelect();

		mysql_query(&mysql,query);
		if(mysql_errno(&mysql))
        	{
			if(strstr(mysql_error(&mysql)," doesn't exist"))
                	{
				CreatetAuthorize();
				mysqlSendmail("New tAuthorize table created");
                	}
			else
			{
				mysqlSendmail(mysql_error(&mysql));
			}
        	}

		res=mysql_store_result(&mysql);
		if((i=mysql_num_rows(res)))
		{
			if(mode==6)
			{
			sprintf(query,"SELECT _rowid FROM tAuthorize WHERE uAuthorize=%u"
						,uAuthorize);
			mysql_query(&mysql,query);
			res2=mysql_store_result(&mysql);
			field=mysql_fetch_row(res2);
			sscanf(field[0],"%lu",&rowid);
			rowid++;
			}
			PageMachine("",0,"");
			if(!mode) mysql_data_seek(res,rowid-1);
			field=mysql_fetch_row(res);
		sscanf(field[0],"%u",&uAuthorize);
		sprintf(cLabel,"%.32s",field[1]);
		sprintf(cIpMask,"%.20s",field[2]);
		sscanf(field[3],"%u",&uPerm);
		sscanf(field[4],"%u",&uCertClient);
		sprintf(cPasswd,"%.16s",field[5]);
		sscanf(field[6],"%u",&uOwner);
		sscanf(field[7],"%u",&uCreatedBy);
		sscanf(field[8],"%lu",&uCreatedDate);
		sscanf(field[9],"%u",&uModBy);
		sscanf(field[10],"%lu",&uModDate);

		}

	}//Internal Skip

	Header_ism3(":: tAuthorize",0);
	printf("<form action=mysqlSendmail.cgi method=post >\n");
	printf("<table width=900 border=0 bgcolor=#A9BEC0 valign=center>\n");
	printf("<tr><td colspan=2><font face=Arial,Helvetica size=2>");


	ExttAuthorizeNavBar();

	printf("<input type=hidden name=function value=tAuthorizeTools>");
	printf("<input type=hidden name=rowid value=%lu>",rowid);
	if(i)
	{
		printf(" <font color=blue >");
		if(mode==6)
			//printf(" Found");
			printf(LANG_NBR_FOUND);
		else if(mode==5)
			//printf(" Modified");
			printf(LANG_NBR_MODIFIED);
		else if(mode==4)
			//printf(" New");
			printf(LANG_NBR_NEW);
		printf(LANG_NBRF_SHOWING,rowid,i);
	}
	else
	{
		if(!result[0])
		//printf(" No records found");
		printf(LANG_NBR_NORECS);
	}
	if(result[0]) printf(" <b> %s",result);
	printf("</td></tr>");
	printf("<tr><td valign=top>");

        ExttAuthorizeButtons();

        printf("</td><td valign=top>");
	printf("<table width=630 border=0 bgcolor=#9BC1B3 valign=center>\n");

	if(mode==2000 || mode==2002)
		tAuthorizeInputContent();
	else
		tAuthorizeContent();

	printf("</table>\n");
	printf("</table>\n");

	//Bottom table
        ExttAuthorizeAuxTable();

	printf("</font></form>\n");
	Footer_ism3();

}//end of tAuthorize();


void tAuthorizeContent(void)
{

	OpenRow(LANG_FL_tAuthorize_uAuthorize,"white");
	printf("%u<input type=hidden name=uAuthorize value=%u >\n",uAuthorize,uAuthorize);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_cLabel,"white");
	printf("%s<input type=hidden name=cLabel value=\"%s\">",cLabel,EncodeDoubleQuotes(cLabel));
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_cIpMask,"white");
	printf("%s<input type=hidden name=cIpMask value=\"%s\">",cIpMask,EncodeDoubleQuotes(cIpMask));
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_uPerm,"white");
	printf("%u<input type=hidden name=uPerm value=%u >\n",uPerm,uPerm);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_uCertClient,"white");
	printf("%u<input type=hidden name=uCertClient value=%u >\n",uCertClient,uCertClient);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_cPasswd,"white");
	printf("%s<input type=hidden name=cPasswd value=\"%s\">",cPasswd,EncodeDoubleQuotes(cPasswd));
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_uOwner,"white");
	printf("%s<input type=hidden name=uOwner value=%u >\n",ForeignKey("tClient","cLabel",uOwner),uOwner);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_uCreatedBy,"white");
	printf("%s<input type=hidden name=uCreatedBy value=%u >\n",ForeignKey("tClient","cLabel",uCreatedBy),uCreatedBy);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_uCreatedDate,"white");
	if(uCreatedDate)
		printf("%s\n\n",ctime((time_t *)&uCreatedDate));
	else
		printf("---\n\n");
	printf("<input type=hidden name=uCreatedDate value=%lu >\n",uCreatedDate);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_uModBy,"white");
	printf("%s<input type=hidden name=uModBy value=%u >\n",ForeignKey("tClient","cLabel",uModBy),uModBy);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAuthorize_uModDate,"white");
	if(uModDate)
		printf("%s\n\n",ctime((time_t *)&uModDate));
	else
		printf("---\n\n");
	printf("<input type=hidden name=uModDate value=%lu >\n",uModDate);
	printf("&nbsp;&nbsp;");
	printf("</tr>\n");



}//tAuthorizeContent()


void tAuthorizeInputContent(void)
{

	OpenRow(LANG_FL_tAuthorize_uAuthorize,"white");
	if(uPermLevel>=20)
		printf("<input title='%s' type=text name=uAuthorize value=%u size=16 maxlength=10>\n",LANG_FT_tAuthorize_uAuthorize,uAuthorize);
	else
		printf("%u<input type=hidden name=uAuthorize value=%u >\n",uAuthorize,uAuthorize);
	OpenRow(LANG_FL_tAuthorize_cLabel,"white");
	if(uPermLevel>=12)
		printf("<input title='%s' type=text name=cLabel value=\"%s\" size=40 maxlength=32>\n",LANG_FT_tAuthorize_cLabel,EncodeDoubleQuotes(cLabel));
	else
		printf("%s<input type=hidden name=cLabel value=\"%s\">",cLabel,EncodeDoubleQuotes(cLabel));
	OpenRow(LANG_FL_tAuthorize_cIpMask,"white");
	if(uPermLevel>=12)
		printf("<input title='%s' type=text name=cIpMask value=\"%s\" size=40 maxlength=20>\n",LANG_FT_tAuthorize_cIpMask,EncodeDoubleQuotes(cIpMask));
	else
		printf("%s<input type=hidden name=cIpMask value=\"%s\">",cIpMask,EncodeDoubleQuotes(cIpMask));
	OpenRow(LANG_FL_tAuthorize_uPerm,"white");
	if(uPermLevel>=12)
		printf("<input title='%s' type=text name=uPerm value=%u size=16 maxlength=10>\n",LANG_FT_tAuthorize_uPerm,uPerm);
	else
		printf("%u<input type=hidden name=uPerm value=%u >\n",uPerm,uPerm);
	OpenRow(LANG_FL_tAuthorize_uCertClient,"white");
	if(uPermLevel>=12)
		printf("<input title='%s' type=text name=uCertClient value=%u size=16 maxlength=10>\n",LANG_FT_tAuthorize_uCertClient,uCertClient);
	else
		printf("%u<input type=hidden name=uCertClient value=%u >\n",uCertClient,uCertClient);
	OpenRow(LANG_FL_tAuthorize_cPasswd,"white");
	if(uPermLevel>=7)
		printf("<input title='%s' type=text name=cPasswd value=\"%s\" size=40 maxlength=16>\n",LANG_FT_tAuthorize_cPasswd,EncodeDoubleQuotes(cPasswd));
	else
		printf("%s<input type=hidden name=cPasswd value=\"%s\">",cPasswd,EncodeDoubleQuotes(cPasswd));
	OpenRow(LANG_FL_tAuthorize_uOwner,"white");
	printf("%s<input type=hidden name=uOwner value=%u >\n",ForeignKey("tClient","cLabel",uOwner),uOwner);
	OpenRow(LANG_FL_tAuthorize_uCreatedBy,"white");
	printf("%s<input type=hidden name=uCreatedBy value=%u >\n",ForeignKey("tClient","cLabel",uCreatedBy),uCreatedBy);
	OpenRow(LANG_FL_tAuthorize_uCreatedDate,"white");
	if(uCreatedDate)
		printf("%s\n\n",ctime((time_t *)&uCreatedDate));
	else
		printf("---\n\n");
	printf("<input type=hidden name=uCreatedDate value=%lu >\n",uCreatedDate);
	OpenRow(LANG_FL_tAuthorize_uModBy,"white");
	printf("%s<input type=hidden name=uModBy value=%u >\n",ForeignKey("tClient","cLabel",uModBy),uModBy);
	OpenRow(LANG_FL_tAuthorize_uModDate,"white");
	if(uModDate)
		printf("%s\n\n",ctime((time_t *)&uModDate));
	else
		printf("---\n\n");
	printf("<input type=hidden name=uModDate value=%lu >\n",uModDate);
	printf("</tr>\n");



}//void tAuthorizeInputContent(void)


void NewtAuthorize(unsigned uMode)
{
	register int i=0;
	MYSQL_RES *res;

	//New select
	sprintf(query,"SELECT uAuthorize FROM tAuthorize\
				WHERE uAuthorize=%u"
							,uAuthorize);
	mysql_query(&mysql,query);
	if(mysql_errno(&mysql)) mysqlSendmail(mysql_error(&mysql));
	res=mysql_store_result(&mysql);
	i=mysql_num_rows(res);

	if(i) 
		//tAuthorize("<blink>Record already exists");
		tAuthorize(LANG_NBR_RECEXISTS);

	//insert query
	Insert_tAuthorize();
	if(mysql_errno(&mysql)) mysqlSendmail(mysql_error(&mysql));
	//sprintf(query,"New record %u added");
	uAuthorize=mysql_insert_id(&mysql);

	if(!uMode)
	{
	sprintf(query,LANG_NBR_NEWRECADDED,uAuthorize);
	tAuthorize(query);
	}

}//NewtAuthorize(unsigned uMode)


void DeletetAuthorize(void)
{
#ifdef ISM3FIELDS
	sprintf(query,"DELETE FROM tAuthorize WHERE uAuthorize=%u AND ( uOwner=%u OR %u>9 )"
					,uAuthorize,uLoginClient,uPermLevel);
#else
	sprintf(query,"DELETE FROM tAuthorize WHERE uAuthorize=%u"
					,uAuthorize);
#endif
	mysql_query(&mysql,query);
	if(mysql_errno(&mysql)) mysqlSendmail(mysql_error(&mysql));

	//tAuthorize("Record Deleted");
	if(mysql_affected_rows(&mysql)>0)
		tAuthorize(LANG_NBR_RECDELETED);
	else
		tAuthorize(LANG_NBR_RECNOTDELETED_TAUTHORIZE);

}//void DeletetAuthorize(void)


void Insert_tAuthorize(void)
{

#ifdef ISM3FIELDS
	time_t clock;

        time(&clock);
#endif

	//insert query

	//insert query
	sprintf(query,"INSERT INTO tAuthorize SET  uAuthorize=%u, cLabel='%s', cIpMask='%s', uPerm=%u, uCertClient=%u, cPasswd='%s', uOwner=%u, uCreatedBy=%u, uCreatedDate=%lu, uModBy=%u, uModDate=0",
			uAuthorize
			,TextAreaSave(cLabel)
			,TextAreaSave(cIpMask)
			,uPerm
			,uCertClient
			,TextAreaSave(cPasswd)
			,uOwner
			,uCreatedBy
			,(long unsigned)clock
			,uModBy
			);


	mysql_query(&mysql,query);
#ifdef ISM3FIELDS
	uCreatedDate=clock;
#endif

}//void Insert_tAuthorize(void)


void Update_tAuthorize(char *rowid)
{
#ifdef ISM3FIELDS
	time_t clock;

        time(&clock);
#endif

	//update query

	//update query
	sprintf(query,"UPDATE tAuthorize SET uAuthorize=%u,cLabel='%s',cIpMask='%s',uPerm=%u,uCertClient=%u,cPasswd='%s',uModBy=%u,uModDate=%lu WHERE _rowid=%s",
			uAuthorize
			,TextAreaSave(cLabel)
			,TextAreaSave(cIpMask)
			,uPerm
			,uCertClient
			,TextAreaSave(cPasswd)
			,uModBy
			,(long unsigned)clock
			,rowid);


	mysql_query(&mysql,query);

#ifdef ISM3FIELDS
	uModDate=clock;
#endif

}//void Update_tAuthorize(void)


void ModtAuthorize(void)
{
	register int i=0;
	MYSQL_RES *res;
	MYSQL_ROW field;
#ifdef ISM3FIELDS
	unsigned uPreModDate=0;

	//Mod select query
	if(uPermLevel<10)
	sprintf(query,"SELECT tAuthorize.uAuthorize,\
				tAuthorize.uModDate\
				FROM tAuthorize,tClient\
				WHERE tAuthorize.uAuthorize=%u\
				AND tAuthorize.uOwner=tClient.uClient\
				AND (tClient.uOwner=%u OR tClient.uClient=%u)"
			,uAuthorize,uLoginClient,uLoginClient);
	else
	sprintf(query,"SELECT uAuthorize,uModDate FROM tAuthorize\
				WHERE uAuthorize=%u"
						,uAuthorize);
#else
	sprintf(query,"SELECT uAuthorize FROM tAuthorize\
				WHERE uAuthorize=%u"
						,uAuthorize);
#endif

	mysql_query(&mysql,query);
	if(mysql_errno(&mysql)) mysqlSendmail(mysql_error(&mysql));
	res=mysql_store_result(&mysql);
	i=mysql_num_rows(res);

	//if(i<1) tAuthorize("<blink>Record does not exist");
	if(i<1) tAuthorize(LANG_NBR_RECNOTEXIST);
	//if(i>1) tAuthorize("<blink>Multiple rows!");
	if(i>1) tAuthorize(LANG_NBR_MULTRECS);

	field=mysql_fetch_row(res);
#ifdef ISM3FIELDS
	sscanf(field[1],"%u",&uPreModDate);
	if(uPreModDate!=uModDate) tAuthorize(LANG_NBR_EXTMOD);
#endif

	Update_tAuthorize(field[0]);
	if(mysql_errno(&mysql)) mysqlSendmail(mysql_error(&mysql));
	//sprintf(query,"record %s modified",field[0]);
	sprintf(query,LANG_NBRF_REC_MODIFIED,field[0]);
	tAuthorize(query);

}//ModtAuthorize(void)


void tAuthorizeList(void)
{
	MYSQL_RES *res;
	MYSQL_ROW field;

	ExttAuthorizeListSelect();

	mysql_query(&mysql,query);
	if(mysql_error(&mysql)[0]) mysqlSendmail(mysql_error(&mysql));
	res=mysql_store_result(&mysql);
	i=mysql_num_rows(res);

	PageMachine("tAuthorizeList",1,"");//1 is auto header list mode. Opens table!

	//Filter select drop down
	ExttAuthorizeListFilter();

	printf("<input type=text size=16 name=command maxlength=98 value=\"%s\" >",command);

	printf("</table>\n");

	printf("<table bgcolor=#9BC1B3 border=0 width=900>\n");
	printf("<tr bgcolor=black><td><font face=arial,helvetica color=white>uAuthorize<td><font face=arial,helvetica color=white>cLabel<td><font face=arial,helvetica color=white>cIpMask<td><font face=arial,helvetica color=white>uPerm<td><font face=arial,helvetica color=white>uCertClient<td><font face=arial,helvetica color=white>cPasswd<td><font face=arial,helvetica color=white>uOwner<td><font face=arial,helvetica color=white>uCreatedBy<td><font face=arial,helvetica color=white>uCreatedDate<td><font face=arial,helvetica color=white>uModBy<td><font face=arial,helvetica color=white>uModDate</tr>");



	mysql_data_seek(res,start-1);

	for(n=0;n<(end-start+1);n++)
	{
		field=mysql_fetch_row(res);
		if(!field)
		{
			printf("<tr><td><font face=arial,helvetica>End of data</table>");
			Footer_ism3();
		}
			if(n % 2)
				printf("<tr bgcolor=#BBE1D3>");
			else
				printf("<tr>");
		printf("<td><font face=arial,helvetica size=1><input type=submit name=ED%s value=Edit></font> %s<td>%s<td>%s<td>%s<td>%s<td>%s<td>%s<td>%s<td>%s<td>%s<td>%s</tr>"
			,field[0]
			,field[0]
			,field[1]
			,field[2]
			,field[3]
			,field[4]
			,field[5]
			,field[6]
			,field[7]
			,field[8]
			,field[9]
			,field[10]
				);

	}

	printf("</table></form>\n");
	Footer_ism3();

}//tAuthorizeList()


void CreatetAuthorize(void)
{
	sprintf(query,"CREATE TABLE tAuthorize ( uAuthorize int unsigned PRIMARY KEY AUTO_INCREMENT, cLabel varchar(32) NOT NULL DEFAULT '', uOwner int unsigned NOT NULL DEFAULT 0,index (uOwner), uCreatedBy int unsigned NOT NULL DEFAULT 0, uCreatedDate int unsigned NOT NULL DEFAULT 0, uModBy int unsigned NOT NULL DEFAULT 0, uModDate int unsigned NOT NULL DEFAULT 0, cIpMask varchar(20) NOT NULL DEFAULT '', uPerm int unsigned NOT NULL DEFAULT 0, uCertClient int unsigned NOT NULL DEFAULT 0, cPasswd varchar(16) NOT NULL DEFAULT '' )");
	mysql_query(&mysql,qstr);
	if(mysql_errno(&mysql))
		mysqlSendmail(mysql_error(&mysql));
}//CreatetAuthorize()

//sedall patch1
