Cakephp Google RE Captcha not posting data - php

I am getting a undefined variable error when trying to use googles reCaptcha with 'g-recaptcha-response' according to their user docs https://developers.google.com/recaptcha/docs/verify
However when i submit my user form - no data is posted from the recaptcha - this makes me believe it is a view error.
Controller funtion
if ($this->request->is('post'))
{
//if ($this->Recaptcha->verify()) {
//verify captcha
debug($this->request->data);
$recaptcha_secret = "xxxxxxxxxxxxxxxxxxxxxxx";
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$recaptcha_secret."&response=".$this->request->data['g-recaptcha-response']);
$response = json_decode($response, true);
if($response["success"] == true){
}
else{
}
}
}
View.ctp
<script src='https://www.google.com/recaptcha/api.js'></script>
<?php
$this->set('title_for_layout', 'Sign Up '); ?>
<!-- -- TESTACL1
USERS ADD -- -->
<div class="container-fluid">
<div class="row">
<!-- div class="col-md-3">
</div -->
<div class="col-md-1">
</br></br>
</div>
<div class="col-md-5">
<div class="usersfor">
<?php
echo $this->Form->create(array(
'novalidate' => true,
'User'
)); ?>
<fieldset>
<legend><?php echo __('Sign Up for an Account'); ?></legend>
<?php
if ($this->Session->read('Auth.User')) {
echo 'It looks like you already have a Junto Account! We\'re pleased to hear it!';
echo '<br/>';
echo '<br/>*';
echo '<br/>**';
echo '<br/>***';
echo '<br/>****';
echo '<br/>*****';
echo '<br/>******';
echo '<br/>*******';
echo '<br/>******';
echo '<br/>****';
echo '<br/>***';
echo '<br/>**';
echo '<br/>*';
}
else {
// echo $this->Form->input('group_id', array ('class'=>'form-control','label' => 'Type Of Account:', 'type'=>'text','value'=>'Registered', 'maxLength' => '20'));
echo $this->Form->input('username', array(
'class' => 'form-control',
'label' => 'Email Address:',
'type' => 'text',
'maxLength' => '50',
'placeholder' => 'EG. johndoe#example.com',
'style' => 'width:75%;'
));
echo $this->Form->hidden('PassFrom', array(
'value' => ''
));
echo $this->Form->input('password', array(
'placeholder' => '(8 - 20 characters)',
'div' => 'chckbx',
'class' => 'form-control',
'label' => 'Create Password:',
'type' => 'password',
'maxLength' => '20',
'style' => 'width:55%;',
'min' => 8
));
echo $this->Form->input('first_name', array(
'placeholder' => 'EG. John',
'class' => 'form-control',
'label' => 'First Name:',
'type' => 'text',
'maxLength' => '45',
'style' => 'width:75%;'
));
echo $this->Form->input('last_name', array(
'placeholder' => 'EG. Doe',
'div' => 'chckbx',
'class' => 'form-control',
'label' => 'Last Name:',
'type' => 'text',
'maxLength' => '45',
'style' => 'width:75%;'
));
echo $this->Form->input('addressLineOne', array(
'placeholder' => 'EG. 99 Example Street',
'class' => 'form-control',
'label' => 'Address:',
'type' => 'text',
'maxLength' => '40',
'style' => 'width:75%;'
));
echo $this->Form->input('addressLineTwo', array(
'placeholder' => '(optional)',
'class' => 'form-control',
'label' => false,
'type' => 'text',
'maxLength' => '40',
'style' => 'width:75%;'
));
?>
</div>
</div>
<div class="col-md-6">
<p></br></p>
<p></br></p>
<p></br></p>
<?php
echo $this->Form->input('city', array(
'placeholder' => 'EG. Melbourne',
'class' => 'form-control',
'label' => 'Suburb:',
'type' => 'text',
'maxLength' => '60',
'style' => 'width:35%;'
)); ?>
<div class="row">
<div class="col-md-6">
<?php
echo $this->Form->input('state', array(
'class' => 'form-control',
'label' => 'State:',
'options' => array(
'VIC' => 'VIC',
'ACT' => 'ACT',
'NSW' => 'NSW',
'NT' => 'NT',
'QLD' => 'QLD',
'SA' => 'SA',
'TAS' => 'TAS',
'WA' => 'WA'
)
)); ?>
</div>
<div class="col-md-6">
<?php
echo $this->Form->input('postcode', array(
'placeholder' => '',
'class' => 'form-control',
'label' => 'Postcode:',
'type' => 'text',
'maxLength' => '4',
'style' => 'width:40%;'
)); ?>
</div>
</div>
<br/>
<?php
echo $this->Form->input('telephoneNumber', array(
'placeholder' => 'EG. 0401555777',
'class' => 'form-control',
'label' => 'Telephone Number (Include area code e.g. 0423232112):',
'maxLength' => '10',
'style' => 'width:37%;'
)); ?>
<b><?php echo "Date of Birth:"; ?></b>
<?php
echo $this->Form->input('dob', array(
'div' => 'chckbx',
'label' => '',
'dateFormat' => 'DMY',
'maxYear' => date('Y') ,
'minYear' => date('Y') - 70
));
// echo $this->Form->input('gender', array ('class'=>'form-control','label' => 'Gender:', 'options' => array('M'=>'Male','F'=>'Female')));
// echo $this->Form->input('newsletterSubscription', array ('class'=>'form-control','label' => 'Subscribe to Newsletter?:', 'options' => array('Y'=>'Yes','N'=>'No')));
?>
<br/>
<?php
$options = array(
'm' => ' Male ',
'f' => ' Female'
);
$attributes = array(
'legend' => false
);
echo $this->Form->radio('gender', $options, $attributes);
echo $this->Form->input('newsletterSubscription', array(
'div' => 'chckbx',
'value' => 'y',
'type' => 'checkbox',
'hiddenField' => 'n',
'label' => ' Subscribe To Junto Club Newsletter?'
));
}
?>
<div class="g-recaptcha" data-sitekey="6LfGCQETAAAAAOEMaiCsSVxyypunTvGBSsFWr5XW"></div>
</fieldset>
</br>
</br>
<div class="submit" align="center">
<?php
echo $this->Form->end(__('Submit')); ?>
<p></br></p>
<p></br></p>
</div>
<!-- End -->
<div class="col-md-2">
</div>
</div>
</div>
<div class="actions">
<!-- <h3><?php /* echo __('Actions'); ?></h3>
<ul>
<li><?php echo $this->Html->link(__('List Users'), array('action' => 'index')); ?></li>
<li><?php echo $this->Html->link(__('List Groups'), array('controller' => 'groups', 'action' => 'index')); ?> </li>
<li><?php echo $this->Html->link(__('New Group'), array('controller' => 'groups', 'action' => 'add')); */ ?> </li>
</ul> -->
</div>
</div>
update::
The issue appears to be caused by div tags. I was able to resolve the issue by placing the recaptcha widget inside a particular div.
<script src='https://www.google.com/recaptcha/api.js'></script>
<?php
$this->set('title_for_layout', 'Sign Up '); ?>
<!-- -- TESTACL1
USERS ADD -- -->
<div class="container-fluid">
<div class="row">
<!-- div class="col-md-3">
</div -->
<div class="col-md-1">
</br></br>
</div>
<div class="col-md-5">
<div class="usersfor">
<?php
echo $this->Form->create(array(
'novalidate' => true,
'User'
)); ?>
<fieldset>
<legend><?php echo __('Sign Up for an Account'); ?></legend>
<?php
if ($this->Session->read('Auth.User')) {
echo 'It looks like you already have a Junto Account! We\'re pleased to hear it!';
echo '<br/>';
echo '<br/>*';
echo '<br/>**';
echo '<br/>***';
echo '<br/>****';
echo '<br/>*****';
echo '<br/>******';
echo '<br/>*******';
echo '<br/>******';
echo '<br/>****';
echo '<br/>***';
echo '<br/>**';
echo '<br/>*';
}
else {
// echo $this->Form->input('group_id', array ('class'=>'form-control','label' => 'Type Of Account:', 'type'=>'text','value'=>'Registered', 'maxLength' => '20'));
echo $this->Form->input('username', array(
'class' => 'form-control',
'label' => 'Email Address:',
'type' => 'text',
'maxLength' => '50',
'placeholder' => 'EG. johndoe#example.com',
'style' => 'width:75%;'
));
echo $this->Form->hidden('PassFrom', array(
'value' => ''
));
echo $this->Form->input('password', array(
'placeholder' => '(8 - 20 characters)',
'div' => 'chckbx',
'class' => 'form-control',
'label' => 'Create Password:',
'type' => 'password',
'maxLength' => '20',
'style' => 'width:55%;',
'min' => 8
));
echo $this->Form->input('first_name', array(
'placeholder' => 'EG. John',
'class' => 'form-control',
'label' => 'First Name:',
'type' => 'text',
'maxLength' => '45',
'style' => 'width:75%;'
));
echo $this->Form->input('last_name', array(
'placeholder' => 'EG. Doe',
'div' => 'chckbx',
'class' => 'form-control',
'label' => 'Last Name:',
'type' => 'text',
'maxLength' => '45',
'style' => 'width:75%;'
));
echo $this->Form->input('addressLineOne', array(
'placeholder' => 'EG. 99 Example Street',
'class' => 'form-control',
'label' => 'Address:',
'type' => 'text',
'maxLength' => '40',
'style' => 'width:75%;'
));
echo $this->Form->input('addressLineTwo', array(
'placeholder' => '(optional)',
'class' => 'form-control',
'label' => false,
'type' => 'text',
'maxLength' => '40',
'style' => 'width:75%;'
));
?>
</div>
**<div class="g-recaptcha" data-sitekey="6LfGCQETAAAAAOEMaiCsSVxyypunTvGBSsFWr5XW"></div>**
</div>
<div class="col-md-6">
<p></br></p>
<p></br></p>
<p></br></p>
<?php
echo $this->Form->input('city', array(
'placeholder' => 'EG. Melbourne',
'class' => 'form-control',
'label' => 'Suburb:',
'type' => 'text',
'maxLength' => '60',
'style' => 'width:35%;'
)); ?>
<div class="row">
<div class="col-md-6">
<?php
echo $this->Form->input('state', array(
'class' => 'form-control',
'label' => 'State:',
'options' => array(
'VIC' => 'VIC',
'ACT' => 'ACT',
'NSW' => 'NSW',
'NT' => 'NT',
'QLD' => 'QLD',
'SA' => 'SA',
'TAS' => 'TAS',
'WA' => 'WA'
)
)); ?>
</div>
<div class="col-md-6">
<?php
echo $this->Form->input('postcode', array(
'placeholder' => '',
'class' => 'form-control',
'label' => 'Postcode:',
'type' => 'text',
'maxLength' => '4',
'style' => 'width:40%;'
)); ?>
</div>
</div>
<br/>
<?php
echo $this->Form->input('telephoneNumber', array(
'placeholder' => 'EG. 0401555777',
'class' => 'form-control',
'label' => 'Telephone Number (Include area code e.g. 0423232112):',
'maxLength' => '10',
'style' => 'width:37%;'
)); ?>
<b><?php echo "Date of Birth:"; ?></b>
<?php
echo $this->Form->input('dob', array(
'div' => 'chckbx',
'label' => '',
'dateFormat' => 'DMY',
'maxYear' => date('Y') ,
'minYear' => date('Y') - 70
));
// echo $this->Form->input('gender', array ('class'=>'form-control','label' => 'Gender:', 'options' => array('M'=>'Male','F'=>'Female')));
// echo $this->Form->input('newsletterSubscription', array ('class'=>'form-control','label' => 'Subscribe to Newsletter?:', 'options' => array('Y'=>'Yes','N'=>'No')));
?>
<br/>
<?php
$options = array(
'm' => ' Male ',
'f' => ' Female'
);
$attributes = array(
'legend' => false
);
echo $this->Form->radio('gender', $options, $attributes);
echo $this->Form->input('newsletterSubscription', array(
'div' => 'chckbx',
'value' => 'y',
'type' => 'checkbox',
'hiddenField' => 'n',
'label' => ' Subscribe To Junto Club Newsletter?'
));
}
?>
<div class="submit" align="center">
<?php echo $this->Form->end(__('Submit')); ?>
</div>
</fieldset>
</br>
</br>
<!-- End -->
<div class="col-md-2">
</div>
</div>
</div>
<div class="actions">
<!-- <h3><?php /* echo __('Actions'); ?></h3>
<ul>
<li><?php echo $this->Html->link(__('List Users'), array('action' => 'index')); ?></li>
<li><?php echo $this->Html->link(__('List Groups'), array('controller' => 'groups', 'action' => 'index')); ?> </li>
<li><?php echo $this->Html->link(__('New Group'), array('controller' => 'groups', 'action' => 'add')); */ ?> </li>
</ul> -->
</div>
</div>
But why would this be affecting me in this way?
Error thrown
Notice (8): Undefined index: g-recaptcha-response [APP\Controller\UsersController.php, line 73]
Code Context
UsersController::add() - APP\Controller\UsersController.php, line 73
ReflectionMethod::invokeArgs() - [internal], line ??
Controller::invokeAction() - CORE\Cake\Controller\Controller.php, line 490
Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 191
Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 165
[main] - APP\webroot\index.php, line 108
Debug
array(
'User' => array(
'password' => '*****',
'username' => '',
'PassFrom' => '',
'first_name' => '',
'last_name' => '',
'addressLineOne' => '',
'addressLineTwo' => '',
'city' => '',
'state' => 'VIC',
'postcode' => '',
'telephoneNumber' => '',
'dob' => array(
'day' => '27',
'month' => '01',
'year' => '2015'
),
'gender' => '',
'newsletterSubscription' => 'n'
)
)

I'm having the same problem. g-recaptcha-response is in the POST array, but it's not in $this->data. See:
Array
(
[_method] => POST
[data] => Array
(
[BlogPostComment] => Array
(
[name] => shannon
[email] => shannon#home.com
[text] => asdf
[blog_post_id] => 11
[remote_ip] => 184.00.00.001
)
)
[g-recaptcha-response] => 03AHJ_VutSTvzfJze9pkzpcwQE3Xdf [ ... truncated...]
)
That's because the other form elements have ids like BlogPostCommentName or BlogPostCommentEmail, which get into $this->data array as:
[BlogPostComment] => Array
(
[name] => shannon
[email] => shannon#home.com
)
...and so on. But the recaptcha input's id is g-recaptcha-response, so it's not considered part of that set. This makes it difficult to validate the response. I don't know how to solve that yet, but anyway, that's where your posted data is probably ending up.

Related

Navigation side bar not showing correctly

I referred this site http://demos.krajee.com/widget-details/sidenav
I have added kartik navigation side bar in main layout as per follows but not showing properly, in the frst image I have shown the output & in the next image my expected output.
<?php
use yii\helpers\Url;
use kartik\sidenav\SideNav;
use yii\helpers\Html;
use yii\widgets\Breadcrumbs;
use frontend\assets\AppAsset;
use common\widgets\Alert;
AppAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="<?= Yii::$app->language ?>">
<head>
<meta charset="<?= Yii::$app->charset ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?= Html::csrfMetaTags() ?>
<title><?= Html::encode($this->title) ?></title>
<?php $this->head() ?>
</head>
<body>
<?php $this->beginBody() ?>
<?php
$menuItems = [
/*['label' => 'Home', 'url' => ['/site/index']],*/
/*['label' => 'Contact', 'url' => ['/site/contact']],*/
];
if (Yii::$app->user->isGuest) {
//$menuItems[] = ['label' => 'Enquiry', 'url' => ['/site/acenquiry']];
$menuItems[] = ['label' => 'Signup', 'url' => ['/site/signup']];
$menuItems[] = ['label' => 'Login', 'url' => ['/site/login']];
} else {
//print_r(Yii::$app->user->id);
$menuItems[]=[
'label'=>'Dashboard',
'url'=>['/site/dashboard','date'=>'1','status'=>'0'],
];
$menuItems[]=['label' => 'View',
'items' => [
['label' => 'Companies',
'url' => ['/company']
],
['label' => 'Projects',
'url' => ['/project']
],
['label' => 'Documents',
'url' => ['/quotedocs']
],
['label' => 'Quotations',
'url' => ['/quotations']
],
['label' => 'Payments',
'url' => ['/grptankpayment']
],
],
];
$menuItems[]=['label' => 'Configuration',
'items' => [
['label' => 'Status Types',
'url' => ['/status']
],
['label' => 'Document Types',
'url' => ['/doctype']
],
['label' => 'Task Types',
'url' => ['/tasktype']
],
],
];
$menuItems[]=['label' => 'GRP',
'items' => [
['label' => 'GRP Panels',
'url' => ['/grptankpanels']
],
['label' => 'GRP Tools',
'url' => ['/grptanktools']
],
['label' => 'GRP Main Accessories',
'url' => ['/grptankaccessories']
],
['label' => 'GRP Sub Accessories',
'url' => ['/grptanksubaccessories']
],
],
];
$menuItems[]=[
'label'=>'Company',
'url'=>['/company/create'],
'linkOptions' => ['data-method' => 'post']
];
$menuItems[]=['label' => 'Project',
'items' => [
['label'=>'Create Project',
'url'=>['/project/create'],
],
['label'=>'Project Execution',
'url'=>['/project-execution/create'],
],
],
];
$menuItems[] = [
'label' => 'Quotation',
'url' => ['/quotations/create'],
'linkOptions' => ['data-method' => 'post']
];
$menuItems[]=[
'label'=>'Sekisui',
'url'=>['/grptanksekisui/create'],
'linkOptions' => ['data-method' => 'post']
];
$menuItems[] = [
'label' => 'Docs',
'url' => ['/quotedocs/create'],
'linkOptions' => ['data-method' => 'post']
];
$menuItems[] = [
'label' => 'Payments',
'url' => ['/grptankpayment/create'],
'linkOptions' => ['data-method' => 'post']
];
$menuItems[] = [
'label' => 'My Tasks',
'url' => ['/task'],
'linkOptions' => ['data-method' => 'post']
];
$menuItems[] = [
'label' => 'Logout (' . Yii::$app->user->identity->username . ')',
'url' => ['/site/logout'],
'linkOptions' => ['data-method' => 'post']
];
}
/*echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => $menuItems,
]);*/
?>
<div class="container">
<?php echo SideNav::widget([
'encodeLabels' => false,
'items' => $menuItems,
'type' => SideNav::TYPE_PRIMARY
]); ?>
<?= Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]) ?>
<?= Alert::widget() ?>
<?= $content ?>
</div>
<footer class="footer">
<div class="container">
<p class="pull-right">© Test Company <?= date('Y') ?></p>
</div>
</footer>
<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>
Output image
It should be like this:
It is most likely because you didn't specify bootstrap column widths (col-sm-X). To get pretty similar result, you should add 2 additional parent divs.
Instead of:
<div class="container">
<?php echo SideNav::widget([
'encodeLabels' => false,
'items' => $menuItems,
'type' => SideNav::TYPE_PRIMARY
]); ?>
<?= Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]) ?>
<?= Alert::widget() ?>
<?= $content ?>
</div>
Would be:
<div class="container">
<div class="col-sm-3">
<?php echo SideNav::widget([
'encodeLabels' => false,
'items' => $menuItems,
'type' => SideNav::TYPE_PRIMARY
]); ?>
</div>
<div class="col-sm-9">
<?= Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]) ?>
<?= $content ?>
</div>
</div>
I used just small but you can add more options here.

cakephp-upload won´t validate

I´am using the plugin
https://github.com/josegonzalez/cakephp-upload
for image upload.
I won´t to disable adding post without uploaded image.
How to write validation to it?
class BlogContent extends AppModel
{
public $validate = array(
'title' => array(
'rule' => 'notEmpty',
'message' => 'Titulok musí byť zadaný'
),
'text' => array(
'rule' => 'notEmpty',
'required' => true,
'message' => 'Text musí byť zadaný'
),
'photo' => array(
'isUpload' => array(
'rule' => 'isFileUpload',
'required' => true,
'message' => 'Článok musí obsahovať obrázok',
'last' => false
),
'isCompletedUpload' => array(
'rule' => 'isCompletedUpload',
'message' => 'Obrázok nebol úspešne nahratý',
'last' => false
),
'tempDirExists' => array(
'rule' => 'tempDirExists',
'message' => 'Priečinok TEMP nie je dostupný',
'last' => false
),
...
If I use required=> true for isUpload, it will never validates. However if I not type it, it will validates without uploading image.
View code: admin_add.ctp
<div class="blogContents form">
<?php echo $this->Form->create('BlogContent', array('type' => 'file'));
echo $this->Form->input('title', array('label' => 'Titulok'));
echo $this->Form->input('text', array('class' => 'ckeditor', 'label' => ''));
echo $this->Form->input('image', array('label' => '', 'type' => 'file', 'accept' => 'image/*'));
echo $this->Html->link(__('Vybrať obrázok'), '#', array('class' => 'btn btn-default', 'id' => 'upload'));
echo _('<p>Zvolený obrázok:</p>');
echo $this->Html->div('filelist', '<p>Žiaden obrázok nebol zvolený</p>');
echo $this->Form->input('image_dir', array('type' => 'hidden'));
echo $this->Form->input('active', array('label' => 'Publikované'));
echo $this->Form->submit(__('Uložiť článok'), array('class' => 'btn btn-success')) ?>
</div>

CakePHP input stopped working

I'm completely new with cake, so I have no clue what happened.
this code works :
echo $this->Form->input('phone',
array(
'required' => false,
'div' => 'form-group',
'class' => 'form-control',
'label' => array(
'class' => 'control-label',
'text' => __d('admin', 'Tel. numeris')
),
'placeholder' => __d('admin', 'Tel. numeris'),
'error' => array(
'attributes' => array(
'class' => 'alert alert-danger'
)
)
)
);
this one doesn't :
echo $this->Form->input('email',
array(
'required' => false,
'div' => 'form-group',
'class' => 'form-control',
'label' => array(
'class' => 'control-label',
'text' => __d('admin', 'El.paštas')
),
'placeholder' => __d('admin', 'El.paštas'),
'error' => array(
'attributes' => array(
'class' => 'alert alert-danger'
)
)
)
);
and for example if I change email to, lets say, emailas, it works too(but then it doesnt do anything) :
echo $this->Form->input('emailas',
array(
'required' => false,
'div' => 'form-group',
'class' => 'form-control',
'label' => array(
'class' => 'control-label',
'text' => __d('admin', 'El.paštas')
),
'placeholder' => __d('admin', 'El.paštas'),
'error' => array(
'attributes' => array(
'class' => 'alert alert-danger'
)
)
)
);
could someone please help me or at least tell me where to look? The input stopped working out of the blue, so maybe theres a possibility to somehow restart whole plugin? THANK YOU IN ADVANCE
P.S.
This is how the input field looks atm vs how it should look like : http://imgur.com/bBrkgxM
Try this:
echo $this->Form->input('email',
array(
'required' => false,
'div' => 'form-group',
'class' => 'form-control',
'type' => 'email',
'label' => array(
'class' => 'control-label',
'text' => __d('admin', 'El.paštas')
),
'placeholder' => __d('admin', 'El.paštas'),
'error' => array(
'attributes' => array(
'class' => 'alert alert-danger'
)
)
)
);
And make sure you have email field in database and nowhere is overriding email field (in controller / model)

Cakephp trying to validate non existing input

I have never seen this before. I have a form with multiple models connected to one. When I submit the form, Cake is trying to validate fields with no vaildation and it even is trying to validate a field that I changed the name on. I have cleared the model cache in the tmp folder. I am stumped. Here is my code.
View:
echo $this->Form->create('Lead', array('class' => 'form form-vertical'));
echo $this->Form->input('Lead.project_name', array('class' => 'form-control', 'div'=>array('class'=>'col-md-12'), 'value' => 'Project'.$userId));
echo $this->Form->input('Lead.sales_owner', array('class' => 'form-control', 'value' => $fullName, 'div'=>array('class'=>'col-md-4')));
$leadSourceOptions = array('Door to Door' => 'Door to Door','Referral' => 'Referral','Inbound Call' => 'Inbound Call','Self Generated by Closer' => 'Self Generated by Closer','Tradeshows' => 'Tradeshows','Telemarketing' => 'Telemarketing',);
echo $this->Form->input('Lead.lead_source', array('class' => 'form-control', 'type' => 'select', 'options' => $leadSourceOptions, 'div'=>array('class'=>'col-md-4')));
$typeOptions = array('Individual' => 'Individual', 'Business' => 'Business', 'Government' => 'Government');
echo $this->Form->input('Lead.type', array('class' => 'form-control', 'type' => 'select', 'options' => $typeOptions, 'div'=>array('class'=>'col-md-6')));
$taxOptions = array('Individual' => 'Individual', 'Corporation' => 'Corporation', 'LLC (Corporation)' => 'LLC (Corporation)', 'LLC (Non-Corporation)' => 'LLC (Non-Corporation)', 'Partnership' => 'Partnership', 'Sole Proprietor' => 'Sole Proprietor', 'Tax Exempt' => 'Tax Exempt');
echo $this->Form->input('Lead.tax_entity', array('class' => 'form-control', 'type' => 'select', 'options' => $taxOptions, 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('Customer.first_name', array('class' => 'form-control', 'div'=>array('class'=>'col-md-5')));
echo $this->Form->input('Customer.last_name', array('class' => 'form-control', 'div'=>array('class'=>'col-md-5')));
$titleOptions = array('Mr' => 'Mr', 'Mrs' => 'Mrs', 'Ms' => 'Ms');
echo $this->Form->input('Customer.title', array('class' => 'form-control', 'type' => 'select', 'options' => $titleOptions, 'div'=>array('class'=>'col-md-2')));
echo $this->Form->input('Customer.email', array('class' => 'form-control', 'div'=>array('class'=>'col-md-5')));
echo $this->Form->input('Customer.phone', array('class' => 'form-control', 'placeholder' => '123-456-7890', 'div'=>array('class'=>'col-md-5')));
echo $this->Form->input('Customer.phone_extension', array('required' => false, 'class' => 'form-control', 'label' => 'Ext', 'div'=>array('class'=>'col-md-2')));
$phoneOptions = array('Home' => 'Home', 'Mobile' => 'Mobile', 'Business' => 'Business', 'Business Fax' => 'Business Fax', 'Home Fax' => 'Home Fax', 'Pager' => 'Pager', 'Skype' => 'Skype');
echo $this->Form->input('Customer.phone_type', array('class' => 'form-control', 'type' => 'select', 'options' => $phoneOptions, 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('Customer.best_time_of_day_to_reach', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('Customer.address', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('Customer.address_line_2', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('Customer.city', array('class' => 'form-control', 'div'=>array('class'=>'col-md-5')));
echo $this->Form->input('Customer.state', array('class' => 'form-control', 'type' => 'select', 'options' => $states, 'selected' => 'UT', 'div'=>array('class'=>'col-md-5')));
echo $this->Form->input('Customer.zip', array('class' => 'form-control', 'div'=>array('class'=>'col-md-2')));
echo '<div class="clear"></div>';
echo $this->Form->input('mailing', array('type' => 'checkbox', 'label' => 'Mailing address the is different from the home address?', 'hiddenField' => false, 'div'=>array('class'=>'col-md-12')));
echo $this->Form->input('Customer.mailing_street', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('Customer.mailing_address_line_2', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('Customer.mailing_city', array('class' => 'form-control', 'div'=>array('class'=>'col-md-5')));
echo $this->Form->input('Customer.mailing_state', array('class' => 'form-control', 'type' => 'select', 'options' => $states, 'selected' => '', 'div'=>array('class'=>'col-md-5')));
echo $this->Form->input('Customer.mailing_zip', array('class' => 'form-control', 'div'=>array('class'=>'col-md-2')));
$serviceTypeOptions = array('Residential' => 'Residential', 'Commercial' => 'Commercial');
echo $this->Form->input('EnergyUsage.service_type', array('class' => 'form-control', 'type' => 'select', 'options' => $serviceTypeOptions, 'div'=>array('class'=>'col-md-4')));
echo $this->Form->input('EnergyUsage.utility', array('class' => 'form-control', 'type' => 'select', 'options' => $utilities, 'selected' => 'Rocky Mountain Power (Utah Power)', 'div'=>array('class'=>'col-md-4')));
$voltageOptions = array('240 V : 120 V Split Phase' => '240 V : 120 V Split Phase', 'V Delta: 277 V Wye 3 Phase' => 'V Delta: 277 V Wye 3 Phase', '208 V Delta 3 Phase' => '240 V Split Phase Delta 3 Phase (Aka Stinger, Or High Leg Delta)', '240 V Split Phase Delta 3 Phase (Aka Stinger, Or High Leg Delta)' => '208 V Delta : 120 V Wye 3 Phase', '208 V Delta : 120 V Wye 3 Phase' => '240 V Delta 3 Phase', '240 V Delta 3 Phase');
echo $this->Form->input('EnergyUsage.service_config_voltage', array('class' => 'form-control', 'type' => 'select', 'options' => $voltageOptions, 'div'=>array('class'=>'col-md-4')));
echo $this->Form->input('EnergyUsage.utility_account_number', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('EnergyUsage.billing_period_one_start_date', array('class' => 'form-control datepicker', 'div'=>array('class'=>'col-md-6')));
echo $this->Form->input('EnergyUsage.notes', array('class' => 'form-control', 'div'=>array('class'=>'col-md-12')));
function daysInMonth($month){
$today = date('Y-m-d');
$date = explode('-',$today);
if($month > $date[1]){ $year = $date[0]-1;}else{$year = date('Y');}
return cal_days_in_month(CAL_GREGORIAN, $month, $year);
}
echo $this->Form->input('MonthyUsage.jan_billing_days', array('class' => 'form-control', 'value' => daysInMonth(1), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.jan_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.feb_billing_days', array('class' => 'form-control', 'value' => daysInMonth(2), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.feb_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.mar_billing_days', array('class' => 'form-control', 'value' => daysInMonth(3), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.mar_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.apr_billing_days', array('class' => 'form-control', 'value' => daysInMonth(4), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.apr_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.may_billing_days', array('class' => 'form-control', 'value' => daysInMonth(5), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.may_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.jun_billing_days', array('class' => 'form-control', 'value' => daysInMonth(6), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.jun_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.jul_billing_days', array('class' => 'form-control', 'value' => daysInMonth(7), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.jul_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.aug_billing_days', array('class' => 'form-control', 'value' => daysInMonth(8), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.aug_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.sep_billing_days', array('class' => 'form-control', 'value' => daysInMonth(9), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.sep_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.oct_billing_days', array('class' => 'form-control', 'value' => daysInMonth(10), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.oct_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.nov_billing_days', array('class' => 'form-control', 'value' => daysInMonth(11), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.nov_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.dec_billing_days', array('class' => 'form-control', 'value' => daysInMonth(12), 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo $this->Form->input('MonthyUsage.dec_consumption', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6 col-sm-6')));
echo '<div class="col-md-6 margin-top3"></div>';
echo $this->Form->input('EnergyUsage.average_billing_amount', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6')));
//echo $this->Form->input('image_upload', array('class' => 'form-control', 'div'=>array('class'=>'col-md-6'), 'type' => 'file', 'accept' => 'image/*', 'catpture' => 'camera'));
echo $this->Form->end(__('Submit')); ?>
Model:
App::uses('AppModel', 'Model');
class Lead extends AppModel {
public $validate = array('project_name' => array( 'notEmpty' => array('rule' => array('notEmpty'),//'message' => 'Your custom message here',),),);
public $belongsTo = array('User' => array('className' => 'User','foreignKey' => 'user_id','conditions' => '','fields' => '', 'order' => ''));
public $hasMany = array(
'Customer' => array('className' => 'Customer','foreignKey' => 'lead_id','dependent' => false,),
'EngeryUsage' => array('className' => 'EngeryUsage','foreignKey' => 'lead_id','dependent' => false, ),
'MonthlyUsage' => array('className' => 'MonthlyUsage', 'foreignKey' => 'lead_id','dependent' => false,),);
}
App::uses('AppModel', 'Model');
class Customer extends AppModel {
public $validate = array(
'lead_id' => array('numeric' => array('rule' => array('numeric'),//'message' => 'Your custom message here', ),),
'first_name' => array('notEmpty' => array('rule' => array('notEmpty'),//'message' => 'Your custom message here', ),),
'last_name' => array('notEmpty' => array('rule' => array('notEmpty'), //'message' => 'Your custom message here',), ),
'phone' => array('notEmpty' => array('rule' => array('notEmpty'),//'message' => 'Your custom message here',),),
'phone_extension' => array('numeric' => array('rule' => array('numeric'), 'message' => 'Your custom message here','allowEmpty' => true,'required' => false,),),
'address' => array('notEmpty' => array('rule' => array('notEmpty'),//'message' => 'Your custom message here',),),
'city' => array('notEmpty' => array('rule' => array('notEmpty'),//'message' => 'Your custom message here',),),
'state' => array('notEmpty' => array('rule' => array('notEmpty'),//'message' => 'Your custom message here',),),
'zip' => array('numeric' => array('rule' => array('numeric'),//'message' => 'Your custom message here',),),
);
public $belongsTo = array('Lead' => array('className' => 'Lead','foreignKey' => 'lead_id',));
}
App::uses('AppModel', 'Model');
class EnergyUsage extends AppModel {
public $validate = array('lead_id' => array('numeric' => array('rule' => array('numeric'),//'message' => 'Your custom message here',),),);
public $belongsTo = array('Lead' => array('className' => 'Lead','foreignKey' => 'lead_id'));
}
App::uses('AppModel', 'Model');
class MonthyUsage extends AppModel {
public $belongsTo = array( 'Lead' => array('className' => 'Lead','foreignKey' => 'lead_id'));
}
in the controller when I debug validationErrors I get:
array(
'phone_extension' => array(),
'best_time_of_day_to_reach' => array(),
'address_line_2' => array(),
'mailing_street' => array(),
'mailing_address_line_2' => array(),
'mailing_city' => array(),
'mailing_zip' => array(),
'ext' => array()
)
This is the debug statement with the customer input fields removed:
array(
'Lead' => array(
'project_name' => 'Project1',
'sales_owner' => 'Nate Branning',
'lead_source' => 'Door to Door',
'type' => 'Individual',
'tax_entity' => 'Individual'
),
'Customer' => array(
'first_name' => '',
'last_name' => '',
'title' => 'Mr',
'email' => '',
'phone' => '',
'phone_extension' => '',
'phone_type' => 'Home',
'best_time_of_day_to_reach' => '',
'address' => '',
'address_line_2' => '',
'city' => '',
'state' => 'UT',
'zip' => '',
'mailing_street' => '',
'mailing_address_line_2' => '',
'mailing_city' => '',
'mailing_state' => 'AL',
'mailing_zip' => ''
),
'EnergyUsage' => array(
'service_type' => 'Residential',
'utility' => 'Rocky Mountain Power (Utah Power)',
'service_config_voltage' => '240 V : 120 V Split Phase',
'utility_account_number' => '',
'billing_period_one_start_date' => '',
'notes' => '',
'average_billing_amount' => ''
),
'MonthyUsage' => array(
'jan_billing_days' => '31',
'jan_consumption' => '',
'feb_billing_days' => '28',
'feb_consumption' => '',
'mar_billing_days' => '31',
'mar_consumption' => '',
'apr_billing_days' => '30',
'apr_consumption' => '',
'may_billing_days' => '31',
'may_consumption' => '',
'jun_billing_days' => '30',
'jun_consumption' => '',
'jul_billing_days' => '31',
'jul_consumption' => '',
'aug_billing_days' => '31',
'aug_consumption' => '',
'sep_billing_days' => '30',
'sep_consumption' => '',
'oct_billing_days' => '31',
'oct_consumption' => '',
'nov_billing_days' => '30',
'nov_consumption' => '',
'dec_billing_days' => '31',
'dec_consumption' => ''
)
)
Thanks in advance.
I solved my problem. I had the associations wrong. Customer, EnergyUsage and MonthyUsage belong to Lead. Where the error was in the leads controller I had the association as hasMany. Whe I changed it to hasOne it fixed the issue. I think cake was trying to validate Customer more than once.

How to merge two arrays into one in CodeIgniter?

This is my config file which contains form attributes in CodeIgniter.
$config['reg_attribute'] = array(
'form' => array(
'id' => 'reg-form',
'class' => 'form-horizontal',
'role' => 'form'
),
'name' => array(
'id'=>'reg-name',
'class' => 'form-control',
'name'=>'name',
'placeholder' => 'Enter name',
'value'=>set_value('name')
),
'gender' => array(
'id'=>'reg-reg',
'class' => 'form-control',
'name'=>'gender',
'value'=>set_value('gender')
),
'contact_no' => array(
'id'=>'reg-reg',
'class' => 'form-control',
'name'=>'contact_no',
'placeholder' => 'Enter Phone number',
'value'=>set_value('contact_no')
),
'email'=> array(
'id'=>'reg-email',
'class' => 'form-control',
'name'=>'email',
'placeholder' => 'Enter Email',
'value'=>set_value('email')
),
'password' =>array(
'id'=>'reg-password',
'class' => 'form-control',
'name'=>'password',
'placeholder'=>'Enter Password',
'value'=>set_value('password')
),
'confirm_password' =>array(
'id'=>'reg-password',
'class' => 'form-control',
'name'=>'confirm_password',
'placeholder'=>'Enter Confirm Password',
'value'=>set_value('confirm_password')
),
'submit' =>array(
'id' => 'btn-login',
'class' => 'btn btn-success',
'name' => 'submit',
'value' => 'Register'
)
);
Here I'm loading the form attributes from config and storing it into
an array $data["reg_attrib"]
$this->config->load('reg_rules');
$data["reg_attrib"] = $this->config->item("reg_attribute");
I have an another array which is $add_form
$add_form = array(
'action' => base_url('admin/user/insert'),
'title' => 'Add User',
);
Now I want to merge both the array's into a single array
and send it to view i.e to $add_attributes.
$this->admin_layout->view('admin/add_user',$add_attributes);
Simply merge them with array_merge(). Try this -
$add_attributes = array_merge($data["reg_attrib"], $add_form);
use array_merge() function like
$merged_arr = array_merge($arr1,$arr2);
in your case it will be same as #BOSE suggested:
$add_attributes = array_merge($data["reg_attrib"], $add_form);

Categories