/*
FILE
	tAlias source code of mysqlSendmail.cgi
	(built by mysqlRAD2.cgi (c) Gary Wallis 2001,2002 GPL Licensed)
	$Id: talias.c 18 2005-12-14 20:24:21Z ggw $
	(tAuthorize.cPasswd template set member)
PURPOSE
*/

#include "mysqlrad.h"

//Table Variables
//uAlias: Primary Key
static unsigned uAlias=0;
//cLocalUser: Local mail user
static char cLocalUser[33]={""};
//cTargetEmail: Local mail user destination email or program
static char cTargetEmail[256]={""};
//uServer: Server account is on
static unsigned uServer=0;
static char cuServerPullDown[256]={""};
//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_tAlias "tAlias.uAlias,tAlias.cUser,tAlias.cTargetEmail,tAlias.uServer,tAlias.uOwner,tAlias.uCreatedBy,tAlias.uCreatedDate,tAlias.uModBy,tAlias.uModDate"

 //Local only
void Insert_tAlias(void);
void Update_tAlias(char *rowid);
int InsertUpdate_tAlias(char *cKey);
void ProcesstAliasListVars(pentry entries[], int x);

 //In tAliasfunc.h file included below
void ExtProcesstAliasVars(pentry entries[], int x);
void ExttAliasCommands(pentry entries[], int x);
void ExttAliasButtons(void);
void ExttAliasNavBar(void);
void ExttAliasGetHook(entry gentries[], int x);
void ExttAliasSelect(void);
void ExttAliasSelectRow(void);
void ExttAliasListSelect(void);
void ExttAliasListFilter(void);
void ExttAliasAuxTable(void);

#include "taliasfunc.h"

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


	for(i=0;i<x;i++)
	{
		if(!strcmp(entries[i].name,"uAlias"))
			sscanf(entries[i].val,"%u",&uAlias);
		else if(!strcmp(entries[i].name,"cLocalUser"))
			sprintf(cLocalUser,"%.32s",WordToLower(entries[i].val));
		else if(!strcmp(entries[i].name,"cTargetEmail"))
			sprintf(cTargetEmail,"%.255s",entries[i].val);
		else if(!strcmp(entries[i].name,"uServer"))
			sscanf(entries[i].val,"%u",&uServer);
		else if(!strcmp(entries[i].name,"cuServerPullDown"))
		{
			sprintf(cuServerPullDown,"%.255s",entries[i].val);
			uServer=ReadPullDown("tServer","cLabel",cuServerPullDown);
		}
		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.
	ExtProcesstAliasVars(entries,x);

}//ProcesstAliasVars()


void ProcesstAliasListVars(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",&uAlias);
                        mode=6;
                        tAlias("");
                }
        }
}//void ProcesstAliasListVars(pentry entries[], int x)


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

	ExttAliasCommands(entries,x);

	if(!strcmp(function,"tAliasTools"))
	{
		if(!strcmp(find,LANG_NB_LIST))
		{
			tAliasList();
		}

		//Default
		ProcesstAliasVars(entries,x);
		tAlias("");
	}
	else if(!strcmp(function,"tAliasList"))
	{
		ProcessControlVars(entries,x);
		ProcesstAliasListVars(entries,x);
		tAliasList();
	}

	return(0);

}//tAliasCommands()


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

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

		mysql_query(&mysql,query);
		if(mysql_errno(&mysql))
        	{
			if(strstr(mysql_error(&mysql)," doesn't exist"))
                	{
				CreatetAlias();
				mysqlSendmail("New tAlias 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 tAlias WHERE uAlias=%u"
						,uAlias);
			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",&uAlias);
		sprintf(cLocalUser,"%.32s",field[1]);
		sprintf(cTargetEmail,"%.255s",field[2]);
		sscanf(field[3],"%u",&uServer);
		sscanf(field[4],"%u",&uOwner);
		sscanf(field[5],"%u",&uCreatedBy);
		sscanf(field[6],"%lu",&uCreatedDate);
		sscanf(field[7],"%u",&uModBy);
		sscanf(field[8],"%lu",&uModDate);

		}

	}//Internal Skip

	Header_ism3(":: tAlias",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>");


	ExttAliasNavBar();

	printf("<input type=hidden name=function value=tAliasTools>");
	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>");

        ExttAliasButtons();

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

	if(mode==2000 || mode==2002)
		tAliasInputContent();
	else
		tAliasContent();

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

	//Bottom table
        ExttAliasAuxTable();

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

}//end of tAlias();


void tAliasContent(void)
{

	OpenRow(LANG_FL_tAlias_uAlias,"white");
	printf("%u<input type=hidden name=uAlias value=%u >\n",uAlias,uAlias);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAlias_cUser,EmptyString(cLocalUser));
	printf("%s<input type=hidden name=cLocalUser value=\"%s\">",cLocalUser,EncodeDoubleQuotes(cLocalUser));
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAlias_cTargetEmail,EmptyString(cTargetEmail));
	printf("%s<input type=hidden name=cTargetEmail value=\"%s\">",cTargetEmail,EncodeDoubleQuotes(cTargetEmail));
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAlias_uServer,IsZero(uServer));
	tTablePullDownReadOnly("tServer;cuServerPullDown","cLabel","cLabel",uServer);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAlias_uOwner,"white");
	printf("%s<input type=hidden name=uOwner value=%u >\n",ForeignKey("tClient","cLabel",uOwner),uOwner);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAlias_uCreatedBy,"white");
	printf("%s<input type=hidden name=uCreatedBy value=%u >\n",ForeignKey("tClient","cLabel",uCreatedBy),uCreatedBy);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAlias_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_tAlias_uModBy,"white");
	printf("%s<input type=hidden name=uModBy value=%u >\n",ForeignKey("tClient","cLabel",uModBy),uModBy);
	printf("&nbsp;&nbsp;");
	OpenRow(LANG_FL_tAlias_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");



}//tAliasContent()


void tAliasInputContent(void)
{

	OpenRow(LANG_FL_tAlias_uAlias,"white");
	if(uPermLevel>=20)
		printf("<input title='%s' type=text name=uAlias value=%u size=16 maxlength=10>\n",LANG_FT_tAlias_uAlias,uAlias);
	else
		printf("%u<input type=hidden name=uAlias value=%u >\n",uAlias,uAlias);
	OpenRow(LANG_FL_tAlias_cUser,EmptyString(cLocalUser));
	if(uPermLevel>=8)
		printf("<input title='%s' type=text name=cLocalUser value=\"%s\" size=40 maxlength=32>\n",LANG_FT_tAlias_cUser,EncodeDoubleQuotes(cLocalUser));
	else
		printf("%s<input type=hidden name=cLocalUser value=\"%s\">",cLocalUser,EncodeDoubleQuotes(cLocalUser));
	OpenRow(LANG_FL_tAlias_cTargetEmail,EmptyString(cTargetEmail));
	if(uPermLevel>=8)
		printf("<input title='%s' type=text name=cTargetEmail value=\"%s\" size=40 maxlength=255>\n",LANG_FT_tAlias_cTargetEmail,EncodeDoubleQuotes(cTargetEmail));
	else
		printf("%s<input type=hidden name=cTargetEmail value=\"%s\">",cTargetEmail,EncodeDoubleQuotes(cTargetEmail));
	OpenRow(LANG_FL_tAlias_uServer,IsZero(uServer));
	if(uPermLevel>=8)
		tTablePullDown("tServer;cuServerPullDown","cLabel","cLabel",uServer);
	else
	{
		tTablePullDownReadOnly("tServer;cuServerPullDown","cLabel","cLabel",uServer);
	}
	OpenRow(LANG_FL_tAlias_uOwner,"white");
	printf("%s<input type=hidden name=uOwner value=%u >\n",ForeignKey("tClient","cLabel",uOwner),uOwner);
	OpenRow(LANG_FL_tAlias_uCreatedBy,"white");
	printf("%s<input type=hidden name=uCreatedBy value=%u >\n",ForeignKey("tClient","cLabel",uCreatedBy),uCreatedBy);
	OpenRow(LANG_FL_tAlias_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_tAlias_uModBy,"white");
	printf("%s<input type=hidden name=uModBy value=%u >\n",ForeignKey("tClient","cLabel",uModBy),uModBy);
	OpenRow(LANG_FL_tAlias_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 tAliasInputContent(void)


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

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

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

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

	if(!uMode)
	{
	sprintf(query,LANG_NBR_NEWRECADDED,uAlias);
	tAlias(query);
	}

}//NewtAlias(unsigned uMode)


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

	//tAlias("Record Deleted");
	if(mysql_affected_rows(&mysql)>0)
		tAlias(LANG_NBR_RECDELETED);
	else
		tAlias(LANG_NBR_RECNOTDELETED);

}//void DeletetAlias(void)


void Insert_tAlias(void)
{

#ifdef ISM3FIELDS
	time_t clock;

        time(&clock);
#endif

	//insert query

	//insert query
	sprintf(query,"INSERT INTO tAlias SET  uAlias=%u, cUser='%s', cTargetEmail='%s', uServer=%u, uOwner=%u, uCreatedBy=%u, uCreatedDate=%lu, uModBy=%u, uModDate=0",
			uAlias
			,TextAreaSave(cLocalUser)
			,TextAreaSave(cTargetEmail)
			,uServer
			,uOwner
			,uCreatedBy
			,(long unsigned)clock
			,uModBy
			);


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

}//void Insert_tAlias(void)


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

        time(&clock);
#endif

	//update query

	//update query
	sprintf(query,"UPDATE tAlias SET uAlias=%u,cUser='%s',cTargetEmail='%s',uServer=%u,uModBy=%u,uModDate=%lu WHERE _rowid=%s",
			uAlias
			,TextAreaSave(cLocalUser)
			,TextAreaSave(cTargetEmail)
			,uServer
			,uModBy
			,(long unsigned)clock
			,rowid);


	mysql_query(&mysql,query);

#ifdef ISM3FIELDS
	uModDate=clock;
#endif

}//void Update_tAlias(void)


void ModtAlias(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 tAlias.uAlias,\
				tAlias.uModDate\
				FROM tAlias,tClient\
				WHERE tAlias.uAlias=%u\
				AND tAlias.uOwner=tClient.uClient\
				AND (tClient.uOwner=%u OR tClient.uClient=%u)"
			,uAlias,uLoginClient,uLoginClient);
	else
	sprintf(query,"SELECT uAlias,uModDate FROM tAlias\
				WHERE uAlias=%u"
						,uAlias);
#else
	sprintf(query,"SELECT uAlias FROM tAlias\
				WHERE uAlias=%u"
						,uAlias);
#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) tAlias("<blink>Record does not exist");
	if(i<1) tAlias(LANG_NBR_RECNOTEXIST);
	//if(i>1) tAlias("<blink>Multiple rows!");
	if(i>1) tAlias(LANG_NBR_MULTRECS);

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

	Update_tAlias(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]);
	tAlias(query);

}//ModtAlias(void)


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

	ExttAliasListSelect();

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

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

	//Filter select drop down
	ExttAliasListFilter();

	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>uAlias<td><font face=arial,helvetica color=white>cUser<td><font face=arial,helvetica color=white>cTargetEmail<td><font face=arial,helvetica color=white>uServer<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</tr>"
			,field[0]
			,field[0]
			,field[1]
			,field[2]
			,field[3]
			,field[4]
			,field[5]
			,field[6]
			,field[7]
			,field[8]
				);

	}

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

}//tAliasList()


void CreatetAlias(void)
{
	sprintf(query,"CREATE TABLE tAlias ( uAlias int unsigned PRIMARY KEY AUTO_INCREMENT, cUser varchar(32) NOT NULL DEFAULT '',unique (cUser,uServer), 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, uServer int unsigned NOT NULL DEFAULT 0,index (uServer), cTargetEmail varchar(255) NOT NULL DEFAULT '' )");
	mysql_query(&mysql,qstr);
	if(mysql_errno(&mysql))
		mysqlSendmail(mysql_error(&mysql));
}//CreatetAlias()

//sedall patch1
