/home/smartonegroup/www/system/system/controllers/leads.php
<?php
/*
|--------------------------------------------------------------------------
| Controller
|--------------------------------------------------------------------------
|
*/
_auth();
$ui->assign('selected_navigation', 'leads');
$ui->assign('_title', $_L['Leads'] . '- ' . $config['CompanyName']);
$action = route(1, 'list');
$user = authenticate_admin();
Event::trigger('leads');
switch ($action) {
case 'list':
$ui->assign('salutations', db_find_array('crm_salutations'));
$ui->assign('sources', db_find_array('crm_lead_sources'));
$ui->assign('industries', db_find_array('crm_industries'));
$ui->assign('ls', db_find_array('crm_lead_status'));
$ui->assign(
'companies',
db_find_array('sys_companies', ['id', 'company_name'])
);
view('leads');
break;
case 'modal_lead':
$act = route(2);
$ui->assign('act', $act);
$ui->assign('salutations', db_find_array('crm_salutations'));
$ui->assign('sources', db_find_array('crm_lead_sources'));
$ui->assign('industries', db_find_array('crm_industries'));
$ui->assign('ls', db_find_array('crm_lead_status'));
$ui->assign(
'companies',
db_find_array('sys_companies', ['id', 'company_name'])
);
$val = [];
if ($act == 'view') {
$id = route(3);
$id = str_replace('vid', '', $id);
$id = str_replace('xid', '', $id);
$lead = ORM::for_table('crm_leads')->find($id);
if ($lead) {
$ui->assign('lead', $lead);
}
} elseif ($act == 'edit') {
$lid = route(3);
$lid = str_replace('eid', '', $lid);
$lead = db_find_one('crm_leads', $lid);
if ($lead) {
$val['status'] = $lead->status;
$val['salutation'] = $lead->salutation;
$val['first_name'] = $lead->first_name;
$val['middle_name'] = $lead->middle_name;
$val['last_name'] = $lead->last_name;
$val['suffix'] = $lead->suffix;
$val['title'] = $lead->title;
$val['company'] = $lead->company;
$val['website'] = $lead->website;
$val['industry'] = $lead->industry;
$val['employees'] = $lead->employees;
$val['email'] = $lead->email;
$val['phone'] = $lead->phone;
$val['source'] = $lead->source;
$val['address'] = $lead->address;
$val['street'] = $lead->street;
$val['city'] = $lead->city;
$val['state'] = $lead->state;
$val['zip'] = $lead->zip;
$val['country'] = $lead->country;
$val['public'] = $lead->public;
$val['ratings'] = $lead->ratings;
$val['street'] = $lead->street;
$val['country'] = $lead->country;
$val['assigned'] = $lead->assigned;
$val['lid'] = $lead->id;
}
} else {
$val['status'] = '';
$val['salutation'] = '';
$val['first_name'] = '';
$val['middle_name'] = '';
$val['last_name'] = '';
$val['suffix'] = '';
$val['title'] = '';
$val['company'] = '';
$val['website'] = '';
$val['industry'] = '';
$val['employees'] = '';
$val['email'] = '';
$val['phone'] = '';
$val['source'] = '';
$val['address'] = '';
$val['street'] = '';
$val['city'] = '';
$val['state'] = '';
$val['zip'] = '';
$val['country'] = '';
$val['public'] = '';
$val['ratings'] = '';
$val['street'] = '';
$val['country'] = '';
$val['assigned'] = '';
$val['lid'] = '';
}
$ui->assign('val', $val);
view('modal_lead');
break;
case 'post':
$act = _post('act');
$data = ib_posted_data();
$data['oid'] = $user->id;
if ($act == 'view') {
} elseif ($act == 'edit') {
echo Leads::update($data['lid'], $data);
} else {
echo Leads::create($data);
}
break;
case 'json_list':
$data = request()->all();
$columns = [];
$columns[] = 'id';
$columns[] = 'name';
$columns[] = 'title';
$columns[] = 'company';
$columns[] = 'phone';
$columns[] = 'email';
$columns[] = 'status';
$columns[] = 'owner';
$columns[] = 'manage';
$order_by = $data['order'];
$o_c_id = $order_by[0]['column'];
$o_type = $order_by[0]['dir'];
$a_order_by = $columns[$o_c_id];
$d = Lead::query()
->select(['id', 'salutation', 'first_name', 'middle_name', 'last_name', 'title', 'company', 'company_id', 'email', 'phone', 'o', 'status', 'oid', 'created_at', 'updated_at']);
$first_name = _post('first_name');
if ($first_name != '') {
$d->where('first_name', 'like', "%$first_name%");
}
$last_name = _post('last_name');
if ($last_name != '') {
$d->where('last_name', 'like', "%$last_name%");
}
$middle_name = _post('middle_name');
if ($middle_name != '') {
$d->where('middle_name', 'like', "%$middle_name%");
}
$email = _post('email');
if ($email != '') {
$d->where('email', 'like', "%$email%");
}
$salutation = _post('salutation');
if ($salutation != '') {
$d->where('salutation', 'like', "%$salutation%");
}
$company = _post('company');
if ($company != '') {
$d->where('company', 'like', "%$company%");
}
$phone = _post('phone');
if ($phone != '') {
$d->where('phone', 'like', "%$phone%");
}
$status = _post('status');
if ($status != '') {
$d->where('status', 'like', "%$status%");
}
if(!empty($data['search'])){
if($data['search']['value'] != ''){
$d->where(function ($query) use ($data) {
$query->where('first_name', 'like', "%{$data['search']['value']}%")
->orWhere('last_name', 'like', "%{$data['search']['value']}%")
->orWhere('middle_name', 'like', "%{$data['search']['value']}%")
->orWhere('title', 'like', "%{$data['search']['value']}%")
->orWhere('email', 'like', "%{$data['search']['value']}%")
->orWhere('salutation', 'like', "%{$data['search']['value']}%")
->orWhere('company', 'like', "%{$data['search']['value']}%")
->orWhere('phone', 'like', "%{$data['search']['value']}%")
->orWhere('status', 'like', "%{$data['search']['value']}%");
});
}
}
$x = $d->get();
$iTotalRecords = $d->count();
$iDisplayLength = (int) $_REQUEST['length'];
$iDisplayLength =
$iDisplayLength < 0 ? $iTotalRecords : $iDisplayLength;
$iDisplayStart = (int) $_REQUEST['start'];
$sEcho = (int) $_REQUEST['draw'];
$records = [];
$records["data"] = [];
$end = $iDisplayStart + $iDisplayLength;
$end = $end > $iTotalRecords ? $iTotalRecords : $end;
if ($o_type == 'desc') {
$d->orderBy($a_order_by, 'desc');
} else {
$d->orderBy($a_order_by, 'asc');
}
if (!has_access($user->roleid, 'leads', 'all_data')) {
$d->where('aid', $user->id);
}
$d->limit($end);
$d->offset($iDisplayStart);
$x = $d->get();
$i = $iDisplayStart;
foreach ($x as $xs) {
$status = $xs->status;
if($status== 'Nurturing'){
$status = '<span class="badge bg-warning">'.$status.'</span>';
}
elseif($status== 'Qualified'){
$status = '<span class="badge bg-success">'.$status.'</span>';}
else{
$status = '<span class="badge bg-danger">'.$status.'</span>';
}
$records["data"][] = [
$xs->id,
'<a href="#" class="cview" id="xid' .
$xs->id .
'">' .
$xs->salutation .
' ' .
$xs->first_name .
' ' .
$xs->middle_name .
' ' .
$xs->last_name .
'</a>',
$xs->title,
$xs->company,
$xs->phone,
$xs->email,
$status,
$xs->o,
'
<div class="btn-group">
<a href="#" class="btn btn-primary btn-xs cview" id="vid' .
$xs->id .
'"><i class="fal fa-search"></i> </a>
<a href="#" class="btn btn-warning btn-xs cedit" id="eid' .
$xs->id .
'"><i class="fal fa-pencil"></i> </a>
<a href="#" class="btn btn-danger btn-xs cdelete" id="did' .
$xs->id .
'"><i class="fal fa-trash-alt"></i> </a>
</div>
',
];
}
$records["draw"] = $sEcho;
$records["recordsTotal"] = $iTotalRecords;
$records["recordsFiltered"] = $iTotalRecords;
api_response($records);
break;
case 'convert_to_customer':
$lid = _post('lid');
echo Leads::convertToCustomer($lid);
break;
case 'update_memo':
$data = request()->all();
$lid = _post('lid');
$memo = $data['memo'];
echo Leads::updateMemo($lid, $memo);
break;
case 'web-to-lead':
$lead_forms = LeadForm::select(['id', 'uuid', 'name', 'created_at'])
->orderBy('id', 'desc')
->get();
$lead_form_ids = $lead_forms
->keyBy('id')
->keys()
->all();
$leads = Lead::whereIn('form_id', $lead_form_ids)
->select(['id', 'form_id'])
->get();
$leads_count = [];
foreach ($leads as $lead) {
if (isset($leads_count[$lead->form_id])) {
++$leads_count[$lead->form_id];
continue;
}
$leads_count[$lead->form_id] = 1;
}
view('leads_web_to_lead', [
'lead_forms' => $lead_forms,
'leads_count' => $leads_count,
]);
break;
case 'form':
$selected_form = false;
$id = route(2);
if ($id !== '' && $id !== '0') {
$selected_form = LeadForm::find($id);
}
$lead_sources = LeadSource::get();
view('lead_form', [
'lead_sources' => $lead_sources,
'selected_form' => $selected_form,
]);
break;
case 'form-embed':
$id = route(2);
if ($id !== '' && $id !== '0') {
$lead_form = LeadForm::find($id);
if ($lead_form) {
$embed_code =
'<iframe width="100%" height="800"
src="' .
U .
'client/form/' .
$lead_form->uuid .
'/embed/"
frameborder="0"
allowfullscreen>
</iframe>';
$embed_code = htmlentities($embed_code);
view('leads_form_embed', [
'lead_form' => $lead_form,
'embed_code' => $embed_code,
]);
}
}
break;
case 'save-form':
$validator = new Validator();
$data = $request->all();
$validation = $validator->validate($data, [
'name' => 'required',
'submit_button_name' => 'required',
'success_message' => 'required',
'source_id' => 'required',
'admin_id' => 'required',
]);
$lead_form = false;
if ($validation->fails()) {
responseWithError($_L['All Fields are Required']);
} else {
if (isset($data['form_id'])) {
$lead_form_id = (int) $data['form_id'];
$lead_form = LeadForm::find($lead_form_id);
}
if (!$lead_form) {
$lead_form = new LeadForm();
$lead_form->uuid = (string) sp_uuid();
}
$lead_form->name = $data['name'];
$lead_form->submit_button_name = $data['submit_button_name'];
$lead_form->success_message = $data['success_message'];
$lead_form->lead_source_id = $data['source_id'];
$lead_form->admin_id = $data['admin_id'];
$lead_form->save();
jsonResponse([
'url' => 'leads/form-builder/' . $lead_form->id,
]);
}
break;
case 'form-builder':
$id = route(2);
if ($id !== '' && $id !== '0') {
$lead_form = LeadForm::find($id);
if ($lead_form) {
\view('lead_form_data', [
'lead_form' => $lead_form,
]);
}
}
break;
case 'save-form-data':
$id = _post('id');
if ($id !== '' && $id !== '0') {
$lead_form = LeadForm::find($id);
$data = request()->all();
if ($lead_form && !empty($data['form_data'])) {
$lead_form->form_data = $data['form_data'];
$lead_form->save();
}
}
break;
case 'delete-web-to-lead-form':
$id = route(2);
$id = str_replace('delete_', '', $id);
if ($id !== '' && $id !== '0') {
$lead_form = LeadForm::find($id);
$lead_form->delete();
}
r2(U . 'leads/web-to-lead/', 's', $_L['delete_successful']);
break;
case 's':
is_dev();
$t = new Schema('crm_leads');
$t->drop();
$t->add('secret', 'varchar', 100);
$t->add('status', 'varchar', 200);
$t->add('o', 'varchar', 200);
$t->add('oid', 'int', 11, '0');
$t->add('salutation', 'varchar', 200);
$t->add('first_name', 'varchar', 200);
$t->add('middle_name', 'varchar', 200);
$t->add('last_name', 'varchar', 200);
$t->add('suffix', 'varchar', 200);
$t->add('title', 'varchar', 200);
$t->add('company', 'varchar', 200);
$t->add('company_id', 'int', 11, '0');
$t->add('website', 'varchar', 200);
$t->add('industry', 'varchar', 200);
$t->add('employees', 'varchar', 200);
$t->add('email', 'varchar', 200);
$t->add('phone', 'varchar', 50);
$t->add('color', 'varchar', 20);
$t->add('source', 'varchar', 200);
$t->add('added_from', 'varchar', 200);
$t->add('mobile', 'varchar', 200);
$t->add('address', 'varchar', 200);
$t->add('street', 'varchar', 200);
$t->add('city', 'varchar', 200);
$t->add('state', 'varchar', 200);
$t->add('zip', 'varchar', 50);
$t->add('country', 'varchar', 50);
$t->add('created_by', 'varchar', 200);
$t->add('created_at', 'datetime');
$t->add('updated_at', 'datetime');
$t->add('updated_by', 'varchar', 200);
$t->add('viewed_at', 'datetime');
$t->add('cid', 'int', 11, '0');
$t->add('aid', 'int', 11, '0');
$t->add('iid', 'int', 11, '0');
$t->add('rid', 'int', 11, '0');
$t->add('sorder', 'int', 11, '0');
$t->add('assigned', 'int', 11, '0');
$t->add('last_contact', 'datetime');
$t->add('last_contact_by', 'varchar', 200);
$t->add('date_converted', 'datetime');
$t->add('public', 'int', 1, '0');
$t->add('ratings', 'varchar', '50');
$t->add('flag', 'int', 1, '0');
$t->add('lost', 'int', 1, '0');
$t->add('junk', 'int', 1, '0');
$t->add('trash', 'int', 1, '0');
$t->add('archived', 'int', 1, '0');
$t->add('memo');
$t->save();
$t = new Schema('crm_lead_sources');
$t->drop();
$t->add('sname', 'varchar', '200');
$t->add('is_active', 'int', '1', '1');
$t->add('is_default', 'int', '1', '1');
$t->add('sorder', 'int', '11', '0');
$t->add_primary_data('(`sname`) VALUES
(\'Advertisement\'),
(\'Customer Event\'),
(\'Employee Referral\'),
(\'Google AdWords\'),
(\'Other\'),
(\'Partner\'),
(\'Purchased List\'),
(\'Trade Show\'),
(\'Webinar\'),
(\'Website\'),
(\'Facebook\')
');
$t->save();
$t = new Schema('crm_industries');
$t->drop();
$t->add('industry', 'varchar', '200');
$t->add('is_active', 'int', '1', '1');
$t->add('is_default', 'int', '1', '0');
$t->add('sorder', 'int', '11', '0');
$t->add_primary_data('(`industry`) VALUES
(\'Agriculture\'),
(\'Apparel\'),
(\'Banking\'),
(\'Biotechnology\'),
(\'Chemicals\'),
(\'Communications\'),
(\'Construction\'),
(\'Consulting\'),
(\'Education\'),
(\'Electronics\'),
(\'Energy\'),
(\'Engineering\'),
(\'Entertainment\'),
(\'Environmental\'),
(\'Finance\'),
(\'Food & Beverage\'),
(\'Government\'),
(\'Healthcare\'),
(\'Hospitality\'),
(\'Insurance\'),
(\'Machinery\'),
(\'Manufacturing\'),
(\'Media\'),
(\'Not For Profit\'),
(\'Other\'),
(\'Recreation\'),
(\'Retail\'),
(\'Shipping\'),
(\'Technology\'),
(\'Telecommunications\'),
(\'Transportation\'),
(\'Utilities\')
');
$t->save();
$t = new Schema('crm_lead_status');
$t->drop();
$t->add('sname', 'varchar', '200');
$t->add('is_active', 'int', '1', '1');
$t->add('is_default', 'int', '1', '0');
$t->add('is_converted', 'int', '1', '0');
$t->add('sorder', 'int', '11', '0');
$t->add_primary_data('(`sname`,`is_default`) VALUES
(\'Unqualified\',\'0\'),
(\'New\',\'1\'),
(\'Working\',\'0\'),
(\'Nurturing\',\'0\'),
(\'Qualified\',\'0\')
');
$t->save();
$t = new Schema('crm_salutations');
$t->drop();
$t->add('sname', 'varchar', '200');
$t->add('is_active', 'int', '1', '1');
$t->add('is_default', 'int', '1', '0');
$t->add('sorder', 'int', '11', '0');
$t->add_primary_data('(`sname`) VALUES
(\'Mr.\'),
(\'Ms.\'),
(\'Mrs.\'),
(\'Dr.\'),
(\'Prof.\')
');
$t->save();
break;
default:
echo 'action not defined';
}