Skip to content
This repository has been archived by the owner on Sep 13, 2024. It is now read-only.

Developer #272

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion config/version.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
********************************************************************************/
// -ve timestamp before release, +ve timestamp after release.
$patch_version = '20150219';
$YetiForce_current_version = '1.3.44 RC';
$YetiForce_current_version = '1.3.45 RC';
$_SESSION['yetiforce_version'] = $YetiForce_current_version;
124 changes: 82 additions & 42 deletions layouts/vlayout/modules/Settings/Vtiger/CompanyDetails.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
<tbody>
<tr>
<td class="{$WIDTHTYPE}">
<div class="companyLogo">
<div class="companyLogo" style="max-width: 250px; max-height: 200px;">
<img src="{$MODULE_MODEL->getLogoPath()}" class="alignMiddle" />
</div>
</td>
Expand All @@ -57,7 +57,7 @@
{foreach from=$MODULE_MODEL->getFields() item=FIELD_TYPE key=FIELD}
{if $FIELD neq 'logoname' && $FIELD neq 'logo' }
<tr>
<td class="{$WIDTHTYPE}" style="width:25%"><label class="pull-right">{vtranslate($FIELD,$QUALIFIED_MODULE)}</label></td>
<td class="{$WIDTHTYPE}" style="width:25%"><label class="pull-right">{{{vtranslate($FIELD,$QUALIFIED_MODULE)}|ucfirst}|replace:'_':' '}</label></td>
<td class="{$WIDTHTYPE}">
{if $FIELD eq 'address'} {$MODULE_MODEL->get($FIELD)|nl2br} {else} {$MODULE_MODEL->get($FIELD)} {/if}
</td>
Expand All @@ -73,52 +73,92 @@
<input type="hidden" name="module" value="Vtiger" />
<input type="hidden" name="parent" value="Settings" />
<input type="hidden" name="action" value="CompanyDetailsSave" />
<div class="control-group">
<div class="control-label">{vtranslate('LBL_COMPANY_LOGO',$QUALIFIED_MODULE)}</div>
<div class="controls">
<div class="companyLogo">
<img src="{$MODULE_MODEL->getLogoPath()}" class="alignMiddle" />
</div>
<input type="file" name="logo" id="logoFile" />&nbsp;&nbsp;
<span class="alert alert-info">
{vtranslate('LBL_LOGO_RECOMMENDED_MESSAGE',$QUALIFIED_MODULE)}
</span>
{if !empty($ERROR_MESSAGE)}
<br><br><div class="marginLeftZero span9 alert alert-error">
{vtranslate($ERROR_MESSAGE,$QUALIFIED_MODULE)}
</div>
{/if}
</div>
</div>
<table class="table table-bordered">
<thead>
<tr class="blockHeader">
<th colspan="2" class="{$WIDTHTYPE}"><strong>{vtranslate('LBL_COMPANY_LOGO',$QUALIFIED_MODULE)}</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td >
<div class="companyLogo" style="max-width: 250px; max-height: 200px;">
<img src="{$MODULE_MODEL->getLogoPath()}" class="alignMiddle" />
</div>
</td>
<td>
<div>
<input type="file" name="logo" id="logoFile" />&nbsp;&nbsp;
<span class="alert alert-info">
{vtranslate('LBL_LOGO_RECOMMENDED_MESSAGE',$QUALIFIED_MODULE)}
</span>
{if !empty($ERROR_MESSAGE)}
<br><br><div class="marginLeftZero span9 alert alert-error">
{vtranslate($ERROR_MESSAGE,$QUALIFIED_MODULE)}
</div>
{/if}
</div>
</td>
</tr>
</tbody>
</table>
<br><br>
<table class="table table-bordered" >
<thead>
<tr class="blockHeader">
<th colspan="2" class="{$WIDTHTYPE}"><strong>{vtranslate('LBL_COMPANY_INFORMATION',$QUALIFIED_MODULE)}</strong></th>
</tr>
</thead>
<tbody>
{foreach from=$MODULE_MODEL->getFields() item=FIELD_TYPE key=FIELD}
{if $FIELD neq 'logoname' && $FIELD neq 'logo' }
<div class="control-group">
<div class="control-label">
{vtranslate($FIELD,$QUALIFIED_MODULE)}{if $FIELD eq 'organizationname'}<span class="redColor">*</span>{/if}
</div>
<div class="controls">
{if $FIELD eq 'address'}
<textarea name="{$FIELD}" style="width: 40%">{$MODULE_MODEL->get($FIELD)}</textarea>
{else}
<input type="text" {if $FIELD eq 'organizationname'} data-validation-engine="validate[required]" {/if} class="input-xlarge" name="{$FIELD}" value="{$MODULE_MODEL->get($FIELD)}"/>
{/if}
</div>
</div>
<tr>
<td style="width:25%">
<div class="control-group">
<div class=" pull-right">
{vtranslate($FIELD,$QUALIFIED_MODULE)}{if $FIELD eq 'organizationname'}<span class="redColor">*</span>{/if}
</div>
</div>
</td>
<td>
<div class="">
{if $FIELD eq 'address'}
<textarea name="{$FIELD}" style="width: 40%">{$MODULE_MODEL->get($FIELD)}</textarea>
{else}
<input type="text" {if $FIELD eq 'organizationname'} data-validation-engine="validate[required]" {/if} class="input-xlarge" name="{$FIELD}" value="{$MODULE_MODEL->get($FIELD)}"/>
{/if}
</div>
</td>
</tr>
{/if}
{/foreach}
</tbody>
</table>
{include file="ModalFooter.tpl"|@vtemplate_path:$QUALIFIED_MODULE}
</form>

<form class="form-horizontal hide" id="addCustomFieldForm" method="post" action="index.php">
<input type="hidden" name="module" value="Vtiger" />
<input type="hidden" name="parent" value="Settings" />
<input type="hidden" name="action" value="SaveCompanyField" />
<div class="control-group">
<div class="control-label">{vtranslate('LBL_FIELD_NAME',$QUALIFIED_MODULE)}</div>
<div class="controls">
<input type="text" name="field name" id="fieldName" />
</div>
<div class="modal addCustomFieldModal hide">
<div class="modal-header contentsBackground">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>{vtranslate('LBL_ADD_CUSTOM_FIELD', $QUALIFIED_MODULE)}</h3>
</div>
{include file="ModalFooter.tpl"|@vtemplate_path:$QUALIFIED_MODULE}
</form>
<form class="form-horizontal addCustomBlockForm" method="post" action="index.php" >
<div class="modal-body">
<div class="control-group">
<input type="hidden" name="module" value="Vtiger" />
<input type="hidden" name="parent" value="Settings" />
<input type="hidden" name="action" value="CompanyDetailsFieldSave" />
<div class="control-group">
<div class="control-label">{vtranslate('LBL_FIELD_NAME',$QUALIFIED_MODULE)}</div>
<div class="controls">
<input type="text" name="field name" id="fieldName" />
</div>
</div>
</div>

</div>
{include file='ModalFooter.tpl'|@vtemplate_path:'Vtiger'}
</form>
</div>

{/strip}
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,17 @@ jQuery.Class("Settings_Vtiger_CompanyDetails_Js",{},{
jQuery('#updateCompanyDetails').addClass('hide');
jQuery('#addCustomFieldForm').addClass('hide');
jQuery('#addCustomField').addClass('hide');

});
},

registerAddFieldEvent : function(){
jQuery('#addCustomField').on('click',function(e){
jQuery('#addCustomField').addClass('hide');
jQuery('#CompanyDetailsContainer').addClass('hide');
jQuery('#updateCompanyDetailsForm').addClass('hide');
jQuery('#addCustomFieldForm').removeClass('hide');
jQuery('#updateCompanyDetails').addClass('hide');
jQuery('#addCustomField').addClass('hide');
var modalData = $( ".addCustomFieldModal" ).html();
app.showModalWindow(modalData);

});

},

registerSaveCompanyDetailsEvent : function() {
var thisInstance = this;
jQuery('#updateCompanyDetailsForm').on('submit',function(e) {
Expand Down Expand Up @@ -105,7 +100,6 @@ jQuery.Class("Settings_Vtiger_CompanyDetails_Js",{},{
},

registerEvents: function() {
this.registerAddFieldEvent();
this.registerUpdateDetailsClickEvent();
this.registerSaveCompanyDetailsEvent();
this.registerCancelClickEvent();
Expand All @@ -118,4 +112,5 @@ jQuery(document).ready(function(e){
var instance = new Settings_Vtiger_CompanyDetails_Js();
instance.registerEvents();
instance.isFieldAdded();
instance.registerAddFieldEvent();
})
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,15 @@
* All Rights Reserved.
* Contributor(s): YetiForce.com
************************************************************************************/
class Settings_Vtiger_SaveCompanyField_Action extends Settings_Vtiger_Basic_Action {
class Settings_Vtiger_CompanyDetailsFieldSave_Action extends Settings_Vtiger_Basic_Action {

public function process(Vtiger_Request $request) {
global $log;
global $adb;
$newField = mysql_escape_string($request->get('field_name'));
$newField = str_replace(" ","_", $newField);
$query = "SELECT *
FROM information_schema.COLUMNS
WHERE
TABLE_SCHEMA = ?
AND TABLE_NAME = 'vtiger_organizationdetails'
AND COLUMN_NAME = ?";

$params = array($adb->dbName, $newField);
$result = $adb->pquery($query, $params);
$rowsNum = $adb->getRowCount($result);

if($rowsNum > 0){
$log->info("Settings_Vtiger_SaveCompanyField_Action::process - column $newField exist in table vtiger_organizationdetails");
$reloadUrl = 'index.php?parent=Settings&module=Vtiger&view=CompanyDetails&AddField=0';
}else{
$alterFieldQuery = "ALTER TABLE `vtiger_organizationdetails` ADD $newField VARCHAR(60)";
$alterFieldResult = $adb->query($alterFieldQuery, $alterFieldParams);
$rowsNum = $adb->getRowCount($alterFieldResult);
$this->addFieldToModule($newField);
$reloadUrl = 'index.php?parent=Settings&module=Vtiger&view=CompanyDetails&AddField=1';
$log->info("Settings_Vtiger_SaveCompanyField_Action::process - add column $newField in table vtiger_organizationdetails");
}
header('Location: ' . $reloadUrl);
}
global $log;
Settings_Vtiger_CompanyDetails_Model::addNewField($request);
$log->info('Settings_Vtiger_CompanyFieldSave_Action::process - Add field started');
}


public function addFieldToModule($field){
public static function addFieldToModule($field){
global $log;
$fileName = 'modules/Settings/Vtiger/models/CompanyDetails.php';
$fileExists = file_exists($fileName);
Expand All @@ -53,8 +28,8 @@ public function addFieldToModule($field){
if(self::parse_data($placeToAdd,$fileContent)){
$fileContent = str_replace($placeToAdd,$placeToAdd.PHP_EOL.' '.$newField,$fileContent);
}else{
if(self::parse_data('?>',$fileContent)){
$fileContent = str_replace('?>','',$fileContent);
if(self::parse_data('',$fileContent)){
$fileContent = str_replace('','',$fileContent);
}
$fileContent = $fileContent.PHP_EOL.$placeToAdd.PHP_EOL.' '.$newField.PHP_EOL.');';
}
Expand All @@ -69,8 +44,8 @@ public function addFieldToModule($field){
fclose($filePointer);

return TRUE;
}
}

public function parse_data($a,$b) {
$resp = false;
if ($b != '' && strstr($b,$a) !== false) {
Expand Down
63 changes: 61 additions & 2 deletions modules/Settings/Vtiger/models/CompanyDetails.php
Original file line number Diff line number Diff line change
Expand Up @@ -163,5 +163,64 @@ public static function getSetting($fieldname) {
self::$settings = $adb->database->GetRow("SELECT * FROM vtiger_organizationdetails");
}
return self::$settings[$fieldname];
}
}
}

public static function addNewField(Vtiger_Request $request) {
global $log;
global $adb;
$newField = self::newFieldValidation($request->get('field_name'));

if($newField != FALSE){
$query = "SELECT *
FROM information_schema.COLUMNS
WHERE
TABLE_SCHEMA = ?
AND TABLE_NAME = 'vtiger_organizationdetails'
AND COLUMN_NAME = ?";

$params = array($adb->dbName, $newField);
$result = $adb->pquery($query, $params);
$rowsNum = $adb->getRowCount($result);

if($rowsNum > 0){
$log->info("Settings_Vtiger_SaveCompanyField_Action::process - column $newField exist in table vtiger_organizationdetails");
$reloadUrl = 'index.php?parent=Settings&module=Vtiger&view=CompanyDetails&AddField=0';
}else{
$alterFieldQuery = "ALTER TABLE `vtiger_organizationdetails` ADD $newField VARCHAR(255)";
$alterFieldResult = $adb->query($alterFieldQuery, $alterFieldParams);
$rowsNum = $adb->getRowCount($alterFieldResult);
Settings_Vtiger_CompanyDetailsFieldSave_Action::addFieldToModule($newField);
$reloadUrl = 'index.php?parent=Settings&module=Vtiger&view=CompanyDetails&AddField=1';
$log->info("Settings_Vtiger_SaveCompanyField_Action::process - add column $newField in table vtiger_organizationdetails");
}

}else{
$reloadUrl = 'index.php?parent=Settings&module=Vtiger&view=CompanyDetails&AddField=0';
$log->info("Settings_Vtiger_SaveCompanyField_Action::process - field not valid");
}
header('Location: ' . $reloadUrl);
}

public function newFieldValidation($field){
$field = trim($field);
$field = mysql_escape_string($field);
$lenght = strlen($field);
$field = str_replace(" ","_", $field);
$field = strtolower($field);
if('' == $field)
$result = 'not valid';

if (preg_match('/[^a-z_A-Z]+/', $field, $matches))
$result = 'not valid';

if($lenght > 25)
$result = 'not valid';

if($result == 'not valid')
return FALSE;
else
return $field;
}
}