static void mapinfowindow_load_cities(gint nStateID)
{
	db_resultset_t* pResultSet = NULL;
	db_row_t aRow;

	//
	// Load up all cities for this state
	//
	gchar* pszSQL = g_strdup_printf("SELECT City.ID, City.Name FROM City WHERE StateID=%d ORDER BY Name ASC;", nStateID);
	db_query(pszSQL, &pResultSet);
	g_free(pszSQL);
	g_return_if_fail(pResultSet != NULL);

	// New menu
	if(g_MapInfoWindow.pCityMenu) {
		gtk_widget_destroy(GTK_WIDGET(g_MapInfoWindow.pCityMenu));
	}
	g_MapInfoWindow.pCityMenu = GTK_MENU(gtk_menu_new());

	// Fill menu
	while((aRow = db_fetch_row(pResultSet)) != NULL) {
		gint nCityID = atoi(aRow[0]);
		gchar* pszName = aRow[1];

		// Add new menu item
		GtkMenuItem* pNewMenuItem = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(pszName));
		g_signal_connect(G_OBJECT(pNewMenuItem), "activate", (GCallback)mapinfowindow_on_city_chosen, GINT_TO_POINTER(nCityID));
		gtk_menu_shell_append(GTK_MENU_SHELL(g_MapInfoWindow.pCityMenu), GTK_WIDGET(pNewMenuItem));
	}
	db_free_result(pResultSet);

	// Install new menu
	gtk_widget_show_all(GTK_WIDGET(g_MapInfoWindow.pCityMenu));
	gtk_menu_tool_button_set_menu(g_MapInfoWindow.pCityButton, GTK_WIDGET(g_MapInfoWindow.pCityMenu));
}
Esempio n. 2
0
bool DBPermObj::AddToWhitelist(std::string & dbuser, std::string & pattern)
{
    char * q = new char [ pattern.length() + 1024 ];
    db_struct db;

    snprintf(q, pattern.length() + 1024,
        "SELECT queryid FROM query WHERE "
        "proxyid = %d and db_name = '%s' and query = '%s'",
        proxy_id, db_name.c_str(), pattern.c_str());

    /* read new queryid from the database */
    if (! db_query(&db, q ,pattern.length() + 1024)) {
        /* Failed */
        logevent(STORAGE,"DB config erorr: %s\n",db_error());
        delete [] q;
        db_cleanup(&db);
        return false;
    } 

    /* Download result from server */
    if (db_fetch_row(&db))
    {
        // nothing to do here, query is aready in whitelist
        delete [] q;
        db_cleanup(&db);
        return true;
    }

    // add pattern to the whitelist
    snprintf(q, pattern.length() + 1024,
       "INSERT into query "
       "(proxyid, perm, db_name, query) "
       "VALUES (%d,1,'%s','%s')",
       proxy_id, db_name.c_str(), pattern.c_str());

    /* read new urls from the database */
    if (! db_exec(q)) {
        /* Make query */
        logevent(STORAGE,"DB config erorr: %s\n",db_error());
        delete [] q;
        return false;
    }
    delete [] q;
    q = NULL;

    return true;
}
Esempio n. 3
0
bool DBPermObj::LoadWhitelist()
{
    db_struct db;
    char q[1024];
    std::map<std::string, int, std::less<std::string> > q_list;

    snprintf(q, 1024, "SELECT query, perm FROM query "
              "WHERE proxyid = %d AND db_name='%s'",
              proxy_id, db_name.c_str());

    /* read new exceptions from the database */
    if (! db_query(&db,q,1024)) {
        logevent(STORAGE,"DB config erorr: %s\n",db_error());
        db_cleanup(&db);
        return false;
    } 

    int perm = 0;
    std::string q_ex = "";
        
    /* Get a row from the results */
    while (db_fetch_row(&db))
    {
        perm = db_col_int(&db,1);
        q_ex = (char *) db_col_text(&db,0);

        if (perm > 0 && q_ex.length() > 0)
        {
            //q_list[q_ex] = perm;        
            q_list.insert(std::pair<std::string, int>(q_ex, perm));
        }
    }

    /* Release memory used to store results. */
    db_cleanup(&db);

    exceptions.clear();
    exceptions = q_list;
    return true;
}
Esempio n. 4
0
void mgrSiteGroupList(int fd, short evfd, void *arg)
{
	sp_conn_p c = (sp_conn_p)arg;
	spXmlParser p((char*)"/home/dev/cpp/docroot/sirius/modules.xsl");
	std::string myxml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
	char * presult;
	DBRES q,qCount,qTrouble;
	MYSQL_ROW r,rCount,rTrouble;
	sp_strmap M,P;
	if(c->data->get_vars) M = *c->data->get_vars;
	if(c->data->post_vars) M = *c->data->post_vars;
	fprintf(stderr,"%s line %d...\n",__func__,__LINE__);
	for(;;){ //this permits few cycles
		switch(c->hndstate)
		{
		case 0:
			if(M["act"]=="sitegroupdel")
				c->hndstate = 2; 
			else
				c->hndstate = 1; 
			break;
		case 1:
			//prepare output buf
			c->resp->status=200;
			fprintf(stderr,"%s line %d...\n",__func__,__LINE__);
			(*c->resp->h_out)["Content-Type"] = "text/html";
			conn_compile_resp(c);
	
			q = db_query("SELECT i.groupId, i.groupName "
							"FROM site_groups i "
							"ORDER BY groupName"
							);
			
			fprintf(stderr,"%s line %d...\n",__func__,__LINE__);
			myxml += 
				"<doc mtime=\"45gvergv4rg\" binary=\"/mgr/\" theme=\"/sirius/\" "
					"fixpng=\"\" localdir=\"local/\" img=\"\" css=\"main.css\" logolink=\"/mgr/\" logo=\"logo-vdsmgr.png\" >"
					"<p_num>1</p_num>"
					"<p_cnt>30</p_cnt>"
					"<p_sort>''</p_sort>"
					"<p_order>''</p_order>"
					"<plid></plid>"
					"<func>sitegroups</func>"
					"<slave></slave>"
					"<tfilter></tfilter>"
					"<metadata type=\"list\" selficon=\"equipment\" key=\"gid\">"
						"<coldata type=\"list\" key=\"gid\">"
							"<col type=\"data\" name=\"gid\" wrap=\"no\" align=\"left\" />"
							"<col type=\"data\" name=\"gname\" wrap=\"no\" align=\"left\" />"
							"<col type=\"data\" name=\"sites\" wrap=\"no\" align=\"left\" />"
							"<col type=\"data\" name=\"problems\" wrap=\"no\" align=\"left\" />"
						"</coldata>"
						"<toolbar type=\"list\" key=\"sss\">"
							"<toolbtn type=\"func\" name=\"sitegroupcreate\" img=\"t-new\" default=\"no\" func=\"tb_op_new('sitegroupadd')\" />"
							"<toolbtn type=\"func\" name=\"sitegroupedit\" img=\"t-edit\" default=\"yes\" func=\"tb_op_new('sitegroupedit')\" />"
							"<toolbtn type=\"editlist\" name=\"sitegroupdelete\" img=\"t-delete\" func=\"sitegroupdel\" />"
						"</toolbar>"
					"</metadata>"
					;
			fprintf(stderr,"%s line %d...\n",__func__,__LINE__);
			while(r = db_fetch_row(q))
			{
				myxml += "<elem>";
					myxml += "<gid>"+(std::string)r[0]+"</gid>";
					myxml += "<gname>"+(std::string)r[1]+"</gname>";
					
					qCount = db_query("SELECT count(siteId) FROM sites WHERE groupId="+(std::string)r[0]);
					if(rCount = db_fetch_row(qCount))
						myxml += "<sites>"+(std::string)rCount[0]+"</sites>";
					db_free_result(qCount);
					qTrouble = db_query("SELECT count(siteId) FROM sites WHERE siteStatus!='0' AND groupId="+(std::string)r[0]);
					if(rTrouble = db_fetch_row(qTrouble))
						myxml += "<problems>"+(std::string)rTrouble[0]+"</problems>";
					db_free_result(qTrouble);
					//myxml += "<assigned>"+(std::string)r[4]+"</assigned>";
				
				myxml += "</elem>";
			}
			
			db_free_result(q);
			myxml += 
				"<messages>"
					"<msg name=\"title\">Группы сайтов</msg>"
					"<msg name=\"gid\">ID</msg>"
					"<msg name=\"gname\">Имя группы</msg>"
					"<msg name=\"sites\">Всего сайтов</msg>"
					"<msg name=\"problems\">Проблем</msg>"
					
					"<msg name=\"hint_ipcreate\">Добавить группу в список</msg>"
					"<msg name=\"hint_ipedit\">Изменить свойства группы</msg>"
					"<msg name=\"hint_ipdelete\">Удалить группу</msg>"
					"<msg name=\"msg_nosel\">Ничего не выделено</msg>"
				"</messages>"
				"</doc>";
			fprintf(stderr,"%s line %d... %s\n",__func__,__LINE__,myxml.c_str());
			presult = p.parse(myxml);
			
			if(presult != NULL){
				conn_fillresp(c,presult);
			}else{
				conn_fillresp(c,"Template parse error");
			}
			c->handler = sp_finish_request;
			sp_next(c, c->handler);
			return;
		case 2:
			fprintf(stderr,"DELETE FROM site_groups WHERE groupId='%s'\n",addslashes(P["elid"]).c_str());
			db_query("DELETE FROM site_groups WHERE groupId='"+addslashes(P["elid"])+"'");
			c->hndstate = 1; 
			sp_next(c, c->handler);
			return;
		case 10: //error 500
			c->resp->status=500;			
			c->handler = sp_finish_request;
			sp_next(c, c->handler);
			return;
		}
	}
}