public static function getBaseRoute($path) { if (StringHandler::endsWith($path, "Locale")) { $path = StringHandler::replaceLast("Locale", "", $path); } return $path; }
/** * @param string $name * * @return $this */ public function setName($name) { $this->name = trim(strtolower($name)); $this->name = StringHandler::removeDiacritics($this->name); $this->name = preg_replace('#([^a-z])#', '_', $this->name); return $this; }
/** * @param string $name * * @return string $name */ public static function cleanName($name) { $name = StringHandler::variablize($name); if (0 === preg_match("/^role_/i", $name)) { $name = "ROLE_" . $name; } return strtoupper($name); }
public function validate($value, Constraint $constraint) { $value = StringHandler::variablize($value); /* * If value is already the node name * do nothing. */ if (null !== $constraint->currentValue && $value == $constraint->currentValue) { return; } if (null !== $constraint->entityManager && null !== $constraint->customForm) { if (true === $this->nameExists($value, $constraint->customForm, $constraint->entityManager)) { $this->context->addViolation($constraint->message); } } else { $this->context->addViolation('UniqueCustomFormFieldNameValidator constraint requires a valid EntityManager'); } }
public function validate($value, Constraint $constraint) { $value = StringHandler::slugify($value); /* * If value is already the node name * do nothing. */ if (null !== $constraint->currentValue && $value == $constraint->currentValue) { return; } if (null !== $constraint->entityManager) { if (true === $this->urlAliasExists($value, $constraint->entityManager)) { $this->context->addViolation($constraint->messageUrlAlias); } elseif (true === $this->nodeNameExists($value, $constraint->entityManager)) { $this->context->addViolation($constraint->message); } } else { $this->context->addViolation('UniqueNodeNameValidator constraint requires a valid EntityManager'); } }
/** * @param array $data * @param RZ\Roadiz\Core\Entities\UrlAlias $ua * * @return boolean */ private function editUrlAlias($data, UrlAlias $ua) { $testingAlias = StringHandler::slugify($data['alias']); if ($testingAlias != $ua->getAlias() && ($this->nodeNameExists($testingAlias) || $this->urlAliasExists($testingAlias))) { $msg = $this->getTranslator()->trans('url_alias.%alias%.no_update.already_exists', ['%alias%' => $data['alias']]); throw new EntityAlreadyExistsException($msg, 1); } if ($data['urlaliasId'] == $ua->getId()) { try { $ua->setAlias($data['alias']); $this->getService('em')->flush(); return true; } catch (\Exception $e) { return false; } } return false; }
/** * Get controller class path for a given node. * * @param Node $node * * @return string */ public function getControllerForNode(Node $node) { $currentClass = get_class($this); $refl = new \ReflectionClass($currentClass); $namespace = $refl->getNamespaceName() . '\\Controllers'; /* * Determine if we look for a node-type named controller or * a node-named controller. */ if (in_array($node->getNodeName(), static::$specificNodesControllers)) { return $namespace . '\\' . StringHandler::classify($node->getNodeName()) . 'Controller'; } else { return $namespace . '\\' . StringHandler::classify($node->getNodeType()->getName()) . 'Controller'; } }
private function updateDocument($data, $document) { $fs = new Filesystem(); if (!empty($data['newDocument'])) { $uploadedFile = $data['newDocument']; if ($uploadedFile !== null && $uploadedFile->getError() == UPLOAD_ERR_OK && $uploadedFile->isValid()) { /* * In case file already exists */ if ($fs->exists($document->getAbsolutePath())) { $fs->remove($document->getAbsolutePath()); } if (StringHandler::cleanForFilename($uploadedFile->getClientOriginalName()) == $document->getFilename()) { $finder = new Finder(); $previousFolder = $document->getFilesFolder() . '/' . $document->getFolder(); if ($fs->exists($previousFolder)) { $finder->files()->in($previousFolder); // Remove Precious folder if it's empty if ($finder->count() == 0) { $fs->remove($previousFolder); } } $document->setFolder(substr(hash("crc32b", date('YmdHi')), 0, 12)); } $document->setFilename($uploadedFile->getClientOriginalName()); $document->setMimeType($uploadedFile->getMimeType()); $this->getService('em')->flush(); $uploadedFile->move(Document::getFilesFolder() . '/' . $document->getFolder(), $document->getFilename()); return $document; } } return $document; }
/** * Return a ZipArchive of requested font. * * @param Symfony\Component\HttpFoundation\Request $request * @param int $fontId * * @return Symfony\Component\HttpFoundation\Response */ public function downloadAction(Request $request, $fontId) { $this->validateAccessForRole('ROLE_ACCESS_FONTS'); $font = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Font', (int) $fontId); if ($font !== null) { // Prepare File $file = tempnam("tmp", "zip"); $zip = new \ZipArchive(); $zip->open($file, \ZipArchive::OVERWRITE); if ("" != $font->getEOTFilename()) { $zip->addFile($font->getEOTAbsolutePath(), $font->getEOTFilename()); } if ("" != $font->getSVGFilename()) { $zip->addFile($font->getSVGAbsolutePath(), $font->getSVGFilename()); } if ("" != $font->getWOFFFilename()) { $zip->addFile($font->getWOFFAbsolutePath(), $font->getWOFFFilename()); } if ("" != $font->getWOFF2Filename()) { $zip->addFile($font->getWOFF2AbsolutePath(), $font->getWOFF2Filename()); } if ("" != $font->getOTFFilename()) { $zip->addFile($font->getOTFAbsolutePath(), $font->getOTFFilename()); } // Close and send to users $zip->close(); $filename = StringHandler::slugify($font->getName() . ' ' . $font->getReadableVariant()) . '.zip'; $response = new Response(file_get_contents($file), Response::HTTP_OK, ['content-control' => 'private', 'content-type' => 'application/zip', 'content-length' => filesize($file), 'content-disposition' => 'attachment; filename=' . $filename]); unlink($file); return $response; } else { return $this->throw404(); } }
/** * Returns an option array for creating a Symfony Form * according to a node-type field. * * @param NodesSources $nodeSource * @param NodeTypeField $field * * @return array */ public function getFormOptionsFromFieldType(NodeTypeField $field) { $label = $field->getLabel(); $devName = '{{ nodeSource.' . StringHandler::camelCase($field->getName()) . ' }}'; switch ($field->getType()) { case NodeTypeField::ENUM_T: return ['label' => $label, 'placeholder' => 'choose.value', 'required' => false, 'attr' => ['data-desc' => $field->getDescription(), 'data-dev-name' => $devName]]; case NodeTypeField::DATETIME_T: return ['date_widget' => 'single_text', 'date_format' => 'yyyy-MM-dd', 'label' => $label, 'required' => false, 'attr' => ['data-desc' => $field->getDescription(), 'data-dev-name' => $devName, 'class' => 'rz-datetime-field'], 'placeholder' => ['hour' => 'hour', 'minute' => 'minute']]; case NodeTypeField::DATE_T: return ['widget' => 'single_text', 'format' => 'yyyy-MM-dd', 'label' => $label, 'required' => false, 'attr' => ['data-desc' => $field->getDescription(), 'data-dev-name' => $devName, 'class' => 'rz-date-field'], 'placeholder' => '']; case NodeTypeField::INTEGER_T: return ['label' => $label, 'required' => false, 'constraints' => [new Type('integer')], 'attr' => ['data-desc' => $field->getDescription(), 'data-dev-name' => $devName]]; case NodeTypeField::EMAIL_T: return ['label' => $label, 'required' => false, 'constraints' => [new \Symfony\Component\Validator\Constraints\Email()], 'attr' => ['data-desc' => $field->getDescription(), 'data-dev-name' => $devName]]; case NodeTypeField::DECIMAL_T: return ['label' => $label, 'required' => false, 'constraints' => [new Type('double')], 'attr' => ['data-desc' => $field->getDescription(), 'data-dev-name' => $devName]]; case NodeTypeField::COLOUR_T: return ['label' => $label, 'required' => false, 'attr' => ['data-desc' => $field->getDescription(), 'data-dev-name' => $devName, 'class' => 'colorpicker-input']]; case NodeTypeField::GEOTAG_T: return ['label' => $label, 'required' => false, 'attr' => ['data-desc' => $field->getDescription(), 'data-dev-name' => $devName, 'class' => 'rz-geotag-field']]; case NodeTypeField::MARKDOWN_T: return ['label' => $label, 'required' => false, 'attr' => ['class' => 'markdown_textarea', 'data-desc' => $field->getDescription(), 'data-min-length' => $field->getMinLength(), 'data-max-length' => $field->getMaxLength(), 'data-dev-name' => $devName]]; default: return ['label' => $label, 'required' => false, 'attr' => ['data-desc' => $field->getDescription(), 'data-min-length' => $field->getMinLength(), 'data-max-length' => $field->getMaxLength(), 'data-dev-name' => $devName]]; } }
/** * @param string $name * * @return $this */ public function setName($name) { $this->name = StringHandler::slugify($name); return $this; }
/** * @param string $filename * * @return $this */ public function setFilename($filename) { $this->filename = StringHandler::cleanForFilename($filename); return $this; }
/** * @param string $tagName * * @return $this */ public function setTagName($tagName) { $this->dirtyTagName = $tagName; $this->tagName = StringHandler::slugify($tagName); return $this; }
/** * @param string $svgFilename * * @return $this */ public function setSVGFilename($svgFilename) { $this->svgFilename = StringHandler::cleanForFilename($svgFilename); return $this; }
public function searchAction(Request $request) { /* * Validate */ if (true !== ($notValid = $this->validateRequest($request, 'GET'))) { return new Response(json_encode($notValid), Response::HTTP_OK, ['content-type' => 'application/javascript']); } $this->validateAccessForRole('ROLE_ACCESS_TAGS'); $responseArray = ['statusCode' => Response::HTTP_NOT_FOUND, 'status' => 'danger', 'responseText' => 'No tags found']; if ($request->get('search') != "") { $responseArray = []; $pattern = strip_tags($request->get('search')); $tags = $this->getService('em')->getRepository('RZ\\Roadiz\\Core\\Entities\\Tag')->searchBy($pattern, [], [], 10); if (0 === count($tags)) { /* * Try again using tag slug */ $pattern = StringHandler::slugify($pattern); $tags = $this->getService('em')->getRepository('RZ\\Roadiz\\Core\\Entities\\Tag')->searchBy($pattern, [], [], 10); } foreach ($tags as $tag) { $responseArray[] = $tag->getHandler()->getFullPath(); } } return new Response(json_encode($responseArray), Response::HTTP_OK, ['content-type' => 'application/javascript']); }
/** * @param string $alias * * @return $this */ public function setAlias($alias) { $this->alias = StringHandler::slugify($alias); return $this; }
/** * Get common options for your node-type field form components. * * @param NodeTypeField $field * * @return array */ public function getDefaultOptions(NodeTypeField $field) { $label = $field->getLabel(); $devName = '{{ nodeSource.' . StringHandler::camelCase($field->getName()) . ' }}'; $options = ['label' => $label, 'required' => false, 'attr' => ['data-field-group' => null !== $field->getGroupName() && '' != $field->getGroupName() ? $field->getGroupName() : 'default', 'data-dev-name' => $devName, 'autocomplete' => 'off']]; if ('' !== $field->getDescription()) { $options['attr']['data-desc'] = $field->getDescription(); } if ($field->getMinLength() > 0) { $options['attr']['data-min-length'] = $field->getMinLength(); } if ($field->getMaxLength() > 0) { $options['attr']['data-max-length'] = $field->getMaxLength(); } return $options; }
/** * Return a ZipArchive of requested folder. * * @param Symfony\Component\HttpFoundation\Request $request * @param int $folderId * * @return Symfony\Component\HttpFoundation\Response */ public function downloadAction(Request $request, $folderId) { $this->validateAccessForRole('ROLE_ACCESS_DOCUMENTS'); $folder = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Folder', (int) $folderId); if ($folder !== null) { // Prepare File $file = tempnam("tmp", "zip"); $zip = new \ZipArchive(); $zip->open($file, \ZipArchive::OVERWRITE); $documents = $this->getService('em')->getRepository('RZ\\Roadiz\\Core\\Entities\\Document')->findBy(['folders' => [$folder]]); foreach ($documents as $document) { $zip->addFile($document->getAbsolutePath(), $document->getFilename()); } // Close and send to users $zip->close(); $filename = StringHandler::slugify($folder->getName()) . '.zip'; $response = new Response(file_get_contents($file), Response::HTTP_OK, ['content-type' => 'application/zip', 'content-length' => filesize($file), 'content-disposition' => 'attachment; filename=' . $filename]); unlink($file); return $response; } else { return $this->throw404(); } }
/** * @dataProvider encodeWithSecretNoSaltProvider */ public function testEncodeWithSecretNoSalt($input, $secret) { $this->setExpectedException('RZ\\Roadiz\\Core\\Exceptions\\EmptySaltException'); $code = StringHandler::encodeWithSecret($input, $secret); // Assert $this->assertEquals($input, StringHandler::decodeWithSecret($code, $secret)); }
/** * Sets the value of overrideLocale. * * @param string $overrideLocale the override locale * * @return self */ public function setOverrideLocale($overrideLocale) { $this->overrideLocale = StringHandler::slugify($overrideLocale); return $this; }
/** * @return string */ public function getSetterName() { return StringHandler::camelCase('set ' . $this->getName()); }
/** * Return the current Theme * * @return \RZ\Roadiz\Core\Entities\Theme */ public function getTheme() { if (null === $this->theme) { $className = static::getCalledClass(); while (!StringHandler::endsWith($className, "App")) { $className = get_parent_class($className); if ($className === false) { $className = ""; break; } if (strpos($className, "\\") !== 0) { $className = "\\" . $className; } } $this->theme = $this->getService('em')->getRepository('RZ\\Roadiz\\Core\\Entities\\Theme')->findOneByClassName($className); } return $this->theme; }
/** * Generate a form-builder for contact forms. * * For example in your contact page controller : * * <pre> * use RZ\Roadiz\CMS\Controllers\EntryPointsController; * * ... * * $formBuilder = EntryPointsController::getContactFormBuilder( * $request, * true * ); * $formBuilder->add('email', 'email', array( * 'label'=>$this->getTranslator()->trans('your.email') * )) * ->add('name', 'text', array( * 'label'=>$this->getTranslator()->trans('your.name') * )) * ->add('message', 'textarea', array( * 'label'=>$this->getTranslator()->trans('your.message') * )) * ->add('callMeBack', 'checkbox', array( * 'label'=>$this->getTranslator()->trans('call.me.back'), * 'required' => false * )) * ->add('send', 'submit', array( * 'label'=>$this->getTranslator()->trans('send.contact.form') * )); * $form = $formBuilder->getForm(); * $this->assignation['contactForm'] = $form->createView(); * * </pre> * * Add session messages to your assignations * * <pre> * // Get session messages * $this->assignation['session']['messages'] = $this->getService('session')->getFlashBag()->all(); * </pre> * * Then in your contact page Twig template * * <pre> * {# * # Display contact errors * #} * {% if session.messages|length %} * {% for type, msgs in session.messages %} * {% for msg in msgs %} * <div data-uk-alert class="uk-alert * uk-alert-{% if type == "confirm" %}success * {% elseif type == "warning" %}warning{% else %}danger{% endif %}"> * <a href="" class="uk-alert-close uk-close"></a> * <p>{{ msg }}</p> * </div> * {% endfor %} * {% endfor %} * {% endif %} * {# * # Display contact form * #} * {% form_theme contactForm 'forms.html.twig' %} * {{ form(contactForm) }} * </pre> * * @param Symfony\Component\HttpFoundation\Request $request Contact page request * @param boolean $redirect Redirect to contact page after sending? * @param string $customRedirectUrl Redirect to a custom url * @param string $customEmailReceiver Send contact form to a custom email (or emails) * @param string $customEmailSubject Customize email subject * * @return Symfony\Component\Form\FormBuilder */ public static function getContactFormBuilder(Request $request, $redirect = true, $customRedirectUrl = null, $customEmailReceiver = null, $customEmailSubject = null) { $action = Kernel::getService('urlGenerator')->generate('contactFormLocaleAction', ['_locale' => $request->getLocale()]); $builder = Kernel::getService('formFactory')->createBuilder('form', null, ['intention' => static::CONTACT_FORM_TOKEN_INTENTION, 'attr' => ['id' => 'contactForm']])->setMethod('POST')->setAction($action)->add('_action', 'hidden', ['data' => 'contact']); if (true === $redirect) { if (null !== $customRedirectUrl) { $builder->add('_redirect', 'hidden', ['data' => strip_tags($customRedirectUrl)]); } else { $builder->add('_redirect', 'hidden', ['data' => strip_tags($request->getURI())]); } } if (null !== $customEmailReceiver) { $builder->add('_emailReceiver', 'hidden', ['data' => StringHandler::encodeWithSecret($customEmailReceiver, Kernel::getService('config')['security']['secret'])]); } if (null !== $customEmailSubject) { $builder->add('_emailSubject', 'hidden', ['data' => StringHandler::encodeWithSecret($customEmailSubject, Kernel::getService('config')['security']['secret'])]); } return $builder; }