# Mesch URL Director - mesch_url_director #
Logs 404 - Page Not Found Events and allows you to permaently redirect
future Requests to another Site. Can also be used to manually create
redirects for example as short URLs.
## Features
- Logging of 404 Page not found events
- Permanent redirect requests
- Creating custom redirect
- Bulk-Processing of 404 events
## Installation
Install package with composer.
```JSON
{
"require": {
"mesch/mesch_url_director": "3.0.0"
}
}
```
## Requirements
```Javascript
import {Marked} from "marked";
import {markedHighlight} from "marked-highlight";
import hljs from 'highlight.js';
import 'highlight.js/styles/a11y-dark.css';
document.addEventListener('DOMContentLoaded', () => {
const marked = new Marked(
markedHighlight({
emptyLangClass: 'hljs',
langPrefix: 'hljs language-',
highlight(code, lang, info) {
const language = hljs.getLanguage(lang) ? lang : 'plaintext';
return hljs.highlight(code, {language}).value;
}
})
);
const contentList = document.querySelectorAll('.readme-content-test');
contentList.forEach(element => {
element.innerHTML = marked.parse(element.textContent);
});
});
```
### 3.0.0
- ConcreteCMS: `>= 8.5`
- PHP: `>= 7.3.22`
- mesch/mesch_devtools: `^1.4`
- composer/installers: `^1`
### 2.97.0
- ConcreteCMS: `>= 5.7.4`
- PHP: `>= 5.3.3`
- composer/installers: `^1`
## Authors
- [Mesch Web Consulting & Design – Digitalagentur Luzern](https://www.mesch.ch/)
<?php
namespace Concrete\Package\XwTimeline;
use Concrete\Core\Database\EntityManager\Provider\ProviderInterface;
use Concrete\Core\Entity\Package;
use Concrete\Core\Package\Package as PackageController;
use Xanweb\Timeline\Module\Module;
use Xanweb\TmlModule\Installer;
use Xanweb\TmlModule\Uninstaller;
class Controller extends PackageController implements ProviderInterface
{
protected $pkgHandle = 'xw_timeline';
protected $appVersionRequired = '9.0.0';
protected $pkgVersion = '2.0';
public function getPackageDescription(): string
{
return t('Dynamic, responsive package displays items in a horizontal slider.');
}
public function getPackageName(): string
{
return t('Timeline');
}
public function on_start()
{
Module::boot();
}
public function validate_install()
{
if (PHP_VERSION_ID < 70400) {
return $this->app['error']->addError(t('This package requires PHP version %s or greater.', '7.4.0'));
}
}
public function install()
{
$pkg = parent::install();
$this->installComponents($pkg);
return $pkg;
}
public function upgrade()
{
parent::upgrade();
$this->installComponents($this->getPackageEntity());
}
public function uninstall()
{
parent::uninstall();
Uninstaller::dropTables('btXwTimelineSlider', 'btXwTimelineSliderEntries');
}
/**
* {@inheritdoc}
*/
public function getDrivers(): array
{
return [];
}
/**
* {@inheritdoc}
*/
public function getPackageAutoloaderRegistries(): array
{
return [
'src/Xanweb/Timeline' => 'Xanweb\Timeline',
'vendor/xanweb/tml_module' => 'Xanweb\TmlModule',
'vendor/xanweb/tml_block' => 'Xanweb\TmlBlock',
'vendor/xanweb/tml_common' => 'Xanweb\TmlCommon',
'vendor/xanweb/tml_request' => 'Xanweb\TmlRequest',
'vendor/xanweb/tml_html_helpers/src' => 'Xanweb\TmlHtmlHelper',
'vendor/xanweb/tml_js_localization' => 'Xanweb\TmlJsLocalization',
'vendor/xanweb/tml_v_item_list/src' => 'Xanweb\TmlVueItemList',
];
}
/**
* Install or Update package components.
*/
private function installComponents(Package $pkg): void
{
$installer = new Installer($pkg);
$installer->installBlockType('xw_timeline_slider', 'multimedia');
}
}
<?php
namespace Concrete\Package\ConcreteContentbox;
defined('C5_EXECUTE') or die(_("Access Denied."));
use Concrete\Core\Block\BlockType\BlockType;
use Concrete\Core\Block\BlockType\Set as BlockTypeSet;
use Concrete\Core\Http\Request;
use Concrete\Core\Package\Package as PackageInstaller;
use Concrete\Core\Support\Facade\Application;
use Doctrine\ORM\EntityManagerInterface;
class Controller extends PackageInstaller
{
protected $pkgHandle = 'concrete_contentbox';
protected $appVersionRequired = '9.2.0';
protected $pkgVersion = '1.0.0';
public function getPackageName()
{
return tc('concrete-contentbox', 'ConcreteCMS Contentbox');
}
public function getPackageDescription()
{
return tc('concrete-contentbox', 'Add image, text and button with only one block.');
}
public function install()
{
$pkg = parent::install();
$bt = BlockType::getByHandle('concrete_contentbox');
if (!is_object($bt)) {
$bt = BlockType::installBlockType('concrete_contentbox', $pkg);
}
$bts = BlockTypeSet::getByHandle('basic');
if ($bts) {
if (!$bts->contains($bt)) {
$bts->addBlockType($bt);
}
}
}
public function uninstall()
{
parent::uninstall();
$app = Application::getFacadeApplication();
$request = $app->make(Request::class);
if ($request->request->get('remove-db-tables')) {
$db = $app->make(EntityManagerInterface::class)->getConnection();
$db->executeQuery('DROP TABLE IF EXISTS btConcreteContentbox');
}
}
}
<?php namespace Concrete\Package\GrandGallery;
use Concrete\Core\Package\Package;
use Concrete\Core\Page\Single as SinglePage;
use Concrete\Core\Block\BlockType\BlockType;
use Concrete\Core\Backup\ContentImporter;
defined('C5_EXECUTE') or die('Access Denied.');
class Controller extends Package
{
protected $pkgHandle = 'grand_gallery';
protected $appVersionRequired = '9.0.0';
protected $pkgVersion = '2.1.1';
protected $pkgAutoloaderRegistries = [
'src/GrandGallery' => 'GrandGallery',
'src/JasonGrimes' => 'JasonGrimes'
];
public function getPackageName() {
return t('Grand Gallery');
}
public function getPackageDescription() {
return t('Easy-to-use Image Gallery based on selected Files, Folder or File Set.');
}
public function on_start() {
$this->app->make('Concrete\Core\Routing\RouterInterface')->registerMultiple([
'grand-gallery/edit-folder' => ['Concrete\Package\GrandGallery\Controller\Ajax::editFolder'],
'grand-gallery/delete-folder' => ['Concrete\Package\GrandGallery\Controller\Ajax::deleteFolder'],
'grand-gallery/create-folder' => ['Concrete\Package\GrandGallery\Controller\Ajax::createFolder'],
'grand-gallery/edit-fileset' => ['Concrete\Package\GrandGallery\Controller\Ajax::editFileset'],
'grand-gallery/delete-fileset' => ['Concrete\Package\GrandGallery\Controller\Ajax::deleteFileset'],
'grand-gallery/create-fileset' => ['Concrete\Package\GrandGallery\Controller\Ajax::createFileset'],
'grand-gallery/delete-file' => ['Concrete\Package\GrandGallery\Controller\Ajax::deleteFile'],
'grand-gallery/display-thumbnails' => ['Concrete\Package\GrandGallery\Controller\Ajax::displayThumbnails'],
'grand-gallery/add-thumbnail-to-preview' => ['Concrete\Package\GrandGallery\Controller\Ajax::addThumbnailToPreview'],
'grand-gallery/add-thumbnails-to-preview' => ['Concrete\Package\GrandGallery\Controller\Ajax::addThumbnailsToPreview'],
'grand-gallery/get-topic-list' => ['Concrete\Package\GrandGallery\Controller\Ajax::getTopicList'],
'grand-gallery/get-image-tags' => ['Concrete\Package\GrandGallery\Controller\Ajax::getImageTags'],
'grand-gallery/update-image-tags' => ['Concrete\Package\GrandGallery\Controller\Ajax::updateImageTags'],
'grand-gallery/localization/photo-swipe' => ['Concrete\Package\GrandGallery\Controller\Localization::photoSwipe'],
'grand-gallery/localization/magnific-popup' => ['Concrete\Package\GrandGallery\Controller\Localization::magnificPopup'],
'grand-gallery/global-css-settings' => ['Concrete\Package\GrandGallery\Controller\GlobalCssSettings::view'],
'grand-gallery/global-css-settings/photo-swipe' => ['Concrete\Package\GrandGallery\Controller\GlobalCssSettings::photoSwipe'],
'grand-gallery/global-js-settings/photo-swipe' => ['Concrete\Package\GrandGallery\Controller\GlobalJsSettings::photoSwipe']
]);
}
public function install() {
$pkg = parent::install();
// Install single pages
$page = SinglePage::add('/dashboard/grand_gallery', $pkg);
$page->updateCollectionName(t('Grand Gallery'));
$page = SinglePage::add('/dashboard/grand_gallery/basic_settings', $pkg);
$page->updateCollectionName(t('Basic Settings'));
$page = SinglePage::add('/dashboard/grand_gallery/block_settings', $pkg);
$page->updateCollectionName(t('Block Settings'));
$page = SinglePage::add('/dashboard/grand_gallery/reset_global_settings', $pkg);
$page->updateCollectionName(t('Reset Global Settings'));
// Install blocks
if ( ! is_object(BlockType::getByHandle('grand_gallery'))) {
BlockType::installBlockType('grand_gallery', $pkg);
}
// Do things that need to be executed in fresh install or upgrade
$this->installOrUpgrade();
}
public function uninstall() {
parent::uninstall();
$db = $this->app->make('database')->connection();
// Delete package tables
$db->executeQuery('DROP TABLE IF EXISTS btGrandGallery, btGrandGalleryImages');
// Remove all config values
$grandGallerySettings = $this->app->build('GrandGallery\Settings');
$grandGallerySettings->removeAll();
}
public function upgrade() {
parent::upgrade();
$this->installOrUpgrade();
}
private function installOrUpgrade() {
$pkg = \Concrete\Core\Support\Facade\Package::getByHandle('grand_gallery');
// Set default global settings (initial settings + added in consecutive patches)
$grandGallerySettings = $this->app->build('GrandGallery\Settings');
$grandGallerySettings->setDefaultValues($pkg, false);
// Install attribute "Gallery Tags" (1.1.0)
$ci = new ContentImporter();
$ci->importContentFile($pkg->getPackagePath() . '/config/install/base/attributes.xml');
}
}