1510 lines
44 KiB
PHP
1510 lines
44 KiB
PHP
<?php
|
|
|
|
/*
|
|
+--------------------------------------------------------------------------
|
|
| Invision Power Board
|
|
| =============================================
|
|
| by Matthew Mecham
|
|
| (c) 2001 - 2006 Invision Power Services, Inc.
|
|
| http://www.invisionpower.com
|
|
| =============================================
|
|
| Web: http://www.invisionboard.com
|
|
| Licence Info: http://www.invisionboard.com/?license
|
|
+---------------------------------------------------------------------------
|
|
| > $Date: 2006-12-04 15:32:28 -0500 (Mon, 04 Dec 2006) $
|
|
| > $Revision: 759 $
|
|
| > $Author: bfarber $
|
|
+---------------------------------------------------------------------------
|
|
|
|
|
| > Administration Module
|
|
| > Module written by Matt Mecham
|
|
| > Date started: 27th January 2004
|
|
|
|
|
| > Module Version Number: 1.0.0
|
|
| > DBA Checked: Mon 24th May 2004
|
|
+--------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! defined( 'IN_ACP' ) )
|
|
{
|
|
print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded 'admin.php'.";
|
|
exit();
|
|
}
|
|
|
|
class ad_emoticons {
|
|
|
|
var $functions = "";
|
|
var $html;
|
|
|
|
/**
|
|
* Section title name
|
|
*
|
|
* @var string
|
|
*/
|
|
var $perm_main = "lookandfeel";
|
|
|
|
/**
|
|
* Section title name
|
|
*
|
|
* @var string
|
|
*/
|
|
var $perm_child = "emoticons";
|
|
|
|
/**
|
|
* Allowed file types
|
|
*/
|
|
var $allowed_files = array( 'png', 'jpeg', 'jpg', 'gif' );
|
|
|
|
function auto_run()
|
|
{
|
|
//-----------------------------------------
|
|
// Require and RUN !! THERES A BOMB
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->admin->page_detail = "";
|
|
$this->ipsclass->admin->page_title = "Emoticons Manager";
|
|
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Emoticons Manager' );
|
|
|
|
$this->html = $this->ipsclass->acp_load_template('cp_skin_lookandfeel');
|
|
|
|
//-----------------------------------------
|
|
// What to do...
|
|
//-----------------------------------------
|
|
|
|
switch($this->ipsclass->input['code'])
|
|
{
|
|
//-----------------------------------------
|
|
// Emu?
|
|
//-----------------------------------------
|
|
|
|
case 'emo':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' );
|
|
$this->emoticon_start();
|
|
break;
|
|
|
|
case 'emo_packsplash':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':export' );
|
|
$this->emoticon_pack_splash();
|
|
break;
|
|
|
|
case 'emo_packexport':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':export' );
|
|
$this->emoticon_pack_export();
|
|
break;
|
|
|
|
case 'emo_packimport':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':import' );
|
|
$this->emoticon_pack_import();
|
|
break;
|
|
|
|
case 'emo_manage':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' );
|
|
$this->emoticon_manage();
|
|
break;
|
|
|
|
case 'emo_doedit':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' );
|
|
$this->emoticon_edit();
|
|
break;
|
|
|
|
case 'emo_doadd':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' );
|
|
$this->emoticon_add();
|
|
break;
|
|
|
|
case 'emo_remove':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':remove' );
|
|
$this->emoticon_remove();
|
|
break;
|
|
|
|
case 'emo_setadd':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' );
|
|
$this->emoticon_setalter($type='add');
|
|
break;
|
|
|
|
case 'emo_setedit':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' );
|
|
$this->emoticon_setalter($type='edit');
|
|
break;
|
|
|
|
case 'emo_setremove':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':remove' );
|
|
$this->emoticon_setremove();
|
|
break;
|
|
|
|
case 'emo_upload':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':upload' );
|
|
$this->emoticon_upload();
|
|
|
|
default:
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' );
|
|
$this->emoticon_start();
|
|
break;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Set add
|
|
//-----------------------------------------
|
|
|
|
function emoticon_setalter($type='add')
|
|
{
|
|
$name = preg_replace( "/[^a-zA-Z0-9\-_]/", "", $this->ipsclass->input['emoset'] );
|
|
|
|
if ($name == "")
|
|
{
|
|
$this->ipsclass->main_msg = "No valid folder name was entered, please try again using only alphanumerics (A-Z, a-z, 0-9)";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Safe mode?
|
|
//-----------------------------------------
|
|
|
|
if ( SAFE_MODE_ON )
|
|
{
|
|
$this->ipsclass->main_msg = "SAFE MODE DETECTED: IPB cannot create or edit folders for you, please create or edit the folder manually using FTP in 'style_emoticons'";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Directory exists?
|
|
//-----------------------------------------
|
|
|
|
if ( file_exists( CACHE_PATH.'style_emoticons/'.$name ) )
|
|
{
|
|
$this->ipsclass->main_msg = "'style_emoticons/$name' already exists, please choose another name.";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
if ( $type == 'add' )
|
|
{
|
|
//-----------------------------------------
|
|
// Create directory?
|
|
//-----------------------------------------
|
|
|
|
if ( @mkdir( CACHE_PATH.'style_emoticons/'.$name, 0777 ) )
|
|
{
|
|
@chmod( CACHE_PATH.'style_emoticons/'.$name, 0777 );
|
|
|
|
$dh = opendir( CACHE_PATH.'style_emoticons/default' );
|
|
|
|
while ( FALSE !== ( $file = readdir( $dh ) ) )
|
|
{
|
|
if (($file != ".") && ($file != ".."))
|
|
{
|
|
@copy( CACHE_PATH.'style_emoticons/default/'.$file, CACHE_PATH.'style_emoticons/'.$name.'/'.$file );
|
|
@chmod( CACHE_PATH.'style_emoticons/'.$name.'/'.$file, 0777 );
|
|
}
|
|
}
|
|
|
|
closedir( $dh );
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'emoticons', 'where' => "emo_set='default'" ) );
|
|
$outer = $this->ipsclass->DB->simple_exec();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row($outer) )
|
|
{
|
|
$this->ipsclass->DB->do_insert( "emoticons", array( 'clickable' => $r['clickable'], 'typed' => $r['typed'], 'emo_set' => $name, 'image' => $r['image'] ) );
|
|
}
|
|
|
|
$this->ipsclass->main_msg = "New Folder Added";
|
|
$this->emoticon_start();
|
|
}
|
|
else
|
|
{
|
|
$this->ipsclass->main_msg = "IPB cannot create a new folder for you, please create the folder manually using FTP in 'style_emoticons'";
|
|
$this->emoticon_start();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( ! $this->ipsclass->input['id'] )
|
|
{
|
|
$this->ipsclass->main_msg = "Missing directory name, please try again.";
|
|
$this->emoticon_start();
|
|
return;
|
|
}
|
|
|
|
if( $this->ipsclass->input['id'] == 'default' )
|
|
{
|
|
$this->ipsclass->main_msg = "You cannot rename the default folder.";
|
|
$this->emoticon_start();
|
|
return;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Rename directory?
|
|
//-----------------------------------------
|
|
|
|
if ( @rename( CACHE_PATH.'style_emoticons/'.$this->ipsclass->input['id'], CACHE_PATH.'style_emoticons/'.$name ) )
|
|
{
|
|
if ( file_exists( CACHE_PATH.'style_emoticons/'.$name ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Update the emos
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->DB->do_update( 'emoticons', array( 'emo_set' => $name ), "emo_set='".$this->ipsclass->input['id']."'" );
|
|
}
|
|
|
|
$this->emoticon_rebuildcache();
|
|
|
|
//-----------------------------------------
|
|
// Update the skins using this set
|
|
//-----------------------------------------
|
|
|
|
$rebuild_sets = array();
|
|
|
|
$this->ipsclass->DB->build_query( array( 'select' => 'set_skin_set_id', 'from' => 'skin_sets', 'where' => "set_emoticon_folder='{$this->ipsclass->input['id']}'" ) );
|
|
$outer = $this->ipsclass->DB->exec_query();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row($outer) )
|
|
{
|
|
$this->ipsclass->DB->do_update( 'skin_sets', array( 'set_emoticon_folder' => $name ), 'set_skin_set_id='.$r['set_skin_set_id'] );
|
|
$rebuild_sets[] = $r['set_skin_set_id'];
|
|
}
|
|
|
|
if( count($rebuild_sets) )
|
|
{
|
|
$this->ipsclass->cache_func->_rebuild_all_caches( $rebuild_sets );
|
|
}
|
|
|
|
$this->ipsclass->main_msg = "Folder renamed.";
|
|
$this->emoticon_start();
|
|
}
|
|
else
|
|
{
|
|
$this->ipsclass->main_msg = "IPB cannot rename this folder for you.";
|
|
$this->emoticon_start();
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Edit
|
|
//-----------------------------------------
|
|
|
|
function emoticon_edit()
|
|
{
|
|
if ($this->ipsclass->input['id'] == "")
|
|
{
|
|
$this->ipsclass->main_msg = "No emoticon group ID was passed";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
foreach ($this->ipsclass->input as $key => $value)
|
|
{
|
|
if ( preg_match( "/^emo_id_(\d+)$/", $key, $match ) )
|
|
{
|
|
if ( $match[0] )
|
|
{
|
|
$typed = '';
|
|
|
|
if( $this->ipsclass->input['id'] == 'default' )
|
|
{
|
|
$typed = str_replace( '"', "", $this->ipsclass->input['emo_type_'.$match[1]] );
|
|
$typed = str_replace( '\', "", $typed );
|
|
}
|
|
|
|
$click = $this->ipsclass->input[ 'emo_click_'.$match[1] ];
|
|
|
|
if ( $match[1] )
|
|
{
|
|
if( $typed )
|
|
{
|
|
$orig_typed = $this->ipsclass->DB->build_and_exec_query( array( 'select' => 'typed', 'from' => 'emoticons', 'where' => 'id='.intval($match[1]) ) );
|
|
|
|
$this->ipsclass->DB->do_update( 'emoticons', array( 'clickable' => intval($click), 'typed' => $typed ), 'id='.intval($match[1]) );
|
|
|
|
$this->ipsclass->DB->do_update( 'emoticons', array( 'typed' => $typed ), "typed='".$orig_typed['typed']."'" );
|
|
}
|
|
else
|
|
{
|
|
$this->ipsclass->DB->do_update( 'emoticons', array( 'clickable' => intval($click) ), 'id='.intval($match[1]) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->emoticon_rebuildcache();
|
|
|
|
$this->ipsclass->main_msg = "Emoticons updated";
|
|
|
|
$this->emoticon_manage();
|
|
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Remove
|
|
//-----------------------------------------
|
|
|
|
function emoticon_remove()
|
|
{
|
|
if ($this->ipsclass->input['id'] == "")
|
|
{
|
|
$this->ipsclass->main_msg = "No emoticon group ID was passed";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
if ($this->ipsclass->input['id'] != "default" )
|
|
{
|
|
$this->ipsclass->main_msg = "You may only add, edit, and remove emoticons from the default set";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
if ($this->ipsclass->input['eid'] == "")
|
|
{
|
|
$this->ipsclass->main_msg = "No emoticon ID was passed";
|
|
$this->emoticon_manage();
|
|
}
|
|
|
|
$emo_info = $this->ipsclass->DB->build_and_exec_query( array( 'select' => 'typed', 'from' => 'emoticons', 'where' => "id=".intval($this->ipsclass->input['eid']) ) );
|
|
|
|
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'emoticons', 'where' => "typed='".$emo_info['typed']."'" ) );
|
|
|
|
$this->emoticon_rebuildcache();
|
|
|
|
$this->ipsclass->main_msg = "Emoticon removed";
|
|
|
|
$this->emoticon_manage();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON ADD
|
|
//-----------------------------------------
|
|
|
|
function emoticon_add()
|
|
{
|
|
if ($this->ipsclass->input['id'] == "")
|
|
{
|
|
$this->ipsclass->main_msg = "No emoticon group ID was passed";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
if ($this->ipsclass->input['id'] != "default" )
|
|
{
|
|
$this->ipsclass->main_msg = "You may only add, edit, and remove emoticons from the default set";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
if ($this->ipsclass->input['id'] != "default")
|
|
{
|
|
$this->ipsclass->main_msg = "You may only add, edit, and remove emoticons from the default set.";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
foreach ($this->ipsclass->input as $key => $value)
|
|
{
|
|
if ( preg_match( "/^emo_type_(\d+)$/", $key, $match ) )
|
|
{
|
|
if ( isset( $this->ipsclass->input[$match[0]]) )
|
|
{
|
|
$typed = str_replace( '"', "", $this->ipsclass->input[$match[0]] );
|
|
$click = $this->ipsclass->input['emo_click_'.$match[1] ];
|
|
$add = $this->ipsclass->input['emo_add_'.$match[1] ];
|
|
$image = $this->ipsclass->input['emo_image_'.$match[1] ];
|
|
$set = trim($this->ipsclass->input['id']);
|
|
|
|
$typed = str_replace( '\', "", $typed );
|
|
|
|
if ( $this->ipsclass->input['addall'] )
|
|
{
|
|
$add = 1;
|
|
}
|
|
|
|
if ( $add and $typed and $image )
|
|
{
|
|
$this->ipsclass->DB->do_insert( 'emoticons', array( 'clickable' => intval($click), 'typed' => $typed, 'image' => $image, 'emo_set' => $set ) );
|
|
|
|
$emodirs = array( 0 => '');
|
|
|
|
$dh = opendir( CACHE_PATH.'style_emoticons' );
|
|
|
|
while ( FALSE !== ( $file = readdir( $dh ) ) )
|
|
{
|
|
if (($file != ".") && ($file != ".."))
|
|
{
|
|
if ( is_dir(CACHE_PATH.'style_emoticons/'.$file) )
|
|
{
|
|
if( $file == 'default' )
|
|
{
|
|
$emodirs[0] = $file;
|
|
}
|
|
else
|
|
{
|
|
$emodirs[] = $file;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
closedir( $dh );
|
|
|
|
foreach( $emodirs as $directory )
|
|
{
|
|
if( $directory == $set )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$this->ipsclass->DB->do_insert( 'emoticons', array( 'clickable' => intval($click), 'typed' => $typed, 'image' => $image, 'emo_set' => $directory ) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->emoticon_rebuildcache();
|
|
|
|
$this->ipsclass->main_msg = "Emoticons updated";
|
|
|
|
$this->emoticon_manage();
|
|
}
|
|
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Upload
|
|
//-----------------------------------------
|
|
|
|
function emoticon_upload()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$overwrite = 1;
|
|
|
|
//-----------------------------------------
|
|
// Which folders?
|
|
//-----------------------------------------
|
|
|
|
$directories = array();
|
|
$first_dir = '';
|
|
|
|
foreach ($this->ipsclass->input as $key => $value)
|
|
{
|
|
if ( preg_match( "/^dir_(.*)$/", $key, $match ) )
|
|
{
|
|
if ( $this->ipsclass->input[$match[0]] == 1 )
|
|
{
|
|
$directories[] = $match[1];
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! count( $directories ) )
|
|
{
|
|
$this->ipsclass->main_msg = "You must choose a folder other than 'default' to upload into.";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Excuse me, can you shift?
|
|
//-----------------------------------------
|
|
|
|
if ( ! in_array( 'default', $directories ) )
|
|
{
|
|
array_push( $directories, 'default' );
|
|
}
|
|
|
|
$first_dir = array_shift( $directories );
|
|
|
|
$emodirs = array( 0 => '');
|
|
|
|
$dh = opendir( CACHE_PATH.'style_emoticons' );
|
|
|
|
while ( FALSE !== ( $file = readdir( $dh ) ) )
|
|
{
|
|
if ( ($file != ".") && ($file != "..") )
|
|
{
|
|
if ( is_dir( CACHE_PATH.'style_emoticons/'.$file ) )
|
|
{
|
|
if( $file == 'default' )
|
|
{
|
|
$emodirs[0] = $file;
|
|
}
|
|
else
|
|
{
|
|
$emodirs[] = $file;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
closedir( $dh );
|
|
|
|
//-----------------------------------------
|
|
// Loopy loo?
|
|
//-----------------------------------------
|
|
|
|
foreach( array( 1,2,3,4 ) as $i )
|
|
{
|
|
$field = 'upload_'.$i;
|
|
|
|
$FILE_NAME = $_FILES[$field]['name'];
|
|
$FILE_SIZE = $_FILES[$field]['size'];
|
|
$FILE_TYPE = $_FILES[$field]['type'];
|
|
|
|
//-----------------------------------------
|
|
// Naughty Opera adds the filename on the end of the
|
|
// mime type - we don't want this.
|
|
//-----------------------------------------
|
|
|
|
$FILE_TYPE = preg_replace( "/^(.+?);.*$/", "\\1", $FILE_TYPE );
|
|
|
|
//-----------------------------------------
|
|
// Naughty Mozilla likes to use "none" to indicate an empty upload field.
|
|
// I love universal languages that aren't universal.
|
|
//-----------------------------------------
|
|
|
|
if ( $_FILES[$field]['name'] == "" or ! $_FILES[$field]['name'] or ($_FILES[$field]['name'] == "none") )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Make sure it's not a NAUGHTY file
|
|
//-----------------------------------------
|
|
|
|
$file_extension = preg_replace( "#^.*\.(.+?)$#si", "\\1", strtolower( $_FILES[ $field ]['name'] ) );
|
|
|
|
if ( ! in_array( $file_extension, $this->allowed_files ) )
|
|
{
|
|
$this->ipsclass->main_msg = "You can only upload image files (jpeg, jpg, gif and png)";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Copy the upload to the uploads directory
|
|
//-----------------------------------------
|
|
|
|
if ( ! @move_uploaded_file( $_FILES[ $field ]['tmp_name'], CACHE_PATH.'style_emoticons/'.$first_dir."/".$FILE_NAME) )
|
|
{
|
|
$this->ipsclass->main_msg = "The upload failed, sorry!";
|
|
$this->emoticon_start();
|
|
}
|
|
else
|
|
{
|
|
@chmod( CACHE_PATH.'style_emoticons/'.$first_dir."/".$FILE_NAME, 0777 );
|
|
|
|
//-----------------------------------------
|
|
// Copy to other folders
|
|
//-----------------------------------------
|
|
|
|
if ( is_array( $directories ) and count( $directories ) )
|
|
{
|
|
foreach ( $directories as $newdir )
|
|
{
|
|
if ( file_exists( CACHE_PATH.'style_emoticons/'.$newdir."/".$FILE_NAME ) )
|
|
{
|
|
if ( $overwrite != 1 OR $newdir == 'default' )
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ( @copy( CACHE_PATH.'style_emoticons/'.$first_dir."/".$FILE_NAME, CACHE_PATH.'style_emoticons/'.$newdir."/".$FILE_NAME ) )
|
|
{
|
|
@chmod( CACHE_PATH.'style_emoticons/'.$newdir."/".$FILE_NAME, 0777 );
|
|
}
|
|
}
|
|
}
|
|
|
|
// Let's make sure this 'image' is available in all directories too
|
|
if ( is_array( $emodirs ) and count( $emodirs ) )
|
|
{
|
|
foreach ( $emodirs as $newdir )
|
|
{
|
|
if ( file_exists( CACHE_PATH.'style_emoticons/'.$newdir."/".$FILE_NAME ) )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if( @copy( CACHE_PATH.'style_emoticons/'.$first_dir."/".$FILE_NAME, CACHE_PATH.'style_emoticons/'.$newdir."/".$FILE_NAME ) )
|
|
{
|
|
@chmod( CACHE_PATH.'style_emoticons/'.$newdir."/".$FILE_NAME, 0777 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->ipsclass->main_msg = "Uploads complete!";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Start
|
|
//-----------------------------------------
|
|
|
|
function emoticon_start()
|
|
{
|
|
if ( ! is_dir( CACHE_PATH. 'style_emoticons') )
|
|
{
|
|
$this->ipsclass->admin->error("Could not locate the emoticons directory - make sure the 'style_emoticons' path is set correctly");
|
|
$this->ipsclass->admin->output();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get emoticon count
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->DB->cache_add_query( 'admin_emo_count', array() );
|
|
$this->ipsclass->DB->cache_exec_query();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$emo_db[ $r['emo_set'] ] = $r;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get emoticon folders
|
|
//-----------------------------------------
|
|
|
|
$emodirs = array( 0 => '');
|
|
|
|
$dh = opendir( CACHE_PATH.'style_emoticons' );
|
|
|
|
while ( FALSE !== ( $file = readdir( $dh ) ) )
|
|
{
|
|
if (($file != ".") && ($file != ".."))
|
|
{
|
|
if ( is_dir(CACHE_PATH.'style_emoticons/'.$file) )
|
|
{
|
|
if( $file == 'default' )
|
|
{
|
|
$emodirs[0] = $file;
|
|
}
|
|
else
|
|
{
|
|
$emodirs[] = $file;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
closedir( $dh );
|
|
|
|
//-----------------------------------------
|
|
// Start output
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->html .= $this->html->emoticon_overview_wrapper_addform();
|
|
|
|
$row_html = "";
|
|
|
|
$i = 0;
|
|
$total = count($emodirs);
|
|
|
|
foreach( $emodirs as $dir )
|
|
{
|
|
$i++;
|
|
|
|
$data = array();
|
|
|
|
$files = $this->emoticon_get_folder_contents( $dir );
|
|
$data['count'] = intval( count($files) );
|
|
|
|
if( $dir == 'default' )
|
|
{
|
|
$data['line_image'] = '';
|
|
$data['link_text'] = "Manage Emoticons";
|
|
}
|
|
else
|
|
{
|
|
$data['link_text'] = "Set Clickable";
|
|
|
|
if( $i == $total )
|
|
{
|
|
$data['line_image'] = "<img src='{$this->ipsclass->skin_acp_url}/images/skin_line_l.gif' border='0' /> ";
|
|
}
|
|
else
|
|
{
|
|
$data['line_image'] = "<img src='{$this->ipsclass->skin_acp_url}/images/skin_line_t.gif' border='0' /> ";
|
|
}
|
|
}
|
|
|
|
if ( is_writeable( CACHE_PATH . '/style_emoticons/'.$dir ) )
|
|
{
|
|
if( $dir == 'default' )
|
|
{
|
|
$checked_def = "checked='checked' disabled='disabled' ";
|
|
}
|
|
else
|
|
{
|
|
$checked_def = "";
|
|
}
|
|
|
|
$data['icon'] = 'icon_can_write.gif';
|
|
$data['title'] = 'This folder is writeable and new emoticons can be added';
|
|
$data['checkbox'] = "<input type='checkbox' name='dir_{$dir}' {$checked_def}value='1' />";
|
|
}
|
|
else
|
|
{
|
|
$data['icon'] = 'icon_cannot_write.gif';
|
|
$data['title'] = 'This folder is NOT writeable and the CHMOD must be changed';
|
|
$data['checkbox'] = "-";
|
|
}
|
|
|
|
$data['dir'] = $dir;
|
|
$data['dir_count'] = intval($emo_db[ $dir ]['count']);
|
|
|
|
$row_html .= $this->html->emoticon_overview_row( $data );
|
|
}
|
|
|
|
$this->ipsclass->html .= $this->html->emoticon_overview_wrapper( $row_html );
|
|
|
|
$this->ipsclass->admin->page_detail = "You may add/edit or remove emoticons in this section.";
|
|
$this->ipsclass->admin->page_title = "Emoticon Control";
|
|
|
|
$this->ipsclass->admin->output();
|
|
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Remove set
|
|
//-----------------------------------------
|
|
|
|
function emoticon_setremove()
|
|
{
|
|
$this->ipsclass->admin->page_detail = "Remove an IPB emoticon pack.";
|
|
$this->ipsclass->admin->page_title = "Emoticon Management";
|
|
|
|
if ( ! $this->ipsclass->input['id'] )
|
|
{
|
|
$this->ipsclass->main_msg = "No emoticon set was passed.";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
if( $this->ipsclass->input['id'] == 'default' )
|
|
{
|
|
$this->ipsclass->main_msg = "You cannot rename the default folder.";
|
|
$this->emoticon_start();
|
|
return;
|
|
}
|
|
|
|
$this->ipsclass->admin->rm_dir( CACHE_PATH.'style_emoticons/'.$this->ipsclass->input['id'] );
|
|
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'emoticons', 'where' => "emo_set='{$this->ipsclass->input['id']}'" ) );
|
|
|
|
$this->emoticon_rebuildcache();
|
|
|
|
$this->ipsclass->main_msg = "Emoticon folder removed.";
|
|
$this->emoticon_start();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Import/Export Pack Splash
|
|
//-----------------------------------------
|
|
|
|
function emoticon_pack_splash()
|
|
{
|
|
$this->ipsclass->admin->page_detail = "Export or import IPB emoticon packs.";
|
|
$this->ipsclass->admin->page_title = "Emoticon Management";
|
|
$this->ipsclass->admin->nav[] = array( '', 'Import/Export Emoticon Packs' );
|
|
|
|
if ( ! is_dir( CACHE_PATH. 'style_emoticons') )
|
|
{
|
|
$this->ipsclass->admin->error("Could not locate the emoticons directory - make sure the 'style_emoticons' path is set correctly");
|
|
$this->ipsclass->admin->output();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get emoticon count
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->DB->cache_add_query( 'admin_emo_count', array() );
|
|
$this->ipsclass->DB->cache_exec_query();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$emo_db[ $r['emo_set'] ] = $r;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get emoticon folders
|
|
//-----------------------------------------
|
|
|
|
$emodirs = array();
|
|
$emodd = array();
|
|
|
|
$dh = opendir( CACHE_PATH.'style_emoticons' );
|
|
|
|
while ( FALSE !== ( $file = readdir( $dh ) ) )
|
|
{
|
|
if (($file != ".") && ($file != ".."))
|
|
{
|
|
if ( is_dir(CACHE_PATH.'style_emoticons/'.$file) )
|
|
{
|
|
$emodirs[] = $file;
|
|
$emodd[] = array( $file, $file );
|
|
}
|
|
}
|
|
}
|
|
closedir( $dh );
|
|
|
|
//-----------------------------------------
|
|
// EXPORT: Start table
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->adskin->td_header[] = array( " " , "60%" );
|
|
$this->ipsclass->adskin->td_header[] = array( " " , "40%" );
|
|
|
|
//-----------------------------------------
|
|
// EXPORT: Start output
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'emo_packexport' ),
|
|
2 => array( 'act' , 'emoticons' ),
|
|
4 => array( 'section', $this->ipsclass->section_code ),
|
|
) );
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Export an Emoticon Pack" );
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
|
|
"<b>Export which emoticon group?</b><div style='color:gray'>An IPB Emoticon Pack is an XMLarchive of the images and activation words (i.e. :smile:)</div>",
|
|
$this->ipsclass->adskin->form_dropdown( 'emo_set', $emodd )
|
|
) );
|
|
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Export");
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
|
|
|
|
//-----------------------------------------
|
|
// IMPORT: Start table
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->adskin->td_header[] = array( " " , "60%" );
|
|
$this->ipsclass->adskin->td_header[] = array( " " , "40%" );
|
|
|
|
//-----------------------------------------
|
|
// IMPORT: Start output
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'emo_packimport' ),
|
|
2 => array( 'act' , 'emoticons' ),
|
|
3 => array( 'MAX_FILE_SIZE', '10000000000' ),
|
|
4 => array( 'section', $this->ipsclass->section_code ),
|
|
) , "uploadform", " enctype='multipart/form-data'" );
|
|
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Import an Emoticon Pack" );
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
|
|
"<b>Import into which emoticon group?</b><div style='color:gray'>An IPB Emoticon Pack is an XMLarchive of the images and activation words (i.e. :smile:)</div>",
|
|
$this->ipsclass->adskin->form_dropdown( 'emo_set', $emodd )
|
|
) );
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
|
|
"<b><u>OR</u> Import into a new group named:</b><div style='color:gray'>Enter the name of the new emoticon group.</div>",
|
|
$this->ipsclass->adskin->form_input( 'new_emo_set' )
|
|
) );
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
|
|
"<b>Overwrite existing images and activation words?</b><div style='color:gray'>If yes, new images replace old</div>",
|
|
$this->ipsclass->adskin->form_yes_no( 'overwrite' )
|
|
) );
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
|
|
"<b>Upload XML Emoticon Archive</b><div style='color:gray'>Browse your computer for 'ipb_emoticons.xml' or 'ipb_emoticons.xml.gz'</div>",
|
|
$this->ipsclass->adskin->form_upload( )
|
|
) );
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Import");
|
|
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
|
|
|
|
|
|
$this->ipsclass->admin->output();
|
|
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON EXPORT! EXPORT! EX... oh, that's abort isn't it?
|
|
//-----------------------------------------
|
|
|
|
function emoticon_pack_export()
|
|
{
|
|
//-----------------------------------------
|
|
// Get xml mah-do-dah
|
|
//-----------------------------------------
|
|
|
|
require_once( KERNEL_PATH.'class_xml.php' );
|
|
|
|
$xml = new class_xml();
|
|
|
|
require_once( KERNEL_PATH.'class_xmlarchive.php' );
|
|
|
|
$xmlarchive = new class_xmlarchive();
|
|
|
|
//-----------------------------------------
|
|
// Checkdamoonah
|
|
//-----------------------------------------
|
|
|
|
if ( ! $this->ipsclass->input['emo_set'] )
|
|
{
|
|
$this->ipsclass->main_msg = "You must specify which emoticon group you wish to export";
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get emowticuns
|
|
//-----------------------------------------
|
|
|
|
$emo_db = array();
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'emoticons', 'where' => "emo_set='".$this->ipsclass->input['emo_set']."'" ) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$emo_db[ $r['image'] ] = $r;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get ;) :D folders
|
|
//-----------------------------------------
|
|
|
|
$emodirs = array();
|
|
$emodd = array();
|
|
|
|
$dh = opendir( CACHE_PATH.'style_emoticons/'.$this->ipsclass->input['emo_set'] );
|
|
|
|
while ( FALSE !== ( $file = readdir( $dh ) ) )
|
|
{
|
|
if (($file != ".") && ($file != ".."))
|
|
{
|
|
if ( $emo_db[ $file ] != "" )
|
|
{
|
|
$files_to_add[] = CACHE_PATH.'style_emoticons/'.$this->ipsclass->input['emo_set'].'/'.$file;
|
|
}
|
|
}
|
|
}
|
|
|
|
closedir( $dh );
|
|
|
|
//-----------------------------------------
|
|
// Add um into the ark-hive
|
|
//-----------------------------------------
|
|
|
|
foreach( $files_to_add as $f )
|
|
{
|
|
$xmlarchive->xml_add_file( $f );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Create the database archive...
|
|
//-----------------------------------------
|
|
|
|
$xml->xml_set_root( 'emoticonexport', array( 'exported' => time(), 'name' => $this->ipsclass->input['emo_set'] ) );
|
|
|
|
//-----------------------------------------
|
|
// Get emo group
|
|
//-----------------------------------------
|
|
|
|
$xml->xml_add_group( 'emogroup' );
|
|
|
|
foreach( $emo_db as $r )
|
|
{
|
|
$content = array();
|
|
|
|
$content[] = $xml->xml_build_simple_tag( 'typed' , $r['typed'] );
|
|
$content[] = $xml->xml_build_simple_tag( 'image' , $r['image'] );
|
|
$content[] = $xml->xml_build_simple_tag( 'clickable', $r['clickable'] );
|
|
|
|
$entry[] = $xml->xml_build_entry( 'emoticon', $content );
|
|
}
|
|
|
|
$xml->xml_add_entry_to_group( 'emogroup', $entry );
|
|
|
|
$xml->xml_format_document();
|
|
|
|
//-----------------------------------------
|
|
// Add in emoticons doc to archive
|
|
//-----------------------------------------
|
|
|
|
$xmlarchive->xml_add_file_contents( $xml->xml_document, 'emoticon_data.xml' );
|
|
|
|
$xmlarchive->xml_create_archive();
|
|
|
|
//-----------------------------------------
|
|
// Create archive and send to
|
|
// browser.
|
|
//-----------------------------------------
|
|
|
|
$imagearchive = $xmlarchive->xml_get_contents();
|
|
|
|
$this->ipsclass->admin->show_download( $imagearchive, 'ipb_emoticons.xml' );
|
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------
|
|
// IMPORT THE EMOTICONS
|
|
//-----------------------------------------
|
|
|
|
function emoticon_pack_import()
|
|
{
|
|
$content = $this->ipsclass->admin->import_xml( 'ipb_emoticons.xml' );
|
|
|
|
//-----------------------------------------
|
|
// Got anything?
|
|
//-----------------------------------------
|
|
|
|
if ( ! $content )
|
|
{
|
|
$this->ipsclass->main_msg = "Upload failed, ipb_emoticons.xml was either missing or empty";
|
|
$this->emoticon_pack_splash();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get xml mah-do-dah
|
|
//-----------------------------------------
|
|
|
|
require_once( KERNEL_PATH.'class_xml.php' );
|
|
|
|
$xml = new class_xml();
|
|
|
|
require_once( KERNEL_PATH.'class_xmlarchive.php' );
|
|
|
|
$xmlarchive = new class_xmlarchive();
|
|
|
|
$xmlarchive->xml_read_archive_data( $content );
|
|
|
|
//-----------------------------------------
|
|
// Get the datafile
|
|
//-----------------------------------------
|
|
|
|
$emoticons = array();
|
|
$emoticon_data = array();
|
|
|
|
foreach( $xmlarchive->file_array as $f )
|
|
{
|
|
if ( $f['filename'] == 'emoticon_data.xml' )
|
|
{
|
|
$emoticon_data = $f['content'];
|
|
}
|
|
else
|
|
{
|
|
$emoticons[ $f['filename'] ] = $f['content'];
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Unpack the datafile
|
|
//-----------------------------------------
|
|
|
|
$xml->xml_parse_document( $emoticon_data );
|
|
|
|
//-----------------------------------------
|
|
// New set, old set - we're set!
|
|
//-----------------------------------------
|
|
|
|
if ( ! $this->ipsclass->input['emo_set'] and ! $this->ipsclass->input['new_emo_set'] )
|
|
{
|
|
$this->ipsclass->main_msg = "You must specify which emoticon group you wish to import into";
|
|
}
|
|
|
|
$emo_set_dir = $this->ipsclass->input['emo_set'];
|
|
|
|
$this->ipsclass->input['new_emo_set'] = preg_replace( "/[^a-zA-Z0-9\-_]/", "",$this->ipsclass->input['new_emo_set'] );
|
|
|
|
if ( $this->ipsclass->input['new_emo_set'] )
|
|
{
|
|
$emo_set_dir = $this->ipsclass->input['new_emo_set'];
|
|
|
|
//-----------------------------------------
|
|
// Directory exists?
|
|
//-----------------------------------------
|
|
|
|
if ( file_exists( CACHE_PATH.'style_emoticons/'.$emo_set_dir ) )
|
|
{
|
|
$this->ipsclass->main_msg = "'style_emoticons/$emo_set_dir' already exists, please choose another name.";
|
|
$this->emoticon_pack_splash();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Create directory?
|
|
//-----------------------------------------
|
|
|
|
if ( @mkdir( CACHE_PATH.'style_emoticons/'.$emo_set_dir, 0777 ) )
|
|
{
|
|
@chmod( CACHE_PATH.'style_emoticons/'.$emo_set_dir, 0777 );
|
|
}
|
|
else
|
|
{
|
|
$this->ipsclass->main_msg = "IPB cannot create a new folder for you, please create the folder manually using FTP in 'style_emoticons'";
|
|
$this->emoticon_pack_splash();
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Are we over writing?
|
|
//-----------------------------------------
|
|
|
|
$emo_image = array();
|
|
$emo_typed = array();
|
|
|
|
if ( $this->ipsclass->input['overwrite'] != 1 )
|
|
{
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'emoticons', 'where' => "emo_set='".$emo_set_dir."'" ) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$emo_image[ $r['image'] ] = 1;
|
|
$emo_typed[ $r['typed'] ] = 1;
|
|
}
|
|
}
|
|
|
|
foreach( $xml->xml_array['emoticonexport']['emogroup']['emoticon'] as $entry )
|
|
{
|
|
$image = $entry['image']['VALUE'];
|
|
$typed = $entry['typed']['VALUE'];
|
|
$click = $entry['clickable']['VALUE'];
|
|
|
|
if ( $emo_image[ $image ] or $emo_typed[ $typed ] )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$file_extension = preg_replace( "#^.*\.(.+?)$#si", "\\1", strtolower( $image ) );
|
|
|
|
if ( ! in_array( $file_extension, $this->allowed_files ) )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
@unlink( CACHE_PATH.'style_emoticons/'.$emo_set_dir.'/'.$image );
|
|
|
|
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'emoticons', 'where' => "typed='$typed' and image='$image' and emo_set='$emo_set_dir'" ) );
|
|
|
|
if ( $FH = fopen( CACHE_PATH.'style_emoticons/'.$emo_set_dir.'/'.$image, 'wb' ) )
|
|
{
|
|
if ( fwrite( $FH, $emoticons[ $image ] ) )
|
|
{
|
|
fclose( $FH );
|
|
|
|
$this->ipsclass->DB->do_insert( 'emoticons', array( 'typed' => $typed, 'image' => $image, 'clickable' => $click, 'emo_set' => $emo_set_dir ) );
|
|
}
|
|
}
|
|
|
|
// Let's add it to all other directories if
|
|
// the image doesn't already exist
|
|
|
|
$dh = opendir( CACHE_PATH.'style_emoticons' );
|
|
|
|
while ( FALSE !== ( $file = readdir( $dh ) ) )
|
|
{
|
|
if (($file != ".") && ($file != ".."))
|
|
{
|
|
if ( is_dir(CACHE_PATH.'style_emoticons/'.$file) )
|
|
{
|
|
if( !file_exists( CACHE_PATH.'style_emoticons/'.$file.'/'.$image ) )
|
|
{
|
|
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'emoticons', 'where' => "typed='$typed' and image='$image' and emo_set='$file'" ) );
|
|
|
|
if ( $FH = fopen( CACHE_PATH.'style_emoticons/'.$file.'/'.$image, 'wb' ) )
|
|
{
|
|
if ( fwrite( $FH, $emoticons[ $image ] ) )
|
|
{
|
|
fclose( $FH );
|
|
|
|
$this->ipsclass->DB->do_insert( 'emoticons', array( 'typed' => $typed, 'image' => $image, 'clickable' => $click, 'emo_set' => $file ) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
closedir( $dh );
|
|
}
|
|
|
|
$this->emoticon_rebuildcache();
|
|
|
|
$this->ipsclass->main_msg = "Emoticon XMLarchive import completed";
|
|
|
|
$this->emoticon_start();
|
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Manage
|
|
//-----------------------------------------
|
|
|
|
function emoticon_manage()
|
|
{
|
|
$this->ipsclass->input['id'] = trim($this->ipsclass->input['id']);
|
|
|
|
$this->ipsclass->admin->nav[] = array( '', 'Managing Set '.$this->ipsclass->input['id'] );
|
|
|
|
if( $this->ipsclass->input['id'] == 'default' )
|
|
{
|
|
$this->ipsclass->admin->page_detail = "You may add/edit or remove emoticons in this section.<br>";
|
|
}
|
|
|
|
$this->ipsclass->admin->page_detail .= "Clickable refers to emoticons that are in the posting screens 'Clickable Emoticons' table.";
|
|
|
|
if( $this->ipsclass->input['id'] == 'default' )
|
|
{
|
|
$this->ipsclass->admin->page_detail = "<br /><strong>You may NOT use the character " in the emoticons code section.";
|
|
}
|
|
|
|
$this->ipsclass->admin->page_title = "Emoticon Control";
|
|
|
|
//-----------------------------------------
|
|
// Get emoticons for this group
|
|
//-----------------------------------------
|
|
|
|
$emo_db = array();
|
|
$emo_file = array();
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'emoticons', 'where' => "emo_set='".$this->ipsclass->input['id']."'", 'order' => 'clickable DESC, image ASC' ) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$emo_db[ $r['image'] ] = $r;
|
|
}
|
|
|
|
$emo_file = array();
|
|
$emo_rfile = $this->emoticon_get_folder_contents( $this->ipsclass->input['id'] );
|
|
|
|
foreach( $emo_rfile as $ef )
|
|
{
|
|
$emo_file[ $ef ] = $ef;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Start output
|
|
//-----------------------------------------
|
|
|
|
$per_row = 5;
|
|
$td_width = 100 / $per_row;
|
|
|
|
$this->ipsclass->html .= "<div class='tableborder'>
|
|
<div class='tableheaderalt'>Assigned Emoticons in set '{$this->ipsclass->input['id']}'</div>
|
|
<form action='{$this->ipsclass->base_url}&{$this->ipsclass->form_code}&code=emo_doedit&id={$this->ipsclass->input['id']}' method='post'>
|
|
<input type='hidden' name='_admin_auth_key' value='{$this->ipsclass->_admin_auth_key}' />
|
|
<table cellpadding='4' cellspacing='0' border='0' width='100%'>
|
|
";
|
|
|
|
$count = 0;
|
|
$smilies = "<tr align='center'>\n";
|
|
$poss_names = array();
|
|
|
|
foreach( $emo_db as $image => $data )
|
|
{
|
|
$count++;
|
|
|
|
unset( $emo_file[ $image ] );
|
|
|
|
if ( $data['clickable'] )
|
|
{
|
|
$click = 'checked="checked"';
|
|
$class = 'tablerow1';
|
|
}
|
|
else
|
|
{
|
|
$click = '';
|
|
$class = 'tablerow2';
|
|
}
|
|
|
|
$smilies .= "<td width='{$td_width}%' align='center' class='$class'>
|
|
<fieldset>
|
|
<legend><strong>{$image}</strong></legend>
|
|
<input type='hidden' name='emo_id_{$data['id']}' value='{$data['id']}' />
|
|
<img src='style_emoticons/{$this->ipsclass->input['id']}/{$image}' border='0' /> ";
|
|
|
|
if( $this->ipsclass->input['id'] == 'default' )
|
|
{
|
|
$smilies .= "<a href='{$this->ipsclass->base_url}&{$this->ipsclass->form_code}&code=emo_remove&eid={$data['id']}&id={$this->ipsclass->input['id']}' title='Remove this emoticon'><img src='{$this->ipsclass->skin_acp_url}/images/emo_delete.gif' border='0' alt='Delete' /></a>
|
|
<br />
|
|
<input type='textinput' class='realbutton' size='10' name='emo_type_{$data['id']}' value='{$data['typed']}' />";
|
|
}
|
|
else
|
|
{
|
|
$smilies .= "<br /><br /><span style='font-family:Verdana,Arial;font-size:10px;font-weight:bold;'>{$data['typed']}</span>";
|
|
}
|
|
|
|
$smilies .= "<br /><br />Clickable? <input type='checkbox' name='emo_click_{$data['id']}' value='1' {$click} />
|
|
</fieldset>
|
|
</td>";
|
|
|
|
if ($count == $per_row )
|
|
{
|
|
$smilies .= "</tr>\n\n<tr align='center'>";
|
|
$count = 0;
|
|
}
|
|
|
|
$poss_names[$data['typed']] = $data['typed'];
|
|
}
|
|
|
|
$smilies = preg_replace( "#style_emoticons#", $this->ipsclass->vars['board_url'].'/style_emoticons', $smilies );
|
|
|
|
if ( $count > 0 and $count != $per_row )
|
|
{
|
|
for ($i = $count ; $i < $per_row ; ++$i)
|
|
{
|
|
$smilies .= "<td class='tablerow2'> </td>\n";
|
|
}
|
|
|
|
$smilies .= "</tr>";
|
|
}
|
|
|
|
|
|
$this->ipsclass->html .= $smilies;
|
|
|
|
$this->ipsclass->html .= "</table>
|
|
<div class='tablesubheader' align='center'><input type='submit' class='realbutton' value='Update Emoticons' /></form></div></div><br />";
|
|
|
|
|
|
//-----------------------------------------
|
|
// Images left in the dir?
|
|
//-----------------------------------------
|
|
|
|
if ( count( $emo_file ) && $this->ipsclass->input['id'] == 'default' )
|
|
{
|
|
$this->ipsclass->html .= "<div class='tableborder'>
|
|
<div class='tableheaderalt'>Unassigned images in folder '{$this->ipsclass->input['id']}'</div>
|
|
<form action='{$this->ipsclass->base_url}&{$this->ipsclass->form_code}&code=emo_doadd&id={$this->ipsclass->input['id']}' method='post'>
|
|
<input type='hidden' name='_admin_auth_key' value='{$this->ipsclass->_admin_auth_key}' />
|
|
<table cellpadding='4' cellspacing='0' border='0' width='100%'>
|
|
";
|
|
|
|
$count = 0;
|
|
$smilies = "<tr align='center'>\n";
|
|
|
|
$master_count = 0;
|
|
|
|
foreach( $emo_file as $image )
|
|
{
|
|
$count++;
|
|
$master_count++;
|
|
|
|
$poss_name = ':'.preg_replace( "/(.*)(\..+?)$/", "\\1", $image ).':';
|
|
|
|
if ( isset($poss_names[ $poss_name ]) AND $poss_names[ $poss_name ] )
|
|
{
|
|
$poss_name = preg_replace( "/:$/", "2:", $poss_name );
|
|
}
|
|
|
|
$smilies .= "<td width='{$td_width}%' align='center' class='tablerow1'>
|
|
<fieldset>
|
|
<legend><strong>{$image}</strong></legend>
|
|
<img src='style_emoticons/{$this->ipsclass->input['id']}/{$image}' border='0' /> <b>Add</b> <input name='emo_add_{$master_count}' type='checkbox' value='1' />
|
|
<br />
|
|
Type: <input type='textinput' class='realbutton' size='10' name='emo_type_{$master_count}' value='$poss_name' />
|
|
<br /><br />Clickable? <input type='checkbox' name='emo_click_{$master_count}' value='1' />
|
|
<input type='hidden' name='emo_image_{$master_count}' value='{$image}' />
|
|
</fieldset>
|
|
</td>";
|
|
|
|
if ($count == $per_row )
|
|
{
|
|
$smilies .= "</tr>\n\n<tr align='center'>";
|
|
$count = 0;
|
|
}
|
|
}
|
|
|
|
if ( $count > 0 and $count != $per_row )
|
|
{
|
|
for ($i = $count ; $i < $per_row ; ++$i)
|
|
{
|
|
$smilies .= "<td class='tablerow1'> </td>\n";
|
|
}
|
|
|
|
$smilies .= "</tr>";
|
|
}
|
|
|
|
$smilies = preg_replace( "#style_emoticons#", $this->ipsclass->vars['board_url'].'/style_emoticons', $smilies );
|
|
|
|
|
|
$this->ipsclass->html .= $smilies;
|
|
|
|
$this->ipsclass->html .= "</table>
|
|
<div class='tablesubheader' align='center'><input type='submit' class='realbutton' value='Add Checked Emoticons' /> <input type='submit' name='addall' class='realbutton' value='Add All Emoticons' /></form></div></div>";
|
|
}
|
|
|
|
$this->ipsclass->admin->output();
|
|
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Rebuild Cache
|
|
//-----------------------------------------
|
|
|
|
function emoticon_rebuildcache()
|
|
{
|
|
require_once ROOT_PATH.'sources/classes/bbcode/class_bbcode_core.php';
|
|
|
|
$this->ipsclass->cache['emoticons'] = array();
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => 'typed,image,clickable,emo_set', 'from' => 'emoticons' ) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while ( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$this->ipsclass->cache['emoticons'][] = $r;
|
|
}
|
|
|
|
usort( $this->ipsclass->cache['emoticons'] , array( 'class_bbcode_core', 'smilie_length_sort' ) );
|
|
|
|
$this->ipsclass->update_cache( array( 'name' => 'emoticons', 'array' => 1, 'deletefirst' => 1 ) );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// EMOTICON Get folder contents
|
|
//-----------------------------------------
|
|
|
|
function emoticon_get_folder_contents($folder='default')
|
|
{
|
|
$files = array();
|
|
|
|
//-----------------------------------------
|
|
// Get emoticon folders
|
|
//-----------------------------------------
|
|
|
|
$dh = opendir( CACHE_PATH.'style_emoticons/'.$folder );
|
|
|
|
while ( FALSE !== ( $file = readdir( $dh ) ) )
|
|
{
|
|
if ( ($file != ".") && ($file != "..") )
|
|
{
|
|
if ( preg_match( "/\.(?:gif|jpg|jpeg|png|swf)$/i", $file ) )
|
|
{
|
|
$files[] = $file;
|
|
}
|
|
}
|
|
}
|
|
|
|
closedir( $dh );
|
|
|
|
return $files;
|
|
}
|
|
|
|
|
|
|
|
function perly_length_sort($a, $b)
|
|
{
|
|
if ( strlen($a['typed']) == strlen($b['typed']) )
|
|
{
|
|
return 0;
|
|
}
|
|
return ( strlen($a['typed']) > strlen($b['typed']) ) ? -1 : 1;
|
|
}
|
|
|
|
function perly_word_sort($a, $b)
|
|
{
|
|
if ( strlen($a['type']) == strlen($b['type']) )
|
|
{
|
|
return 0;
|
|
}
|
|
return ( strlen($a['type']) > strlen($b['type']) ) ? -1 : 1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
?>
|