diff -urN php-4.3.1.org/ext/mnogosearch/php_mnogo.c php-4.3.1/ext/mnogosearch/php_mnogo.c --- php-4.3.1.org/ext/mnogosearch/php_mnogo.c Mon Feb 24 21:42:43 2003 +++ php-4.3.1/ext/mnogosearch/php_mnogo.c Mon Dec 16 20:17:09 2002 @@ -1,5 +1,5 @@ /* $Source$ */ -/* $Id$ */ +/* $Id$ */ /* +----------------------------------------------------------------------+ @@ -163,6 +163,8 @@ #if UDM_VERSION_ID >= 30204 PHP_FE(udm_parse_query_string, NULL) PHP_FE(udm_make_excerpt, NULL) + PHP_FE(udm_set_agent_param_ex, NULL) + PHP_FE(udm_get_res_field_ex, NULL) #endif #endif @@ -466,7 +468,9 @@ UdmVarListReplaceStr(&Env->Vars,"DBAddr",dbaddr); if(UDM_OK!=UdmDBSetAddr(Env->db,dbaddr,UDM_OPEN_MODE_READ)){ sprintf(Env->errstr,"Invalid DBAddr: '%s'",dbaddr); +#if UDM_VERSION_ID <= 30207 Env->errcode=1; +#endif php_error(E_WARNING,"%s(): Invalid DBAddr", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } @@ -517,7 +521,9 @@ UdmVarListReplaceStr(&Env->Vars,"DBAddr",dbaddr); if(UDM_OK!=UdmDBSetAddr(Env->db,dbaddr,UDM_OPEN_MODE_READ)){ sprintf(Env->errstr,"Invalid DBAddr: '%s'",dbaddr); +#if UDM_VERSION_ID <= 30207 Env->errcode=1; +#endif php_error(E_WARNING,"%s(): Invalid DBAddr", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } @@ -997,6 +1003,8 @@ case UDM_PARAM_VARDIR: #if UDM_VERSION_ID < 30200 udm_snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR); +#elif UDM_VERSION_ID >= 30208 + UdmVarListReplaceStr(&Agent->Conf->Vars,"Vardir",val); #elif UDM_VERSION_ID >= 30204 UdmVarListReplaceStr(&Agent->Conf->Vars,"Vardir",val); snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR); @@ -1665,6 +1673,106 @@ RETURN_TRUE; } /* }}} */ + +/* {{{ proto int udm_set_agent_param_ex(int agent, string var, string val) + Set mnoGoSearch agent session parameters extended */ +DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex) +{ + pval **yyagent, **yyvar, **yyval; + char *val, *var; + UDM_AGENT * Agent; + + switch(ZEND_NUM_ARGS()){ + + case 3: + if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){ + RETURN_FALSE; + } + convert_to_string_ex(yyvar); + convert_to_string_ex(yyval); + ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link); + var = Z_STRVAL_PP(yyvar); + val = Z_STRVAL_PP(yyval); + + break; + + default: + WRONG_PARAM_COUNT; + break; + } + + UdmVarListReplaceStr(&Agent->Conf->Vars,var,val); + + if (!strcasecmp(var,"LocalCharset")) { + const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"LocalCharset","iso-8859-1"); + Agent->Conf->lcs=UdmGetCharSet(charset); + } else if (!strcasecmp(var,"BrowserCharset")) { + const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"BrowserCharset","iso-8859-1"); + Agent->Conf->bcs=UdmGetCharSet(charset); + } else if (!strcasecmp(var,"Synonym")) { + if (UdmSynonymListLoad(Agent->Conf,val)) { + php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C),Agent->Conf->errstr); + RETURN_FALSE; + } else UdmSynonymListSort(&(Agent->Conf->Synonyms)); + } else if (!strcasecmp(var,"Stopwordfile")) { + if (UdmStopListLoad(Agent->Conf,val)) { + php_error(E_WARNING, "%s(): %s", Agent->Conf->errstr, get_active_function_name(TSRMLS_C)); + RETURN_FALSE; + } + } else if (!strcasecmp(var,"MinWordLen")) { + Agent->Conf->WordParam.min_word_len=atoi(val); + } else if (!strcasecmp(var,"MaxWordLen")) { + Agent->Conf->WordParam.max_word_len=atoi(val); +#if UDM_VERSION_ID <= 30207 + } else if (!strcasecmp(var,"VarDir")) { + snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR); +#endif + } + + RETURN_TRUE; +} + +/* {{{ proto string udm_get_res_field_ex(int res, int row, string field) + Fetch mnoGoSearch result field */ +DLEXPORT PHP_FUNCTION(udm_get_res_field_ex) +{ + pval **yyres, **yyrow_num, **yyfield_name; + + UDM_RESULT * Res; + int row; + char *field; + + switch(ZEND_NUM_ARGS()){ + case 3: { + if (zend_get_parameters_ex(3, &yyres,&yyrow_num,&yyfield_name)==FAILURE){ + RETURN_FALSE; + } + convert_to_string_ex(yyrow_num); + convert_to_string_ex(yyfield_name); + field = Z_STRVAL_PP(yyfield_name); + row = atoi(Z_STRVAL_PP(yyrow_num)); + } + break; + default: + WRONG_PARAM_COUNT; + break; + } + + ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res); + if(rownum_rows){ + if (!strcasecmp(field,"URL")) { + char *al; + al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), field, ""))); + UdmVarListReplaceStr(&Res->Doc[row].Sections,field,al); + free(al); + } + RETURN_STRING((char *)UdmVarListFindStr(&Res->Doc[row].Sections,field,""),1); + } else { + php_error(E_WARNING,"%s(): row number too large", get_active_function_name(TSRMLS_C)); + RETURN_FALSE; + } +} +/* }}} */ #endif /* {{{ proto int udm_find(int agent, string query) @@ -2071,7 +2179,13 @@ break; } ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link); -#if UDM_VERSION_ID >= 30204 +#if UDM_VERSION_ID >= 30208 + if (UdmEnvErrMsg(Agent->Conf) && strlen(UdmEnvErrMsg(Agent->Conf))) { + RETURN_LONG(1); + } else { + RETURN_LONG(0); + } +#elif UDM_VERSION_ID >= 30204 RETURN_LONG(UdmEnvErrCode(Agent->Conf)); #else RETURN_LONG(UdmDBErrorCode(Agent->db)); diff -urN php-4.3.1.org/ext/mnogosearch/php_mnogo.h php-4.3.1/ext/mnogosearch/php_mnogo.h --- php-4.3.1.org/ext/mnogosearch/php_mnogo.h Mon Feb 24 21:42:43 2003 +++ php-4.3.1/ext/mnogosearch/php_mnogo.h Sun Nov 24 20:39:46 2002 @@ -1,5 +1,5 @@ /* $Source$ */ -/* $Id$ */ +/* $Id$ */ /* +----------------------------------------------------------------------+ @@ -68,6 +68,8 @@ #if UDM_VERSION_ID >= 30204 DLEXPORT PHP_FUNCTION(udm_parse_query_string); DLEXPORT PHP_FUNCTION(udm_make_excerpt); +DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex); +DLEXPORT PHP_FUNCTION(udm_get_res_field_ex); #endif #endif