1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-12 09:44:38 +02:00

Various minor tweaks and documentation improvements

This commit is contained in:
Ryan Cramer
2016-11-14 05:37:50 -05:00
parent 2d9e959bf2
commit 654c18fbe9
18 changed files with 180 additions and 30 deletions

View File

@@ -26,6 +26,8 @@ if(!defined("PROCESSWIRE")) die();
/*** SITE CONFIG *************************************************************************/
/** @var Config $config */
/**
* Enable debug mode?
*

View File

@@ -26,6 +26,8 @@ if(!defined("PROCESSWIRE")) die();
/*** SITE CONFIG *************************************************************************/
/** @var Config $config */
/**
* Enable debug mode?
*

View File

@@ -26,6 +26,8 @@ if(!defined("PROCESSWIRE")) die();
/*** SITE CONFIG *************************************************************************/
/** @var Config $config */
/**
* Enable debug mode?
*

View File

@@ -26,6 +26,8 @@ if(!defined("PROCESSWIRE")) die();
/*** SITE CONFIG *************************************************************************/
/** @var Config $config */
/**
* Enable debug mode?
*

View File

@@ -26,6 +26,8 @@ if(!defined("PROCESSWIRE")) die();
/*** SITE CONFIG *************************************************************************/
/** @var Config $config */
/**
* Enable debug mode?
*

View File

@@ -17,6 +17,7 @@
*
* @method void install()
* @method void uninstall()
* @method array getExtraMarkup()
*
*/

View File

@@ -20,6 +20,7 @@
* @property string $httpHost Current HTTP host name. #pw-group-HTTP-and-input
* @property bool $https If the current request is an HTTPS request, this is set to true. #pw-group-runtime
* @property string $version Current ProcessWire version string (i.e. "2.2.3") #pw-group-system #pw-group-runtime
* @property int $systemVersion System version, used by SystemUpdater to determine when updates must be applied. #pw-group-system #pw-group-runtime
*
* @property FilenameArray $styles Array used by ProcessWire admin to keep track of what stylesheet files its template should load. It will be blank otherwise. Feel free to use it for the same purpose in your own sites. #pw-group-runtime
* @property FilenameArray $scripts Array used by ProcessWire admin to keep track of what javascript files its template should load. It will be blank otherwise. Feel free to use it for the same purpose in your own sites. #pw-group-runtime

View File

@@ -378,6 +378,19 @@ function paths($key = '') {
return wirePaths($key);
}
/**
* Start or stop a profiler event or return WireProfilerInterface instance
*
* @param string|array|object|null $name Name of event to start or event to stop
* @param null|object|string $source If starting an event, optional source of event (object)
* @param array $data Optional extra data as associative array
* @return null|array|object
*
*/
function profiler($name = null, $source = null, $data = array()) {
return wireProfiler($name, $source, $data);
}
/**
* Get or set a region for front-end output
*

View File

@@ -460,6 +460,26 @@ function wireLog($logName = '', $message = '') {
return $log;
}
/**
* Start or stop a profiler event or return WireProfilerInterface instance
*
* @param string|array|object|null $name Name of event to start or event to stop
* @param null|object|string $source If starting an event, optional source of event (object)
* @param array $data Optional extra data as associative array
* @return null|array|object
*
*/
function wireProfiler($name = null, $source = null, $data = array()) {
$profiler = wire('profiler');
if(is_null($name)) return $profiler;
if(!$profiler) return null;
if(is_string($name)) {
return $profiler->start($name, $source, $data);
} else {
return $profiler->stop($name);
}
}
/**
* Function that returns a $config->urls->[name] value o
*

View File

@@ -23,7 +23,7 @@
*
* @property-read Wire|WireData|WireArray|Module $object Instance of the object where the Hook event originated.
* @property-read string $method The name of the method that was called to generate the Hook event.
* @property-read array $arguments A numerically indexed array of the arguments sent to the above mentioned method.
* @property array $arguments A numerically indexed array of the arguments sent to the above mentioned method.
* @property mixed $return Applicable only for 'after' or ('replace' + 'before' hooks), contains the value returned by the above mentioned method. The hook handling method may modify this return value.
* @property bool $replace Set to boolean true in a 'before' hook if you want to prevent execution of the original hooked function. In such a case, your hook is replacing the function entirely. Not recommended, so be careful with this.
* @property array $options An optional array of user-specified data that gets sent to the hooked function. The hook handling method may access it from $event->data. Also includes all the default hook properties.

View File

@@ -110,6 +110,7 @@ class AdminThemeDefaultHelpers extends WireData {
if($page->name != 'page' || $this->wire('input')->urlSegment1) return '';
$user = $this->wire('user');
if($this->wire('user')->isGuest() || !$user->hasPermission('page-edit')) return '';
/** @var ProcessPageAdd $module */
$module = $this->wire('modules')->getModule('ProcessPageAdd', array('noInit' => true));
$data = $module->executeNavJSON(array('getArray' => true));
$items = array();
@@ -143,7 +144,7 @@ class AdminThemeDefaultHelpers extends WireData {
if($this->wire('user')->isLoggedin() && $this->wire('modules')->isInstalled('SystemNotifications')) {
$systemNotifications = $this->wire('modules')->get('SystemNotifications');
if(!$systemNotifications->placement) return;
if(!$systemNotifications->placement) return '';
}
$defaults = array(
@@ -232,7 +233,9 @@ class AdminThemeDefaultHelpers extends WireData {
$info = $this->wire('modules')->getModuleInfo($p->process);
if(!empty($info['icon'])) $icon = $info['icon'];
}
if($p->page_icon) $icon = $p->page_icon; // allow for option of an admin field overriding the module icon
// allow for option of an admin field overriding the module icon
$pageIcon = $p->get('page_icon');
if($pageIcon) $icon = $pageIcon;
if(!$icon) switch($p->id) {
case 22: $icon = 'gears'; break; // Setup
case 21: $icon = 'plug'; break; // Modules
@@ -360,6 +363,7 @@ class AdminThemeDefaultHelpers extends WireData {
// ProcessPageAdd: avoid showing this menu item if there are no predefined family settings to use
$numAddable = $this->wire('session')->getFor('ProcessPageAdd', 'numAddable');
if($numAddable === null) {
/** @var ProcessPageAdd $processPageAdd */
$processPageAdd = $this->wire('modules')->getModule('ProcessPageAdd', array('noInit' => true));
if($processPageAdd) {
$addData = $processPageAdd->executeNavJSON(array("getArray" => true));
@@ -529,9 +533,11 @@ class AdminThemeDefaultHelpers extends WireData {
*
*/
public function renderJSConfig() {
/** @var Config $config */
$config = $this->wire('config');
/** @var array $jsConfig */
$jsConfig = $config->js();
$jsConfig['debug'] = $config->debug;

View File

@@ -10,12 +10,26 @@
*
*/
/** @var Config $config */
/** @var AdminThemeDefault $adminTheme */
/** @var User $user */
/** @var Modules $modules */
/** @var Notices $notices */
/** @var Page $page */
if(!defined("PROCESSWIRE")) die();
if(!isset($content)) $content = '';
$searchForm = $user->hasPermission('page-edit') ? $modules->get('ProcessPageSearch')->renderSearchForm() : '';
$version = $adminTheme->version . 'h';
if($user->hasPermission('page-edit')) {
/** @var ProcessPageSearch $searchForm */
$searchForm = $modules->get('ProcessPageSearch');
$searchForm = $searchForm->renderSearchForm();
} else {
$searchForm = '';
}
$version = $adminTheme->version . 'i';
$config->styles->prepend($config->urls->root . "wire/templates-admin/styles/AdminTheme.css?v=$version");
$config->styles->prepend($config->urls->adminTemplates . "styles/" . ($adminTheme->colors ? "main-$adminTheme->colors" : "main-classic") . ".css?v=$version");
@@ -27,6 +41,7 @@ $config->scripts->append($config->urls->root . "wire/templates-admin/scripts/mai
$config->scripts->append($config->urls->adminTemplates . "scripts/main.$ext?v=$version");
require_once(dirname(__FILE__) . "/AdminThemeDefaultHelpers.php");
/** @var AdminThemeDefaultHelpers $helpers */
$helpers = $this->wire(new AdminThemeDefaultHelpers());
$extras = $adminTheme->getExtraMarkup();
@@ -94,7 +109,9 @@ $extras = $adminTheme->getExtraMarkup();
<div class="pw-container container">
<?php
if($page->body) echo $page->body;
$body = $page->get('body');
if($body) echo $body;
unset($body);
echo $content;
echo $extras['content'];
?>
@@ -120,7 +137,9 @@ $extras = $adminTheme->getExtraMarkup();
<?php
echo $extras['footer'];
if($config->debug && $user->isSuperuser()) include($config->paths->root . '/wire/templates-admin/debug.inc');
if($config->debug && $user->isSuperuser()) {
include($config->paths->root . '/wire/templates-admin/debug.inc');
}
?>
</div>
</div><!--/#footer-->

View File

@@ -7,12 +7,15 @@
*
*/
/** @var Config $config */
/** @var ProcessWire $wire */
$config->inputfieldColumnWidthSpacing = 0; // percent spacing between columns
$markup = InputfieldWrapper::getMarkup();
$markup['item_label'] = "\n\t\t<label class='InputfieldHeader' for='{for}'>{out}</label>";
$markup['item_label_hidden'] = "\n\t\t<label class='InputfieldHeader InputfieldHeaderHidden'><span>{out}</span></label>";
$markup['item_content'] = "\n\t\t<div class='InputfieldContent'>\n{out}\n\t\t</div>";
$markup['item_label'] = "<label class='InputfieldHeader' for='{for}'>{out}</label>";
$markup['item_label_hidden'] = "<label class='InputfieldHeader InputfieldHeaderHidden'><span>{out}</span></label>";
$markup['item_content'] = "<div class='InputfieldContent'>{out}</div>";
InputfieldWrapper::setMarkup($markup);
$classes = InputfieldWrapper::getClasses();
@@ -20,10 +23,12 @@ $classes['item'] = "Inputfield {class} Inputfield_{name}";
$classes['item_error'] = "InputfieldStateError";
InputfieldWrapper::setClasses($classes);
wire()->addHookBefore('MarkupPagerNav::render', null, 'hookMarkupPagerNavRender');
$wire->addHookBefore('MarkupPagerNav::render', null, 'hookMarkupPagerNavRender');
/**
* Change the default prev/next links for MarkupPagerNav
*
* @param HookEvent $event
*
*/
function hookMarkupPagerNavRender(HookEvent $event) {

View File

@@ -12,10 +12,15 @@
*
*/
/** @var Config $config */
/** @var AdminThemeReno $adminTheme */
/** @var User $user */
/** @var Modules $modules */
if(!defined("PROCESSWIRE")) die();
if(!isset($content)) $content = '';
$version = $adminTheme->version . 'j';
$version = $adminTheme->version . 'k';
$ext = $config->debug ? "js" : "min.js";
// Search form

View File

@@ -175,7 +175,7 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
// identify the current language from the user, or set one if it's not already
if($this->user->language && $this->user->language->id) {
$language = $this->user->language;
// $language = $this->user->language;
} else {
$language = $this->defaultLanguagePage;
$this->user->language = $language;
@@ -222,7 +222,7 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
public function ready() {
// styles used by our Inputfield hooks
if($this->wire('page')->template == 'admin') {
$this->config->styles->add($this->config->urls->LanguageSupport . "LanguageSupport.css");
$this->config->styles->add($this->config->urls('LanguageSupport') . "LanguageSupport.css");
$language = $this->wire('user')->language;
if($language) $this->config->js('LanguageSupport', array(
'language' => array(
@@ -306,6 +306,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
* Hook before Inputfield::render to set proper default language value
*
* Only applies to Inputfields that have: useLanguages == true
*
* @param HookEvent $event
*
*/
public function hookInputfieldBeforeRender(HookEvent $event) {
@@ -330,6 +332,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
*
* Only applies to Inputfields that have: useLanguages == false.
* Applies only if page-edit-lang-none permission is installed.
*
* @param HookEvent $event
*
*/
public function hookInputfieldWrapperBeforeRenderInputfield(HookEvent $event) {
@@ -372,9 +376,9 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
$out;
}
$out = "\n<div class='$class' id='langTab_$id' data-language='$language->id'>" .
"\n<label for='$id' class='$labelClass'>$label</label>" . $out .
"\n</div>";
$out = "<div class='$class' id='langTab_$id' data-language='$language->id'>" .
"<label for='$id' class='$labelClass'>$label</label>" . $out .
"</div>";
return $out;
}
@@ -382,6 +386,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
* Hook into Inputfield::render to duplicate inputs for other languages
*
* Only applies to Inputfields that have: useLanguages == true
*
* @param HookEvent $event
*
*/
public function hookInputfieldAfterRender(HookEvent $event) {
@@ -468,6 +474,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
/**
* Hook before Inputfield::processInput to process input for other languages (or prevent it)
*
* @param HookEvent $event
*
*/
public function hookInputfieldBeforeProcessInput(HookEvent $event) {
@@ -502,6 +510,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
* Hook into Inputfield::processInput to process input for other languages
*
* Only applies to Inputfields that have: useLanguages == true
*
* @param HookEvent $event
*
*/
public function hookInputfieldAfterProcessInput(HookEvent $event) {
@@ -555,6 +565,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
/**
* Hook into Field::getInputfield to change label/description to proper language
*
* @param HookEvent $event
*
*/
public function hookFieldGetInputfield(HookEvent $event) {
@@ -564,7 +576,9 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
/** @var Field $field */
$field = $event->object;
/** @var Page $page */
$page = $event->arguments[0];
/** @var Template $template */
$template = $page ? $page->template : null;
$inputfield = $event->return;
if(!$inputfield) return;
@@ -607,6 +621,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
/**
* Hook called when new language added
*
* @param HookEvent $event
*
*/
public function hookPageAdded(HookEvent $event) {
@@ -630,6 +646,8 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
/**
* Hook called when language is deleted
*
* @param HookEvent $event
*
*/
public function hookPageDeleteReady(HookEvent $event) {
@@ -684,6 +702,9 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
* This method exists in this class rather than one of the field-specific classes
* because it deals with both language fields and page names, and potentially
* other types of unknown types that implement LanguagesValueInterface.
*
* @param HookEvent $event
* @throws WireException
*
*/
public function hookPageSetLanguageValue(HookEvent $event) {
@@ -747,12 +768,18 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
* This method exists in this class rather than one of the field-specific classes
* because it deals with both language fields and page names, and potentially
* other types of unknown types that implement LanguagesValueInterface.
*
* @param HookEvent $event
* @throws WireException
*
*/
public function hookPageGetLanguageValue(HookEvent $event) {
/** @var Page $page */
$page = $event->object;
/** @var Language $language */
$language = $event->arguments(0);
/** @var Field $field */
$field = $event->arguments(1);
$value = null;
@@ -794,9 +821,13 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
/**
* Module configuration screen
*
* @param array $data
* @return InputfieldWrapper
*
*/
public static function getModuleConfigInputfields(array $data) {
if($data) {}
$form = new InputfieldWrapper();
// TBA
return $form;
@@ -827,10 +858,13 @@ class LanguageSupport extends WireData implements Module, ConfigurableModule {
/**
* Install or uninstall by loading the LanguageSupportInstall script
*
* @param bool $install
*
*/
protected function installer($install = true) {
require_once($this->config->paths->LanguageSupport . 'LanguageSupportInstall.php');
require_once(dirname(__FILE__) . '/LanguageSupportInstall.php');
/** @var LanguageSupportInstall $installer */
$installer = $this->wire(new LanguageSupportInstall());
if($install) $installer->install();
else $installer->uninstall();

View File

@@ -5,6 +5,11 @@
*
* ProcessWire 3.x, Copyright 2016 by Ryan Cramer
* https://processwire.com
*
* @method void languageAdded(Page $language) #pw-hooker
* @method void languageDeleted(Page $language) #pw-hooker
* @method void fieldLanguageAdded(Field $field, Page $language) #pw-hooker
* @method void fieldLanguageRemoved(Field $field, Page $language) #pw-hooker
*
*/
@@ -118,6 +123,8 @@ class LanguageSupportFields extends WireData implements Module {
*
* Replace a value of one field with the value from another field that has the same name, but with the language name appended to it.
* Example: title and title_es
*
* @param HookEvent $event
*
*/
public function hookFieldtypeFormatValue(HookEvent $event) {
@@ -131,6 +138,7 @@ class LanguageSupportFields extends WireData implements Module {
// exit quickly if we can determine now we don't need to continue
if(!isset($this->multilangAlternateFields[$field->name])) return;
/** @var Page $page */
$page = $event->arguments[0];
// determine name of language field, if present.
@@ -160,6 +168,8 @@ class LanguageSupportFields extends WireData implements Module {
/**
* Hook called when new language added
*
* @param HookEvent $event
*
*/
public function hookLanguageAdded(HookEvent $event) {
@@ -178,14 +188,18 @@ class LanguageSupportFields extends WireData implements Module {
/**
* Hookable function called when a new language is added
*
*
* @param Page|Language $language
e*
*/
public function ___languageAdded(Page $language) {
// hookable, intentionally blank
}
/**
* Hook called when language is deleted
* Hook called when languag is deleted
*
* @param HookEvent $event
*
*/
public function hookLanguageDeleted(HookEvent $event) {
@@ -203,6 +217,8 @@ class LanguageSupportFields extends WireData implements Module {
/**
* Hookable function called when a language is deleted
*
* @param Page|Language $language
*
*/
public function ___languageDeleted(Page $language) {
@@ -212,6 +228,9 @@ class LanguageSupportFields extends WireData implements Module {
/**
* Called when a new language is added to the system for each field that implements FieldtypeLanguageInterface
*
* @param Field $field
* @param Page|Language $language
*
*/
public function ___fieldLanguageAdded(Field $field, Page $language) {
@@ -248,6 +267,9 @@ class LanguageSupportFields extends WireData implements Module {
/**
* Called when a language is removed from the system for each field that implements FieldtypeLanguageInterface
*
* @param Field $field
* @param Page|Language $language
*
*/
protected function ___fieldLanguageRemoved(Field $field, Page $language) {
@@ -276,6 +298,8 @@ class LanguageSupportFields extends WireData implements Module {
* Adjusts the selectors passed to the query so that find operations search in user's native language version, as well as the default version.
*
* We may make this behavior configurable later on, as one may want to limit the search to 1 language only.
*
* @param HookEvent $event
*
*/
public function pageFinderGetQuery(HookEvent $event) {
@@ -289,7 +313,7 @@ class LanguageSupportFields extends WireData implements Module {
$arguments = $event->arguments;
$selectors = $arguments[0];
foreach($selectors as $key => $selector) {
foreach($selectors as $selector) {
$changed = false;
$fields = $selector->field;
@@ -334,6 +358,8 @@ class LanguageSupportFields extends WireData implements Module {
* Hook into FieldtypeLanguageInterface::loadPageField
*
* Converts the value to a LanguagesPageFieldValue
*
* @param HookEvent $event
*
*/
public function fieldtypeLoadPageField(HookEvent $event) {
@@ -349,6 +375,8 @@ class LanguageSupportFields extends WireData implements Module {
* Hook into FieldtypeLanguageInterface::wakeupValue
*
* Converts the value to a LanguagesPageFieldValue
*
* @param HookEvent $event
*
*/
public function fieldtypeWakeupValue(HookEvent $event) {
@@ -374,12 +402,14 @@ class LanguageSupportFields extends WireData implements Module {
* Hook into FieldtypeLanguageInterface::sleepValue
*
* Converts a LanguagesPageFieldValue to an array
*
* @param HookEvent $event
*
*/
public function fieldtypeSleepValue(HookEvent $event) {
$page = $event->arguments[0];
$field = $event->arguments[1];
// $page = $event->arguments[0];
// $field = $event->arguments[1];
$value = $event->arguments[2];
//$value = $event->return;
$values = array();

View File

@@ -8,6 +8,9 @@
*
* ProcessWire 3.x, Copyright 2016 by Ryan Cramer
* https://processwire.com
*
* @method void install()
* @method void uninstall()
*
*
*/

View File

@@ -54,7 +54,7 @@ class LanguageTabs extends WireData implements Module, ConfigurableModule {
// so if you want to focus on the Spanish tabs when the user clicks "edit"
// from /es/path/to/page/, then you can by using a page edit link like:
// <a href='{$config->urls->admin}page/edit/?id=$page->id&language=$user->language'>Edit</a>
$id = (int) $this->input->get->language;
$id = (int) $this->input->get('language');
if($id) $language = $this->languages->get($id);
// if language is not specified as a GET variable, then use the user's language
@@ -85,7 +85,9 @@ class LanguageTabs extends WireData implements Module, ConfigurableModule {
$this->wire('modules')->loadModuleFileAssets($this);
$this->wire('modules')->get('JqueryCore')->use('longclick');
if(strpos($e->return, 'LanguageSupport') === false) return;
$id = $e->object->attr('id');
/** @var InputfieldForm $form */
$form = $e->object;
$id = $form->attr('id');
$e->return .= "<script>setupLanguageTabs($('#$id'));</script>";
}
@@ -117,6 +119,7 @@ class LanguageTabs extends WireData implements Module, ConfigurableModule {
}
$id = $inputfield->attr('id');
$liClass = trim($liClass);
/** @noinspection HtmlUnknownAnchorTarget */
$this->tabs[] = "<li class='$liClass'><a data-lang='$language->id' class='$class' href='#langTab_$id'>$title</a></li>";
}
@@ -127,7 +130,7 @@ class LanguageTabs extends WireData implements Module, ConfigurableModule {
* This method automatically calls resetTabs() after rendering.
*
* @param Inputfield $inputfield
* @param $content Content that will have the tabs
* @param string $content Content that will have the tabs
* @return string Modified $content with tabs
*
*/