/** * @param string $tokenRegex Token regex without wrapping regex escape characters. Use (value) or (.*?) where the ID of the * entity should go. i.e. {pagelink=(value)} * @param string $filter String to filter results by * @param string $labelColumn The column that houses the label * @param string $valueColumn The column that houses the value * @param CompositeExpression $expr Use $factory->getDatabase()->getExpressionBuilder()->andX() * * @return array|void */ public function getTokens($tokenRegex, $filter = '', $labelColumn = 'name', $valueColumn = 'id', CompositeExpression $expr = null) { //set some permissions $permissions = $this->factory->getSecurity()->isGranted($this->permissionSet, "RETURN_ARRAY"); if (in_array(false, $permissions)) { return; } $repo = $this->factory->getModel($this->modelName)->getRepository(); $prefix = $repo->getTableAlias(); if (!empty($prefix)) { $prefix .= '.'; } $exprBuilder = $this->factory->getDatabase()->getExpressionBuilder(); if ($expr == null) { $expr = $exprBuilder->andX(); } if (isset($permissions[$this->viewPermissionBase . ':viewother']) && !$permissions[$this->viewPermissionBase . ':viewother']) { $expr->add($exprBuilder->eq($prefix . 'createdBy', $this->factory->getUser()->getId())); } if (!empty($filter)) { $expr->add($exprBuilder->like('LOWER(' . $labelColumn . ')', ':label')); $parameters = array('label' => strtolower($filter) . '%'); } else { $parameters = array(); } $items = $repo->getSimpleList($expr, $parameters, $labelColumn, $valueColumn); $tokens = array(); foreach ($items as $item) { $token = str_replace(array('(value)', '(.*?)'), $item['value'], $tokenRegex); $tokens[$token] = $item['label']; } return $tokens; }
/** * @param Plugin $plugin * @param MauticFactory $factory * @param array $metadata * @param null $installedSchema */ public static function onPluginInstall(Plugin $plugin, MauticFactory $factory, $metadata = null, $installedSchema = null) { if (is_array($metadata)) { foreach ($metadata as $key => $entity) { /** @var \Doctrine\ORM\Mapping\ClassMetadata $entity */ if ($factory->getDatabase()->getSchemaManager()->tablesExist($entity->getTableName())) { unset($metadata[$key]); } } self::installPluginSchema($metadata, $factory); } }
/** * Finds/creates the local name for constraints and indexes. * * @param $table * @param $type * @param $suffix * * @return string */ protected function findPropertyName($table, $type, $suffix) { static $schemaManager; static $tables = []; if (empty($schemaManager)) { $schemaManager = $this->factory->getDatabase()->getSchemaManager(); } // Prepend prefix $table = $this->prefix . $table; if (!array_key_exists($table, $tables)) { $tables[$table] = []; } $type = strtolower($type); $suffix = strtolower(substr($suffix, -4)); switch ($type) { case 'fk': if (!array_key_exists('fk', $tables[$table])) { $keys = $schemaManager->listTableForeignKeys($table); /** @var \Doctrine\DBAL\Schema\ForeignKeyConstraint $k */ foreach ($keys as $k) { $name = strtolower($k->getName()); $key = substr($name, -4); $tables[$table]['fk'][$key] = $name; } } $localName = $tables[$table]['fk'][$suffix]; break; case 'idx': case 'uniq': if (!array_key_exists('idx', $tables[$table])) { $tables[$table]['idx'] = ['idx' => [], 'uniq' => []]; $indexes = $schemaManager->listTableIndexes($table); /** @var \Doctrine\DBAL\Schema\Index $i */ foreach ($indexes as $i) { $name = strtolower($i->getName()); $isIdx = stripos($name, 'idx'); $isUniq = stripos($name, 'uniq'); if ($isIdx !== false || $isUniq !== false) { $key = substr($name, -4); $keyType = $isIdx !== false ? 'idx' : 'uniq'; $tables[$table]['idx'][$keyType][$key] = $name; } } } $localName = $tables[$table]['idx'][$type][$suffix]; break; } $localName = strtoupper($localName); return $localName; }
public static function addTaskAction(MauticFactory $factory, $lead, $event) { $sql = 'INSERT INTO tasks (due_date, name, lead_id, assign_user_id, is_completed, date_added) VALUES (?, ?, ?, ?, ?, ?)'; $stmt = $factory->getDatabase()->prepare($sql); $dueDate = self::generateDueDate($event); $stmt->bindValue(1, $dueDate->format('Y-m-d H:i:s')); $stmt->bindValue(2, $event['properties']['name']); $stmt->bindValue(3, $lead->getId()); $stmt->bindValue(4, $event['properties']['assignUser']); $stmt->bindValue(5, 0); $dateTime = new \DateTime('now'); $stmt->bindValue(6, $dateTime->format('Y-m-d H:i:s')); $stmt->execute(); return true; }
/** * Drops plugin's tables based on Doctrine metadata. * * @param array $metadata * @param MauticFactory $factory * * @throws \Doctrine\DBAL\ConnectionException * @throws \Exception */ public static function dropPluginSchema(array $metadata, MauticFactory $factory) { $db = $factory->getDatabase(); $schemaTool = new SchemaTool($factory->getEntityManager()); $dropQueries = $schemaTool->getDropSchemaSQL($metadata); $db->beginTransaction(); try { foreach ($dropQueries as $q) { $db->query($q); } $db->commit(); } catch (\Exception $e) { $db->rollback(); throw $e; } }
/** * @param MauticFactory $factory */ public function __construct(MauticFactory $factory) { $this->factory = $factory; $this->db = $factory->getDatabase(); $this->logger = $this->factory->getLogger(); }