![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/LeadBundle/Report/ |
<?php namespace Mautic\LeadBundle\Report; use Mautic\LeadBundle\Entity\LeadField; use Mautic\LeadBundle\Model\FieldModel; use Mautic\LeadBundle\Model\LeadModel; use Mautic\LeadBundle\Model\ListModel; use Mautic\UserBundle\Model\UserModel; class FieldsBuilder { public function __construct( private FieldModel $fieldModel, private ListModel $listModel, private UserModel $userModel, private LeadModel $leadModel ) { } /** * @param string $prefix */ public function getLeadFieldsColumns($prefix): array { $baseColumns = $this->getBaseLeadColumns(); $leadFields = $this->fieldModel->getLeadFields(); $fieldColumns = $this->getFieldColumns($leadFields, $prefix); return array_merge($baseColumns, $fieldColumns); } /** * @param string $prefix * @param string $segmentPrefix */ public function getLeadFilter($prefix, $segmentPrefix): array { $filters = $this->getLeadFieldsColumns($prefix); $segmentPrefix = $this->sanitizePrefix($segmentPrefix); $prefix = $this->sanitizePrefix($prefix); // Append segment filters $userSegments = $this->listModel->getUserLists(); $list = []; foreach ($userSegments as $segment) { $list[$segment['id']] = $segment['name']; } $segmentKey = $segmentPrefix.'leadlist_id'; $filters[$segmentKey] = [ 'alias' => 'segment_id', 'label' => 'mautic.core.filter.lists', 'type' => 'select', 'list' => $list, 'operators' => [ 'eq' => 'mautic.core.operator.equals', ], ]; $aTags = []; $aTagsList = $this->leadModel->getTagList(); foreach ($aTagsList as $aTemp) { $aTags[$aTemp['value']] = $aTemp['label']; } $filters['tag'] = [ 'label' => 'mautic.core.filter.tags', 'type' => 'multiselect', 'list' => $aTags, 'operators' => [ 'in' => 'mautic.core.operator.in', 'notIn' => 'mautic.core.operator.notin', 'empty' => 'mautic.core.operator.isempty', 'notEmpty' => 'mautic.core.operator.isnotempty', ], ]; $ownerPrefix = $prefix.'owner_id'; $ownersList = []; $owners = $this->userModel->getUserList('', 0); foreach ($owners as $owner) { $ownersList[$owner['id']] = sprintf('%s %s', $owner['firstName'], $owner['lastName']); } $filters[$ownerPrefix] = [ 'label' => 'mautic.lead.list.filter.owner', 'type' => 'select', 'list' => $ownersList, ]; return $filters; } /** * @param string $prefix */ public function getCompanyFieldsColumns($prefix): array { $baseColumns = $this->getBaseCompanyColumns(); $companyFields = $this->fieldModel->getCompanyFields(); $fieldColumns = $this->getFieldColumns($companyFields, $prefix); return array_merge($baseColumns, $fieldColumns); } private function getBaseLeadColumns(): array { return [ 'l.id' => [ 'label' => 'mautic.lead.report.contact_id', 'type' => 'int', 'link' => 'mautic_contact_action', ], 'i.ip_address' => [ 'label' => 'mautic.core.ipaddress', 'type' => 'text', ], 'l.date_identified' => [ 'label' => 'mautic.lead.report.date_identified', 'type' => 'datetime', 'groupByFormula' => 'DATE(l.date_identified)', ], 'l.date_added' => [ 'label' => 'mautic.core.date.added', 'type' => 'datetime', 'groupByFormula' => 'DATE(l.date_added)', ], 'l.points' => [ 'label' => 'mautic.lead.points', 'type' => 'int', ], 'l.owner_id' => [ 'label' => 'mautic.lead.report.owner_id', 'type' => 'int', ], 'u.first_name' => [ 'label' => 'mautic.lead.report.owner_firstname', 'type' => 'string', ], 'u.last_name' => [ 'label' => 'mautic.lead.report.owner_lastname', 'type' => 'string', ], ]; } private function getBaseCompanyColumns(): array { return [ 'comp.id' => [ 'label' => 'mautic.lead.report.company.company_id', 'type' => 'int', 'link' => 'mautic_company_action', ], 'comp.companyname' => [ 'label' => 'mautic.lead.report.company.company_name', 'type' => 'string', 'link' => 'mautic_company_action', ], 'comp.companycity' => [ 'label' => 'mautic.lead.report.company.company_city', 'type' => 'string', 'link' => 'mautic_company_action', ], 'comp.companystate' => [ 'label' => 'mautic.lead.report.company.company_state', 'type' => 'string', 'link' => 'mautic_company_action', ], 'comp.companycountry' => [ 'label' => 'mautic.lead.report.company.company_country', 'type' => 'string', 'link' => 'mautic_company_action', ], 'comp.companyindustry' => [ 'label' => 'mautic.lead.report.company.company_industry', 'type' => 'string', 'link' => 'mautic_company_action', ], ]; } /** * @param LeadField[] $fields * @param string $prefix */ private function getFieldColumns($fields, $prefix): array { $prefix = $this->sanitizePrefix($prefix); $columns = []; foreach ($fields as $field) { $type = match ($field->getType()) { 'boolean' => 'bool', 'date' => 'date', 'datetime' => 'datetime', 'time' => 'time', 'url' => 'url', 'email' => 'email', 'number' => 'float', default => 'string', }; $columns[$prefix.$field->getAlias()] = [ 'label' => $field->getLabel(), 'type' => $type, ]; } return $columns; } /** * @param string $prefix */ private function sanitizePrefix($prefix): string { if (!str_contains($prefix, '.')) { $prefix .= '.'; } return $prefix; } }