-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFieldtypeFloatLanguage.module
More file actions
90 lines (82 loc) · 2.64 KB
/
FieldtypeFloatLanguage.module
File metadata and controls
90 lines (82 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php namespace ProcessWire;
require_once(wire('config')->paths->root . 'wire/modules/LanguageSupport/FieldtypeLanguageInterface.php');
/**
* Multi-language capable float field
*
* ProcessWire 3.x, Copyright 2016 by Ryan Cramer
* https://processwire.com
*
*
*/
class FieldtypeFloatLanguage extends FieldtypeFloat implements FieldtypeLanguageInterface {
public static function getModuleInfo() {
return array(
'title' => 'Float (Multi-language)',
'version' => 1,
'summary' => 'Field that stores a floating point (decimal) number in multiple languages',
'permanent' => false,
'requires' => array('LanguageSupportFields'),
);
}
/**
* Sanitize value for storage
*
* @param Page $page
* @param Field $field
* @param LanguagesValueInterface|float $value
* @return LanguagesPageFieldValue
*
*/
public function sanitizeValue(Page $page, Field $field, $value) {
foreach($value as $languageName => $languageValue) {
$languageName = $this->wire('languages')->get($languageName)->name;
if(!strlen("$languageValue")) $value->$languageName = '';
if(!is_float($languageValue) && !is_int($languageValue)) {
$value->$languageName = $this->wire('sanitizer')->float((string) $languageValue, array('blankValue' => ''));
}
if(is_null($field->precision)) {
$value->$languageName = (float) $languageValue;
} else {
$value->$languageName = round((float) $languageValue, $field->precision);
}
}
return $value;
}
/**
* Return the database schema in specified format
*
* @param Field $field
* @return array
*
*/
public function getDatabaseSchema(Field $field) {
$schema = parent::getDatabaseSchema($field);
$languageSupport = $this->wire('modules')->get('LanguageSupport');
foreach($languageSupport->otherLanguagePageIDs as $languageID) {
$schema['data' . $languageID] = 'float';
$schema['keys']["data{$languageID}"] = "KEY `data{$languageID}` (`data{$languageID}`)";
}
return $schema;
}
/**
* Override sleep value function
*
* @param Page $page
* @param Field $field
* @param LanguagesValueInterface|float $value
* @return array
*
*/
public function sleepValue(Page $page, Field $field, $value) {
$precision = $field->precision;
$sleepValue = [];
foreach($value as $languageName => $languageValue) {
$language = wire('languages')->get($languageName);
if(!$language->id) continue;
if(is_null($precision)) $precision = self::getPrecision($languageValue);
$dataname = $language->isDefault() ? 'data' : 'data' . $language->id;
if(!is_string($languageValue)) $sleepValue[$dataname] = number_format($languageValue, $precision, '.', '');
}
return $sleepValue;
}
}