summaryrefslogtreecommitdiff
path: root/includes/htmlform/HTMLSelectLimitField.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/htmlform/HTMLSelectLimitField.php')
-rw-r--r--includes/htmlform/HTMLSelectLimitField.php35
1 files changed, 35 insertions, 0 deletions
diff --git a/includes/htmlform/HTMLSelectLimitField.php b/includes/htmlform/HTMLSelectLimitField.php
new file mode 100644
index 00000000..e7f1c047
--- /dev/null
+++ b/includes/htmlform/HTMLSelectLimitField.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * A limit dropdown, which accepts any valid number
+ */
+class HTMLSelectLimitField extends HTMLSelectField {
+ /**
+ * Basically don't do any validation. If it's a number that's fine. Also,
+ * add it to the list if it's not there already
+ *
+ * @param string $value
+ * @param array $alldata
+ * @return bool
+ */
+ function validate( $value, $alldata ) {
+ if ( $value == '' ) {
+ return true;
+ }
+
+ // Let folks pick an explicit limit not from our list, as long as it's a real numbr.
+ if ( !in_array( $value, $this->mParams['options'] )
+ && $value == intval( $value )
+ && $value > 0
+ ) {
+ // This adds the explicitly requested limit value to the drop-down,
+ // then makes sure it's sorted correctly so when we output the list
+ // later, the custom option doesn't just show up last.
+ $this->mParams['options'][$this->mParent->getLanguage()->formatNum( $value )] =
+ intval( $value );
+ asort( $this->mParams['options'] );
+ }
+
+ return true;
+ }
+}