CoolFace
Apppublic

kenken999/php

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
ug_group.php210 linesDownload Raw Back to public
1<?php2@ini_set("display_errors","1");3@ini_set("display_startup_errors","1");4 5require_once("include/dbcommon.php");6header("Expires: Thu, 01 Jan 1970 00:00:01 GMT"); 7 8//	CSRF protection9if( !isPostRequest() )10	return;11 12if(!isLogged())13{ 14	return;15}16if( !Security::isAdmin() )17{18	return;19}20$nonAdminTablesArr = array();21$nonAdminTablesArr[] = "chat_history";22$nonAdminTablesArr[] = "chat_users";23$nonAdminTablesArr[] = "chat_settings";24$nonAdminTablesArr[] = "chat_files";25$nonAdminTablesArr[] = "chat_groups";26$nonAdminTablesArr[] = "chat_peopletype";27$nonAdminTablesArr[] = "chat_timezone";28$nonAdminTablesArr[] = "chat126_users1";29$nonAdminTablesArr[] = "chat_agent";30$nonAdminTablesArr[] = "chat_external";31$nonAdminTablesArr[] = "agett_prompt";32 33$ug_connection = $cman->getForUserGroups();34 35$cbxNames = array('add' => array('mask' => 'A', 'rightName' => 'add')36	, 'edt' => array('mask' => 'E', 'rightName' => 'edit')37	, 'del' => array('mask' => 'D', 'rightName' => 'delete')38	, 'lst' => array('mask' => 'S', 'rightName' => 'list')39	, 'exp' => array('mask' => 'P', 'rightName' => 'export')40	, 'imp' => array('mask' => 'I', 'rightName' => 'import')41	, 'adm' => array('mask' => 'M'));42 43$wGroupTableName = $ug_connection->addTableWrappers( "Chat2uggroups" );44	45switch(postvalue("a"))46{47	case "add":48		$sql = "insert into ". $wGroupTableName ." (". $ug_connection->addFieldWrappers( "Label" ) .")"49			." values (". $ug_connection->prepareString( postvalue("name") ). ")";		50		$ug_connection->exec( $sql );51 52		$sql = "select max(". $ug_connection->addFieldWrappers( "GroupID") .") from ". $wGroupTableName;53		$data = $ug_connection->query( $sql )->fetchNumeric();54		55		echo printJSON( array('success' => true, 'id' => $data[0]) );56		break;57		58	case "del":59		$sql = "delete from ". $wGroupTableName ." where ". $ug_connection->addFieldWrappers("GroupID") ."=".(postvalue_number("id"));60		$ug_connection->exec( $sql );61		62		$sql = "delete from ". $ug_connection->addTableWrappers( "Chat2ugrights" ) 63			." where ". $ug_connection->addFieldWrappers( "GroupID" ) ."=".(postvalue_number("id"));64		$ug_connection->exec( $sql );65 66		// delete records from ugmembers table	67		$dataSource = Security::getUgMembersDatasource();68		$dc = new DsCommand();69		$dc->filter = DataCondition::FieldEquals( "GroupID", postvalue_number("id") ); 70		$dataSource->deleteSingle( $dc, false );71		72		echo printJSON( array('success' => true) );73		break;74		75	case "rename":76		$sql = "update ". $wGroupTableName  77			." set ". $ug_connection->addFieldWrappers( "Label" ) ."=". $ug_connection->prepareString( postvalue("name") )78			." where ". $ug_connection->addFieldWrappers( "GroupID" ) ."=".(postvalue_number("id"));79		$ug_connection->exec( $sql );80		81		echo printJSON( array('success' => true) );82		break;83	84	// @deprecated 85	// see ug_rights86	case 'saveRights':87		$error = '';88		if( postvalue('state') )89		{	90			$allRights = array();91			$sql = "select ". $ug_connection->addFieldWrappers( "GroupID" ) 92				.", ". $ug_connection->addFieldWrappers( "TableName" ) 93				.", ". $ug_connection->addFieldWrappers( "AccessMask" ) ." from ". $wGroupTableName;94			95			$qResult = $ug_connection->query( $sql );96			// don't use fetchAssoc! because of ORACLE and PostgreSQL97			while( $rightsRow = $qResult->fetchNumeric() )98			{99				$allRights[] = $rightsRow;100			}101			102			$wRightsTableName = $ug_connection->addTableWrappers( "Chat2ugrights" );103			104			$delGroupId = 0;105			$state = my_json_decode( postvalue('state') );106			// delete all extra permissions from db107			foreach($allRights as $i => $rightValue)108			{109				$groupIDInt = (int) $rightValue[0];110				111				if($groupIDInt == $delGroupId)112					continue;113					114				//delete all extra permissions for group115				if( !array_key_exists($groupIDInt, $state) )116				{117					$sql = "delete from ". $wRightsTableName 118						." where ". $ug_connection->addFieldWrappers( "GroupID" ) ."=". $groupIDInt;119					$ug_connection->exec( $sql );120				}121				//delete all extra permissions for table in group122				else if(!array_key_exists(GetTableId($data[1]), $state[$groupIDInt]))123				{124					$sql = "delete from ". $wRightsTableName 125						." where ". $ug_connection->addFieldWrappers( "GroupID" ) ."=". $groupIDInt 126						." and ". $ug_connection->addFieldWrappers( "TableName" ) ."=".$ug_connection->prepareString( html_special_decode($data[1]) );				127					$ug_connection->exec( $sql );128				}129			}130			131			$realTables = GetRealValues();132			foreach ($state as $groupId => $groupRights)133			{134				foreach ($groupRights as $table => $mask)135				{136					if( !array_key_exists($table, $realTables) )137						continue;138					139					$ins = true;140					foreach($allRights as $i => $rightValue)141					{	142						if($rightValue[0] == $groupId && $rightValue[1] == $realTables[$table])	143						{144							$ins = false;145							if($data[2]!= $mask)146							{147								$sql ="update". $wRightsTableName 148									." set ". $ug_connection->addFieldWrappers( "AccessMask" ) ."=". $ug_connection->prepareString( $mask )149									." where ". $ug_connection->addFieldWrappers( "GroupID" ) ."=". $groupId 150									." and ". $ug_connection->addFieldWrappers( "TableName" ) ."=". $ug_connection->prepareString( html_special_decode($realTables[$table]) );151								$ug_connection->exec( $sql );152							}153						}154					}155					if($ins)156					{157						$sql = "insert into ". $wRightsTableName158							." (". $ug_connection->addFieldWrappers( "TableName" ) 159							.", ". $ug_connection->addFieldWrappers( "GroupID" ) 160							.", ". $ug_connection->addFieldWrappers( "AccessMask" ) .") " 161							."values (". $ug_connection->prepareString(html_special_decode($realTables[$table])) .", ". $groupId .", ". $ug_connection->prepareString($mask)  .")";162						$ug_connection->exec( $sql );163					}164					165					$error = $ug_connection->lastError();166				}167			}168		}169		170		getJSONResult($error);171		break;172}173 174function GetTableId($name)175{176	$tbls = GetRealValues();177	for($i = 0;$i < count($tbls); $i++)178	{179		if($tbls[$i] == $name)180			return $i;181	}182	return -1;183}184 185/**186 * GetRealValues187 * Form array with real users or tables names188 * @return {array} array of reaf names189 */190function GetRealValues()191{192	$result = array();193	if(postvalue('realValues'))194		$realValues = my_json_decode(postvalue('realValues'));195		foreach ($realValues as $key =>$value)196			$result[$key] = $value;197	return $result;198}199 200/**201 * getJSONResult202 * Form result as a JSON object according of errors203 * @param {string} list of errors204 */205function getJSONResult($error)206{207	$result['success'] = $error == '';208	$result['error'] = $error;	209	echo printJSON($result);210}