HEX
Server: Apache/2.4.59 (Debian)
System: Linux skycube.cz 4.19.0-25-amd64 #1 SMP Debian 4.19.289-2 (2023-08-08) x86_64
User: ilya (534)
PHP: 7.3.31-1~deb10u7
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: /var/www/ilya/data/www/kamforum.ru/sources/classes/class_custom_fields.php
<?php
/*
+--------------------------------------------------------------------------
|   Invision Power Board v2.1.5
|   =============================================
|   by Matthew Mecham
|   (c) 2001 - 2004 Invision Power Services, Inc.
|   http://www.invisionpower.com
|   =============================================
|   Web: http://www.invisionboard.com
|   Time: Sun, 09 Oct 2005 11:51:26 GMT
|   Release: 1a47e28f0443faa9f14d0c0a45151e54
|   Licence Info: http://www.invisionboard.com/?license
+---------------------------------------------------------------------------
|
|   > CUSTOM PROFILE FIELD CLASS
|   > Module written by Matt Mecham
|   > Date started: 7th April 2004 ( hairdresser was closed today :( )
|
|	> Module Version Number: 1.0.0
|   > DBA Checked: Wed 19 May 2004
+--------------------------------------------------------------------------
| EXAMPLE:
| 
| $profile->cache_data  = $this->ipsclass->cache['profilefields'];
| $profile->member_id   = $this->ipsclass->member['id']; // Viewing member
| $profile->mem_data_id = $data['id']; // Get data for this member
| $profile->init_data();
|
+--------------------------------------------------------------------------
*/

class custom_fields
{
	var $member_id   = 0;
	var $admin       = 0;
	var $supmod      = 0;
	var $mem_data_id = 0;
	var $init        = 0;
	var $in_fields    = array();
	var $out_fields   = array();
	var $out_chosen   = array();
	var $tmp_fields   = array();
	var $cache_data   = "";
	var $member_data  = array();
	var $field_names  = array();
	var $field_desc   = array();
	var $kill_html    = 1;
	var $error_fields = array( 'toobig' => array(), 'empty' => array(), 'invalid' => array() );
	
	var $DB           = "";
	
	/*-------------------------------------------------------------------------*/
	// CONSTRUCTOR
	/*-------------------------------------------------------------------------*/
	
	function custom_fields( &$DB )
	{
		$this->DB = &$DB;
	}
	
	/*-------------------------------------------------------------------------*/
	// Init (check, load cache)
	/*-------------------------------------------------------------------------*/
	
	function init_data()
	{
		if ( ! $this->init )
		{
			//-----------------------------------------
			// Cache data...
			//-----------------------------------------
			
			if ( ! is_array( $this->cache_data ) )
			{
				$this->DB->simple_construct( array( 'select' => '*', 'from' => 'pfields_data', 'order' => 'pf_position' ) );
				$this->DB->simple_exec();
				
				while ( $r = $this->DB->fetch_row() )
				{
					$this->cache_data[ $r['pf_id'] ] = $r;
				}
			}
			
			//-----------------------------------------
			// Get names...
			//-----------------------------------------
			
			if ( is_array($this->cache_data) and count($this->cache_data) )
			{
				foreach( $this->cache_data as $id => $data )
				{
					$this->field_names[ $id ] = $data['pf_title'];
					$this->field_desc[ $id ]  = $data['pf_desc'];
				}
			}
		}
		
		//-----------------------------------------
		// Clean up on aisle #4
		//-----------------------------------------
		
		$this->out_fields = array();
		$this->tmp_fields = array();
		$this->out_chosen = array();
		
		//-----------------------------------------
		// Get member...
		//-----------------------------------------
		
		if ( ! count( $this->member_data ) and $this->mem_data_id )
		{
			$this->member_data = $this->DB->simple_exec_query( array( 'select' => '*', 'from' => 'pfields_content', 'where' => 'member_id='.intval($this->mem_data_id) ) );
		}
		
		if ( count( $this->member_data ) )
		{
			$this->mem_data_id = $this->member_data['id'];
		}
		
		//-----------------------------------------
		// Parse into in fields
		//-----------------------------------------
		
		if ( is_array($this->cache_data) and count( $this->cache_data ) )
		{
			foreach( $this->cache_data as $id => $data )
			{
				$this->in_fields[ $id ] = $this->member_data['field_'.$id];
			}
		}
		
		$this->init = 1;
	}
	
	/*-------------------------------------------------------------------------*/
	// Generate for saving
	/*-------------------------------------------------------------------------*/
	
	function parse_to_save( $register=0, $post='field_' )
	{
		if ( is_array($this->cache_data) and count($this->cache_data) )
		{
			foreach( $this->cache_data as $i => $row )
			{
				if ( ! $register )
				{
					//-----------------------------------------
					// Admin / mod only?
					//-----------------------------------------
					
					if ( $row['pf_admin_only'] )
					{
						if ( ! $this->admin AND ! $this->supmod )
						{
							continue;
						}
					}
					
					//-----------------------------------------
					// Can edit? (member, admin, mod)
					//-----------------------------------------
					
					if ( ! $row['pf_member_edit'] )
					{
						if ( ! $this->admin AND ! $this->supmod )
						{
							continue;
						}
					}
				}
				else
				{
					//-----------------------------------------
					// Show on reg?
					//-----------------------------------------
					
					if ( ! $row['pf_show_on_reg'] )
					{
						continue;
					}
				}
				
				$this->tmp_fields[ $i ] = $row;
			}
		}
		
		//-----------------------------------------
		// Grab editable fields...
		//-----------------------------------------
		
		if ( is_array($this->tmp_fields) and count($this->tmp_fields) )
		{
			foreach( $this->tmp_fields as $i => $row )
			{
				//-----------------------------------------
				// Too big?
				//-----------------------------------------
				
				if ( $this->cache_data[$i]['pf_max_input'] and strlen( $_POST[ $post.$i ] ) > $this->cache_data[$i]['pf_max_input'] )
				{
					$this->error_fields['toobig'][] = $row;
				}
				
				//-----------------------------------------
				// Required and NULL?
				//-----------------------------------------
				
				if ( $this->cache_data[$i]['pf_not_null'] and trim($_POST[ $post.$i ]) == "" )
				{
					$this->error_fields['empty'][] = $row;
				}
				
				//-----------------------------------------
				// Invalid format?
				//-----------------------------------------
				
				if ( trim($this->cache_data[$i]['pf_input_format']) and $_POST[ $post.$i ] )
				{
					$regex = str_replace( 'n', '\\d', preg_quote( $this->cache_data[$i]['pf_input_format'], "#" ) );
					$regex = str_replace( 'a', '\\w', $regex );
					
					if ( ! preg_match( "#^".$regex."$#i", trim($_POST[ $post.$i ]) ) )
					{
						$this->error_fields['invalid'][] = $row;
					}
				}
				
				$this->out_fields[ $post.$i ] = $this->method_format_text_to_save( $_POST[ $post.$i ] );
			}
		}
	
	}
	
	/*-------------------------------------------------------------------------*/
	// Generate for viewing
	/*-------------------------------------------------------------------------*/
	
	function parse_to_view( $check_topic_format=0 )
	{
		if ( is_array( $this->cache_data ) and count( $this->cache_data ) )
		{
			foreach( $this->cache_data as $i => $row )
			{
				//-----------------------------------------
				// Admin / mod only?
				//-----------------------------------------
				
				if ( $row['pf_admin_only'] )
				{
					if ( ! $this->admin AND ! $this->supmod )
					{
						continue;
					}
				}
				
				//-----------------------------------------
				// Private field (member, admin, mod)
				//-----------------------------------------
				
				if ( $row['pf_member_hide'] )
				{
					$pass = 0;
					
					if ( $this->admin )
					{
						$pass = 1;
					}
					else if ( $this->supmod )
					{
						$pass = 1;
					}
					else if ( $this->member_id and ( $this->member_id == $this->mem_data_id ) )
					{
						$pass = 1;
					}
					else
					{
						$pass = 0;
					}
					
					if ( ! $pass )
					{
						continue;
					}
				}
				
				//-----------------------------------------
				// Topic format?
				//-----------------------------------------
				
				if ( $check_topic_format )
				{
					if ( ! $row['pf_topic_format'] )
					{
						continue;
					}
				}
				
				$this->tmp_fields[ $i ] = $row;
			}
		}
		
		$this->method_parse_out_fields('view');
	}
	
	/*-------------------------------------------------------------------------*/
	// Generate for viewing on reg form
	/*-------------------------------------------------------------------------*/
	
	function parse_to_register()
	{
		if ( is_array( $this->cache_data ) and count( $this->cache_data ) )
		{
			foreach( $this->cache_data as $i => $row )
			{
				//-----------------------------------------
				// Show on reg?
				//-----------------------------------------
				
				if ( ! $row['pf_show_on_reg'] )
				{
					continue;
				}
				
				$this->tmp_fields[ $i ] = $row;
			}
		}
		
		$this->method_parse_out_fields('reg');
	}
	
	/*-------------------------------------------------------------------------*/
	// Generate for editing
	/*-------------------------------------------------------------------------*/
	
	function parse_to_edit()
	{
		if ( is_array($this->cache_data) and count($this->cache_data) )
		{
			foreach( $this->cache_data as $i => $row )
			{
				//-----------------------------------------
				// Admin / mod only?
				//-----------------------------------------
				
				if ( $row['pf_admin_only'] )
				{
					if ( ! $this->admin AND ! $this->supmod )
					{
						continue;
					}
				}
				
				//-----------------------------------------
				// Private field (member, admin, mod)
				//-----------------------------------------
				
				if ( $row['pf_member_hide'] )
				{
					$pass = 0;
					
					if ( $this->admin )
					{
						$pass = 1;
					}
					else if ( $this->mod )
					{
						$pass = 1;
					}
					else if ( $this->member_id )
					{
						$pass = 1;
					}
					
					if ( ! $pass )
					{
						continue;
					}
				}
				
				//-----------------------------------------
				// Can edit? (member, admin, mod)
				//-----------------------------------------
				
				if ( ! $row['pf_member_edit'] )
				{
					if ( ! $this->admin AND ! $this->supmod )
					{
						continue;
					}
				}
				
				$this->tmp_fields[ $i ] = $row;
			}
		}
		
		$this->method_parse_out_fields('edit');
	}
	
	/*-------------------------------------------------------------------------*/
	// Method: Parse out_fields
	/*-------------------------------------------------------------------------*/
	
	function method_parse_out_fields($type='view')
	{
		foreach( $this->tmp_fields as $i => $row )
		{
			if ($row['pf_type'] == 'drop')
			{ 
				$carray = explode( '|', trim( $row['pf_content'] ) );
				
				foreach( $carray as $entry )
				{
					$value = explode( '=', $entry );
					
					$ov = trim($value[0]);
					$td = trim($value[1]);
					
					if ( $type == 'reg' )
					{
						$this->out_fields[ $row['pf_id'] ] .= "<option value='$ov'>$td</option>\n";
					}
					else if ( $type == 'view' )
					{
						if ( $this->in_fields[ $row['pf_id'] ] == $ov)
						{
							$this->out_fields[ $row['pf_id'] ] = $td;
							$this->out_chosen[ $row['pf_id'] ] = $ov;
						}
						else if ( $this->in_fields[ $row['pf_id'] ] == "" )
						{
						   $this->out_fields[ $row['pf_id'] ] = '';
						   $this->out_chosen[ $row['pf_id'] ] = '';
						}
					}
					else if ( $type == 'edit' )
					{ 
						if ( $this->in_fields[ $row['pf_id'] ] == $ov and $this->in_fields[ $row['pf_id'] ])
						{
							$this->out_fields[ $row['pf_id'] ] .= "<option value='$ov' selected='selected'>$td</option>\n";
						}
						else
						{
							$this->out_fields[ $row['pf_id'] ] .= "<option value='$ov'>$td</option>\n";
						}
					}
				}
			}
			else
			{
				if ( $type == 'view' )
				{
					$this->out_fields[ $row['pf_id'] ] = $this->method_make_safe_for_view( $this->in_fields[ $row['pf_id'] ] );
				}
				else
				{
					$this->out_fields[ $row['pf_id'] ] = $this->method_make_safe_for_form( $this->in_fields[ $row['pf_id'] ] );
				}
			}
		}
	}
	
	/*-------------------------------------------------------------------------*/
	// Method: format text to save
	/*-------------------------------------------------------------------------*/
	
	function method_format_text_to_save( $t )
	{
		$t = str_replace( "<br>"  , "\n", $t );
		$t = str_replace( "<br />", "\n", $t );
		$t = str_replace( "&#39;" , "'" , $t );
		
		if ( @get_magic_quotes_gpc() )
		{
			$t = stripslashes($t);
		}
		
		return $t;
	}
	
	/*-------------------------------------------------------------------------*/
	// Method: format_field_for_edit
	/*-------------------------------------------------------------------------*/
	
	function method_format_content_for_edit( $c )
	{
		return str_replace( '|', "\n", $c );
	}
	
	/*-------------------------------------------------------------------------*/
	// Method: format_field_for_topic_view
	/*-------------------------------------------------------------------------*/
	
	function method_format_field_for_topic_view( $i )
	{
		$out = $this->out_fields[$i];
		
		$tmp = $this->cache_data[$i]['pf_topic_format'];
		
		$tmp = str_replace( '{title}'  , $this->field_names[$i], $tmp );
		$tmp = str_replace( '{key}'    , $this->out_chosen[$i] , $tmp );
		$tmp = str_replace( '{content}', $out                  , $tmp );
		
		return $tmp;
	}
	
	/*-------------------------------------------------------------------------*/
	// Method: format_field_for_save
	/*-------------------------------------------------------------------------*/
	
	function method_format_content_for_save( $c )
	{
		$c = str_replace( "\r"   , "\n", $c );
		$c = str_replace( "&#39;", "'" , $c );
		return str_replace( "\n", '|', str_replace( "\n\n", "\n", trim($c) ) );
	}
	
	/*-------------------------------------------------------------------------*/
	// Make safe for form viewing
	/*-------------------------------------------------------------------------*/
	
	function method_make_safe_for_form( $t )
	{
		return str_replace( "'", "&#39;", $t );
	}
	
	/*-------------------------------------------------------------------------*/
	// Make safe for other viewing (profile, etc)
	/*-------------------------------------------------------------------------*/
	
	function method_make_safe_for_view( $t )
	{
		if ( $this->kill_html )
		{
			$t = htmlspecialchars( $t );
			$t = preg_replace("/&amp;#([0-9]+);/s", "&#\\1;", $t );
		}
		
		return $t;
	}
	
	

}


?>