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( "'" , "'" , $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( "'", "'" , $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( "'", "'", $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("/&#([0-9]+);/s", "&#\\1;", $t );
}
return $t;
}
}
?>