UPdated : Language System

Updated : Email templates and settings
This commit is contained in:
Arslan Hassan 2012-07-24 23:13:44 +00:00
parent e8c4e96d8d
commit 2aac3f79cf
7 changed files with 390 additions and 118 deletions

View file

@ -1,7 +1,7 @@
<?php
/*
**************************************************************
| Copyright (c) 2007-2010 Clip-Bucket.com. All rights reserved.
| Copyright (c) 2007-2012 Clip-Bucket.com. All rights reserved.
| @ Author : ArslanHassan
| @ Software : ClipBucket , © PHPBucket.com
***************************************************************
@ -13,16 +13,16 @@ $userquery->login_check('web_config_access');
$pages->page_redir();
//Making Language Default
if(isset($_POST['make_default']))
if(isset($_POST['default_language']))
{
$id = mysql_clean($_POST['make_default']);
$id = mysql_clean($_POST['default_language']);
$lang_obj->make_default($id);
}
//Importing language
if(isset($_POST['add_language']))
{
$lang_obj->import_lang();
$lang_obj->import_lang($_POST);
}
//Removig Langiage
@ -35,8 +35,14 @@ if(isset($_GET['delete']))
//Updateing Language
if(isset($_POST['update_language']))
{
$_POST['lang_id'] = $_GET['edit_language'];
$_POST['lang_id'] = $_POST['update_language'];
$lang_obj->update_lang($_POST);
//Updating phrases
if(($_FILES['lang_file']['tmp_name']))
{
$lang_obj->import_lang($_POST);
}
}
//Downloading Language

View file

@ -116,6 +116,9 @@ $(document).ready(function(){
<script type="text/javascript" src="{$template_url}/jquery/scrolltofixed.js"></script>
<!-- Loading Masonary -->
<script type="text/javascript" src="{$template_url}/jquery/masonary.js"></script>
<!-- jEditable -->
<script type="text/javascript" src="{$template_url}/jquery/jeditable.js"></script>
<!-- Including Amplify Requests -->
{include file="$layout_dir/amplify.requests.html"}

View file

@ -165,5 +165,15 @@
total_thumbs.prop('checked',true);
}
})
$('.edit_lang').editable(baseurl+'/actions/update_phrase.php', {
indicator : '<img src="'+baseurl+'/images/icons/progIndicator.gif">',
tooltip : 'Click to edit...',
type : 'textarea',
width :500}
);
})
</script>

View file

@ -1,112 +1,237 @@
{if $edit_lang != 'yes'}
<h2>Language Settings</h2>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" style="margin-top:15px">
<tr>
<td width="20" class="left_head" style="padding-left:5px">ID</td>
<td width="100" align="left" class="head"><div class="head_sep_left">Default</div></td>
<td class="head"><div class="head_sep_left" style="width:100px">Language</div></td>
</tr>
</table>
<form name="default_lang" method="post" action="?default">
{section name=l_list loop=$language_list}
<div class="row_white">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="20" height="25" valign="top" style="padding-left:5px">{$language_list[l_list].language_id}</td>
<td width="100" align="left" valign="top"><label>
<input type="radio" name="make_default" id="radio" value="{$language_list[l_list].language_id}" {if $language_list[l_list].language_default =='yes'}checked="checked"{/if} onclick="document.default_lang.submit()"/>
</label></td>
<td valign="top">{$language_list[l_list].language_name}({$language_list[l_list].language_code})
<div><a href="?create_package={$language_list[l_list].language_code}">Recreate Pack</a>
- <a href="?recreate_from_pack={$language_list[l_list].language_code}" >Recreate from pack</a>
- <a href="?edit_language={$language_list[l_list].language_id}" >Edit Phrases</a>
- <a href="?edit_language={$language_list[l_list].language_id}">Edit</a>
- <a href="javascript:void(0)" onclick="if(confirm_it('Are you sure you want to delete \'{$language_list[l_list].language_name}\' pack')) window.location = '?delete={$language_list[l_list].language_id}'">Delete</a>
- <a href="?download={$language_list[l_list].language_id}" target="_blank">Export</a>{if $language_list[l_list].language_active!='yes'}
- <a href="?action=activate&id={$language_list[l_list].language_id}">Activate</a>{/if}{if $language_list[l_list].language_active=='yes'}
- <a href="?action=deactivate&id={$language_list[l_list].language_id}">Dectivate</a>{/if}</div></td>
</tr>
</table>
<div class="height10"></div>
{$languages=$language_list}
<div class="manager-list">
<div class="controller scrolltoFixed white-grad">
<div class="buttons">
<div class="btn-toolbar">
<div class="btn-group">
</div>
<div class="btn-group">
<a class="btn btn-primary" data-toggle="modal" data-target="#create-language">
<i class="icon-plus icon-white"></i>
{lang code='Create New Lanuages'}
</a>
</div>
</div>
<div class="right-button">
</div>
</div>
</div>
<div class="modal hide" id="create-language">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>Create new language</h3>
</div>
<div class="modal-body">
<form class="form form-vertical" method="post" enctype="multipart/form-data" id="add-language-form">
<div class="control-group">
<label class="control-label" for="lang_name">{lang code='Language Name'}</label>
<div class="controls">
<input type="text" class="input-xlarge" id="lang_name" name="name">
<p class="help-block">Name your language something more user friendly e.g 'Urdu', 'English US'</p>
</div>
</div>
<div class="control-group">
<label class="control-label" for="lang_code">{lang code='Language Code'}</label>
<div class="controls">
<input type="text" class="input-xlarge" id="lang_code" name="code">
<p class="help-block">e.g 'ur' , 'en-US'</p>
</div>
</div>
<div class="control-group">
<label class="control-label" for="lang_file">{lang code='Language File'}</label>
<div class="controls">
<input type="file" class="input-xlarge" id="lang_file" name="lang_file">
<p class="help-block">a .json file, see documentation for more details</p>
</div>
</div>
<input type="hidden" name="add_language" value="do" />
{* @todo : Add language documentation link *}
</form>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
<a href="#" class="btn btn-primary" onclick="$('#add-language-form').submit();">{lang code='Create'}</a>
</div>
</div>
<form name="manage-languages-form" method="post" id="manage-languages-form" action="language_settings.php">
<table id="manage-languages-list" class="table table-striped list-block {if !$languages}display-none{/if}">
<thead>
<tr>
<th width="70">#</th>
<th>{lang code='Name'}</th>
<th width="70">{lang code='Active'}</th>
<th width="200">{lang code='Default'}</th>
<th width="120"></th>
</tr>
</thead>
<tbody>
{foreach $languages as $language}
<tr>
<td>{$language.language_id}</td>
<td>{$language.language_name}
{if $language.language_default=='yes'}
<span class="label label-success">default</span>
{/if}
</td>
<td>{$language.language_active}</td>
<td><input type="radio" name="default_language" value="{$language.language_id}"
{if $language.language_default=='yes'}checked="checked"{/if}
onclick="$('#manage-languages-form').submit();"
/></td>
<td>
<div class="dropdown pull-right btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown">
Options <i class="caret"></i>
</a>
<ul class="dropdown-menu">
<li><a href="javascript:void(0)" data-toggle="modal" data-target='#edit-language-{$language.language_id}'>{lang code='Edit'}</a></li>
{if $language.language_active!='yes'}</li>
<li><a href="?action=activate&id={$language.language_id}">{lang code='Activate'}</a>{/if}
{if $language.language_active=='yes'}</li>
<li><a href="?action=deactivate&id={$language.language_id}">{lang code='Deactivate'}</a>{/if}</li>
<li class="divider"></li>
<li><a href="?create_package={$language.language_code}">{lang code='Refresh Cache'}</a></li>
<li><a href="?edit_language={$language.language_id}" >{lang code='Edit Phrases'}</a></li>
<li><a href="?download={$language.language_id}" target="_blank">{lang code='Export'}</a>
<li class="divider"></li>
{$title=lang("Delete Language")}
{$content=sprintf(lang("Are you sure you want to remove %s ?"),$language.language_name)}
<li><a href="javascript:void(0)" onclick="cb_confirm('{$title}','{$content}',function(){
window.location = '?delete='+{$language.language_id};
})">{lang code='Delete'}</a></li>
</ul>
</div>
</td>
</tr>
{/foreach}
</tbody>
</table>
</form>
</div>
{/section}
</form>
<div style="height:50px"></div>
<h2> Add New Language </h2>
<form action="?import" method="post" enctype="multipart/form-data" name="import_language" id="import_language">
<fieldset>
<legend>Upload file</legend>
<table width="100%" border="0" cellpadding="2" cellspacing="0" class="block">
<tr>
<td>Browse ClipBucket Language File ( must be .xml format )
<input type="file" name="lang_file" id="lang_file" />
<input type="submit" name="add_language" id="add_language" value="Add Language" class="button" /></td>
</tr>
</table>
</fieldset>
</form>
{* Calling foreach loop again to write down modal boxes for languages because we cannot declare a form within a form *}
{foreach $languages as $language}
<div class="modal hide" id="edit-language-{$language.language_id}">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>{lang code='Edit Language'} - {$language.language_name}</h3>
</div>
<div class="modal-body">
<form class="form form-horizontal" name="edit_language_{$language.language_id}" enctype="multipart/form-data" id="edit-lang-{$language.language_id}" method="post">
<div class="control-group">
<label class="control-label" for="name">{lang code='Language Name'}</label>
<div class="controls">
<input type="text" class="input-xlarge" id="name" name="name" value="{$language.language_name}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="code">{lang code='Language Code'}</label>
<div class="controls">
<input type="text" class="input-xlarge" id="code" name="code" value="{$language.language_code}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="regex">{lang code='Language Regex'}</label>
<div class="controls">
<input type="text" class="input-xlarge" id="regex" name="regex" value="{$language.language_regex}" />
</div>
</div>
<hr>
Update language phrases from a file, leave blank otherwise.
<div class="height10"></div>
<div class="control-group">
<label class="control-label" for="lang_file">{lang code='Language File'}</label>
<div class="controls">
<input type="file" class="input-xlarge" id="lang_file" name="lang_file">
<p class="help-block">a .json file, see documentation for more details</p>
</div>
</div>
<input type="hidden" name="update_language" value="{$language.language_id}" />
</form>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
<a href="#" class="btn btn-primary" onclick="$('#edit-lang-{$language.language_id}').submit();">Save changes</a>
</div>
</div>
{/foreach}
{lang code='awein'}
{else}
<span class="page_title">Edit {$lang_details.language_name}</span>
<h2>{lang code='Edit Language phrases'} - {$lang_details.language_name}</h2>
<div class="height20"></div>
<div class="search_box"> <form id="form1" name="form1" method="post" action="">
<label>Language Name
<input name="name" type="text" id="name" value="{$lang_details.language_name}" />
Language Code </label>
<input name="code" type="text" id="code" value="{$lang_details.language_code}" />
Language Regex
<input name="regex" type="text" id="regex" value="{$lang_details.language_regex}" />
<input type="submit" name="update_language" class="button" value="Update" style="margin-top:10px" id="update_language"/>
<br />
</form></div>
<div style="height:10px">
<form name="search_phrases" id="search_phrases" class="form form-horizontal" method="get">
<div class="control-group">
<label class="control-label" for="varname">{lang code='Phrase Code - Name'}</label>
<div class="controls">
<input name="varname" class="input-xlarge" type="text" id="varname" value="{$smarty.get.varname|form_val}" />
</div>
</div>
</div>
<span class="page_title">Editing {$lang_details.language_name} Phrases</span>
<div class="control-group">
<label class="control-label" for="text">{lang code='Phrase Text'}</label>
<div class="controls">
<input name="text" class="input-xlarge" type="text" id="text" value="{$smarty.get.text|form_val}" />
</div>
</div>
<div style="height:10px">
<input name="edit_language" type="hidden" value="{$smarty.get.edit_language}" />
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">{lang code='Search Phrases'}</button>
</div>
</form>
<div class="search_box"> <form id="form1" name="form1" method="get" action="?">
<label>Phrase Code - Name<br />
<input name="varname" type="text" id="varname" value="{$smarty.get.varname|form_val}" />
<input name="edit_language" type="hidden" value="{$smarty.get.edit_language}" />
</label>
<br />
<label>Phrase Text<br />
<input name="text" type="text" id="text" value="{$smarty.get.text|form_val}" />
</label>
<br />
<label>
<input type="submit" name="search_phrase" class="button" value="Submit" style="margin-top:10px" id="search_phrase"/>
</label>
</form></div>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="5" class="left_head" ></td>
<td width="200" class="head">Phrase Code</td>
<td align="left" class="head">Phrase</td>
<td width="200" class="right_head"></td>
</tr>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th width="150">Phrase code</th>
<th>Phrase Text</th>
</tr>
</thead>
<tbody>
{foreach $lang_phrases as $phrase}
<tr>
<td>{$phrase.varname}</td>
<td><div class="edit_lang" id="{$phrase.id}">{$phrase.text}</div></td>
</tr>
{/foreach}
</tbody>
</table>
{section name=p_list loop=$lang_phrases}
<div class="row_white">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="5" ></td>
<td width="200" >{$lang_phrases[p_list].varname}</td>
<td align="left"><div class="edit_lang" id="{$lang_phrases[p_list].id}">{$lang_phrases[p_list].text}</div></td>
<td width="200" ></td>
</tr>
</table>
</div>
{/section}
<!-- DIsplaying Videos Ends-->
{include file="$style_dir/blocks/pagination.html" }

View file

@ -19,6 +19,10 @@
#
/**
* @todo : Make sure when there is no phrase in databse pack, a notification should be added for administrator that XxX phrase has no defination.
*/
class language
{
@ -120,8 +124,13 @@ class language
global $db;
//First checking if phrase already exists or not
if($this->get_phrase($id,$lang_code))
$db->update(tbl("phrases"),array('text'),array(mysql_real_escape_string($text))," id = '".mysql_real_escape_string($id)."' ");
}
$db->update(tbl("phrases"),array('text'),array('|no_mc|'.mysql_real_escape_string($text))," id = '".mysql_real_escape_string($id)."' ");
if($this->auto_update_pack)
{
$this->createPack($lang_code);
}
}
/**
* Function used to get all phrases of particular language
@ -255,22 +264,16 @@ class language
$lang_details = $this->get_lang($id);
if($lang_details)
{
$content = file_get_contents(BASEDIR.'/includes/langs/'.$lang_details['language_code'].'.lang');
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=\"cb_lang_".$lang_details['language_code'].".xml\"");
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<clipbucket_language>
<name><?=$lang_details['language_name']?></name>
<iso_code><?=$lang_details['language_code']?></iso_code>
<phrases>
<?=array2xml(array('lang'=>$this->lang_phrases()));?>
</phrases>
</clipbucket_language>
<?php
header("Content-Disposition: attachment; filename=\"cb_lang_".$lang_details['language_code'].".json\"");
echo $content;
exit();
}else
e(lang("lang_doesnt_exist"));
@ -279,12 +282,14 @@ class language
/**
* Function used to import language
*/
function import_lang()
function import_lang_old()
{
global $db;
//First we will move uploaded file
$file_name = TEMP_DIR.'/cb_lang.xml';
if(empty($_FILES['lang_file']['name']))
e(lang("no_file_was_selected"));
elseif(move_uploaded_file($_FILES['lang_file']['tmp_name'],$file_name))
@ -335,6 +340,95 @@ class language
unlink($file_name);
}
function import_lang($array)
{
global $db;
if(!$array['code'])
{
e(lang('Input language code was invalid '));
return false;
}
if(!$array['name'])
$array['name'] = $array['code'];
$name = $array['name'];
$code = $array['code'];
//Checking if language already exists...
$lang = $this->lang_exists($code);
if(!$lang)
{
//Add language in databse.
//Create language file.
//Update from pack.
$db_fields = array(
'language_code' => $code,
'language_name' => $name,
'language_regex' => '/'.$code.'/',
'language_default' => 'no'
);
cb_insert(tbl('languages'),$db_fields);
$lang_file = BASEDIR.'/includes/langs/'.$code.'.lang';
$new_file = TEMP_DIR.'/'.$code.'.lang';
$lang_id = $db->insert_id();
if(move_uploaded_file($_FILES['lang_file']['tmp_name'], $new_file))
{
rename($new_file,$lang_file);
$this->updateFromPack($code);
if(!error())
{
e(sprintf(lang('%s has been added.'),$name),'m');
return true;
}else
return false;
}else{
cb_update(tbl('languages'),array('language_active'=>'no')," language_id='$lang_id' ");
e(lang('Unable to upload language file'));
return false;
}
} else {
//Replace existing lang file and execute update from pack
//function ;)
$lang_file = BASEDIR.'/includes/langs/'.$lang['language_code'].'.lang';
$new_file = TEMP_DIR.'/'.$lang['language_code'].'.lang';
if(move_uploaded_file($_FILES['lang_file']['tmp_name'], $new_file))
{
unlink($lang_file);
rename($new_file,$lang_file);
$this->updateFromPack($lang['language_code']);
if(!error())
{
e(lang('Language phrases been updated'),'m');
return true;
}else
return false;
}else{
e(lang('Unable to upload language file'));
return false;
}
}
}
/**
* Function used to delete language pack
*/
@ -392,7 +486,8 @@ class language
{
if(!$lang)
$lang = $this->lang;
$phrases = $this->get_phrases($lang);
$phrases = $this->get_phrases($lang);
if(count($phrases)==0) return false;
$new_array = array();
@ -468,28 +563,35 @@ class language
global $db;
if(!$lang)
$lang = $this->lang;
$file = BASEDIR.'/includes/langs/'.$lang.'.lang';
$file = BASEDIR.'/includes/langs/'.$lang.'.lang';
if(file_exists($file))
{
$langData = file_get_contents($file);
$phrases = json_decode($langData,true);
//First lets delete all language phrases
$db->delete(tbl("phrases"),array("lang_iso"),array($lang));
//Now create query and then execute it
//Now create query and then execute it
$query = "INSERT INTO ".tbl("phrases")."
(`lang_iso` ,`varname` ,`text`)
VALUES";
$count = 0;
foreach($phrases as $key => $phrase)
{
if($count>0)
$query .= ",";
$query .= "('$lang', '$key', '".addslashes($phrase)."')";
$query .= "('$lang', '$key', '".clean($phrase)."')";
$count++;
}
$query .= ";";
$db->Execute($query);
}
@ -497,4 +599,5 @@ class language
}
?>

View file

@ -2959,6 +2959,31 @@ function cond($condition, $operater = 'AND', $var = NULL) {
return $cond;
}
/**
* CB New Insert function to make dev easy
*
* @param STRING tbl_name
* @param ARRAY fields=>values
*/
function cb_insert($tbl,$array)
{
global $db;
$fields = array();
$values = array();
foreach($array as $index=>$val)
{
$fields[] = $index;
$values[] = $val;
}
return $db->insert($tbl,$fields,$values);
}
//Including videos functions
include("functions_videos.php");
//Including Users Functions