示例#1
0
 /**
  * Creates a VALUE attribute for a form input and returns it in this format: [ value="VALUE"]
  *
  * @param string $FieldName The name of the field that contains the value in $this->_DataArray.
  * @param array $Attributes An associative array of attributes for the input. ie. maxlength, onclick,
  *    class, etc. If $Attributes contains a 'value' key, it will override the
  *    one automatically generated by $FieldName.
  * @return string
  */
 protected function _ValueAttribute($FieldName, $Attributes)
 {
     // Value from $Attributes overrides the datasource and the postback.
     return ' value="' . Gdn_Format::Form(ArrayValueI('value', $Attributes, $this->GetValue($FieldName))) . '"';
 }
示例#2
0
 /**
  * Renders a chunk of text
  * 
  * @param mixed $Identify ChunckID.
  * @param mixed $Options type of chunk (Textarea [default], Text)
  * @return mixed $Result.
  */
 function Chunk($Identify, $Options = False)
 {
     static $ChunkModel;
     if (is_null($ChunkModel)) {
         $ChunkModel = new ChunkModel();
     }
     static $PermissionChunksEdit;
     if (is_null($PermissionChunksEdit)) {
         $PermissionChunksEdit = CheckPermission('Candy.Chunks.Edit');
     }
     $Data = $ChunkModel->GetID($Identify);
     if ($Data != False) {
         $String = Gdn_Format::To($Data->Body, $Data->Format);
         $Type = ArrayValueI('type', $Options, 'Textarea');
         $Class = ArrayValueI('class', $Options, '');
         if ($Type) {
             if ($PermissionChunksEdit) {
                 $Class .= ' Editable Editable' . $Type;
             }
             $String = Wrap($String, 'div', array('class' => trim($Class), 'id' => 'Chunk' . $Data->ChunkID));
         }
         return $String;
     }
 }
示例#3
0
 private function RedirectTo()
 {
     $IncomingTarget = $this->Form->GetValue('Target', '');
     return $IncomingTarget == '' ? ArrayValueI('DefaultController', $this->Routes) : $IncomingTarget;
 }
示例#4
0
 /**
  * Returns the XHTML for a list of checkboxes.
  *
  * @param string $FieldName Name of the field being posted with this input.
  *
  * @param mixed $DataSet Data to fill the checkbox list. Either an associative
  * array or a database dataset. ex: RoleID, Name from GDN_Role.
  *
  * @param mixed $ValueDataSet Values to be pre-checked in $DataSet. Either an associative array
  * or a database dataset. ex: RoleID from GDN_UserRole for a single user.
  *
  * @param array $Attributes An associative array of attributes for the select. Here is a list of
  * "special" attributes and their default values:
  * Attribute   Options                        Default
  * ------------------------------------------------------------------------
  * ValueField  The name of the field in       'value'
  *             $DataSet that contains the
  *             option values.
  * TextField   The name of the field in       'text'
  *             $DataSet that contains the
  *             option text.
  *
  * @return string
  */
 public function checkBoxList($FieldName, $DataSet, $ValueDataSet = null, $Attributes = false)
 {
     // Never display individual inline errors for these CheckBoxes
     $Attributes['InlineErrors'] = false;
     $Return = '';
     // If the form hasn't been posted back, use the provided $ValueDataSet
     if ($this->isPostBack() === false) {
         if ($ValueDataSet === null) {
             $CheckedValues = $this->getValue($FieldName);
         } else {
             $CheckedValues = $ValueDataSet;
             if (is_object($ValueDataSet)) {
                 $CheckedValues = array_column($ValueDataSet->resultArray(), $FieldName);
             }
         }
     } else {
         $CheckedValues = $this->getFormValue($FieldName, array());
     }
     $i = 1;
     if (is_object($DataSet)) {
         $ValueField = ArrayValueI('ValueField', $Attributes, 'value');
         $TextField = ArrayValueI('TextField', $Attributes, 'text');
         foreach ($DataSet->result() as $Data) {
             $Instance = $Attributes;
             $Instance = removeKeyFromArray($Instance, array('TextField', 'ValueField'));
             $Instance['value'] = $Data->{$ValueField};
             $Instance['id'] = $FieldName . $i;
             if (is_array($CheckedValues) && in_array($Data->{$ValueField}, $CheckedValues)) {
                 $Instance['checked'] = 'checked';
             }
             $Return .= '<li>' . $this->checkBox($FieldName . '[]', $Data->{$TextField}, $Instance) . "</li>\n";
             ++$i;
         }
     } elseif (is_array($DataSet)) {
         foreach ($DataSet as $Text => $ID) {
             // Set attributes for this instance
             $Instance = $Attributes;
             $Instance = removeKeyFromArray($Instance, array('TextField', 'ValueField'));
             $Instance['id'] = $FieldName . $i;
             if (is_array($ID)) {
                 $ValueField = arrayValueI('ValueField', $Attributes, 'value');
                 $TextField = arrayValueI('TextField', $Attributes, 'text');
                 $Text = val($TextField, $ID, '');
                 $ID = val($ValueField, $ID, '');
             } else {
                 if (is_numeric($Text)) {
                     $Text = $ID;
                 }
             }
             $Instance['value'] = $ID;
             if (is_array($CheckedValues) && in_array($ID, $CheckedValues)) {
                 $Instance['checked'] = 'checked';
             }
             $Return .= '<li>' . $this->checkBox($FieldName . '[]', $Text, $Instance) . "</li>\n";
             ++$i;
         }
     }
     return '<ul class="' . concatSep(' ', 'CheckBoxList', val('listclass', $Attributes)) . '">' . $Return . '</ul>';
 }
示例#5
0
文件: default.php 项目: unlight/Morf
 public function Gdn_Form_CheckBoxList_Override($Form)
 {
     // TODO: LOOK FOR EASYLISTSPLITTER 1.0.2 - JQUERY PLUGIN INSTEAD
     $FieldName =& $Form->EventArguments[0];
     $DataSet =& $Form->EventArguments[1];
     $ValueDataSet =& $Form->EventArguments[2];
     $Attributes =& $Form->EventArguments[3];
     if (!is_object($DataSet) || $DataSet->NumRows() <= 5) {
         return $Form->CheckBoxList($FieldName, $DataSet, $ValueDataSet, $Attributes);
     }
     $CountItems = $DataSet->NumRows();
     $ValueField = ArrayValueI('ValueField', $Attributes, 'value');
     $TextField = ArrayValueI('TextField', $Attributes, 'text');
     $CountColumns = GetValue('Columns', $Attributes, 4, True);
     if (GetIncomingValue('DeliveryType', DELIVERY_TYPE_ALL) != DELIVERY_TYPE_ALL) {
         $CountColumns -= 1;
     }
     if ($CountColumns <= 0) {
         $CountColumns = 1;
     }
     $DataArray = ConsolidateArrayValuesByKey($DataSet->ResultArray(), $TextField, $ValueField);
     $InColumn = floor($CountItems / $CountColumns);
     $OffsetCheckboxCount = $CountItems % $CountColumns;
     $Offset = 0;
     $Return = '';
     if (!$ValueDataSet) {
         $ValueDataSet = array();
     }
     while ($Offset < $CountItems) {
         $Length = $InColumn;
         if ($OffsetCheckboxCount > 0) {
             $OffsetCheckboxCount = $OffsetCheckboxCount - 1;
             $Length++;
         }
         $ColumnCheckboxArray = array_slice($DataArray, $Offset, $Length);
         $Offset += $Length;
         $Html = $Form->CheckBoxList($FieldName, $ColumnCheckboxArray, $ValueDataSet, $Attributes);
         $Html = preg_replace('/for\\="(' . $FieldName . '\\d+)".*?\\<input type\\="checkbox" id\\="(' . $FieldName . '\\d+)"/ies', 'self::CheckBoxLabelCallback("$0", "$1", "$2", "' . $FieldName . '")', $Html);
         $Return .= Wrap($Html, 'div', array('class' => 'MorfCheckBoxList Width1of' . $CountColumns));
         if ($Offset == $Length) {
             $Length = $InColumn;
         }
     }
     $Return = Wrap($Return, 'div');
     return $Return;
 }
   /**
    * Undocumented method.
    *
    * @param string $ApplicationName Undocumented variable.
    * @todo Document DisableApplication() method.
    */
   public function DisableApplication($ApplicationName) {
      // 1. Check to make sure that this application is allowed to be disabled
      $ApplicationInfo = ArrayValueI($ApplicationName, $this->AvailableApplications(), array());
      $ApplicationName = $ApplicationInfo['Index'];
      if (!ArrayValue('AllowDisable', $ApplicationInfo, TRUE))
         throw new Exception(sprintf(T('You cannot disable the %s application.'), $ApplicationName));

      // 2. Check to make sure that no other enabled applications rely on this one
      foreach ($this->EnabledApplications() as $CheckingName => $CheckingInfo) {
         $RequiredApplications = ArrayValue('RequiredApplications', $CheckingInfo, FALSE);
         if (is_array($RequiredApplications) && array_key_exists($ApplicationName, $RequiredApplications) === TRUE) {
            throw new Exception(sprintf(T('You cannot disable the %1$s application because the %2$s application requires it in order to function.'), $ApplicationName, $CheckingName));
         }
      }

      // 2. Disable it
      RemoveFromConfig('EnabledApplications'.'.'.$ApplicationName);

      // Clear the object caches.
      @unlink(PATH_LOCAL_CACHE.'/controller_map.ini');
      @unlink(PATH_LOCAL_CACHE.'/library_map.ini');

      // Redefine the locale manager's settings $Locale->Set($CurrentLocale, $EnabledApps, $EnabledPlugins, TRUE);
      $Locale = Gdn::Locale();
      $Locale->Set($Locale->Current(), $this->EnabledApplicationFolders(), Gdn::PluginManager()->EnabledPluginFolders(), TRUE);
   }
 /**
  * Undocumented method.
  *
  * @param string $ApplicationName Undocumented variable.
  * @todo Document DisableApplication() method.
  */
 public function DisableApplication($ApplicationName)
 {
     // 1. Check to make sure that this application is allowed to be disabled
     $ApplicationInfo = ArrayValueI($ApplicationName, $this->AvailableApplications(), array());
     $ApplicationName = $ApplicationInfo['Index'];
     if (!ArrayValue('AllowDisable', $ApplicationInfo, TRUE)) {
         throw new Exception(sprintf(T('You cannot disable the %s application.'), $ApplicationName));
     }
     // 2. Check to make sure that no other enabled applications rely on this one
     foreach ($this->EnabledApplications() as $CheckingName => $CheckingInfo) {
         $RequiredApplications = ArrayValue('RequiredApplications', $CheckingInfo, FALSE);
         if (is_array($RequiredApplications) && array_key_exists($ApplicationName, $RequiredApplications) === TRUE) {
             throw new Exception(sprintf(T('You cannot disable the %1$s application because the %2$s application requires it in order to function.'), $ApplicationName, $CheckingName));
         }
     }
     // 2. Disable it
     RemoveFromConfig("EnabledApplications.{$ApplicationName}");
     // Clear the object caches.
     Gdn_Autoloader::SmartFree(Gdn_Autoloader::CONTEXT_APPLICATION, $ApplicationInfo);
     // Redefine the locale manager's settings $Locale->Set($CurrentLocale, $EnabledApps, $EnabledPlugins, TRUE);
     $Locale = Gdn::Locale();
     $Locale->Set($Locale->Current(), $this->EnabledApplicationFolders(), Gdn::PluginManager()->EnabledPluginFolders(), TRUE);
     $this->EventArguments['AddonName'] = $ApplicationName;
     Gdn::PluginManager()->CallEventHandlers($this, 'ApplicationManager', 'AddonDisabled');
 }
 /**
  * Enable an application.
  *
  * @param string $applicationName The name of the application to enable.
  * @return bool Returns true if the application was enabled or false otherwise.
  */
 public function enableApplication($applicationName)
 {
     $this->testApplication($applicationName);
     $ApplicationInfo = ArrayValueI($applicationName, $this->availableApplications(), array());
     $applicationName = $ApplicationInfo['Index'];
     $ApplicationFolder = val('Folder', $ApplicationInfo, '');
     SaveToConfig('EnabledApplications' . '.' . $applicationName, $ApplicationFolder);
     Logger::event('addon_enabled', Logger::NOTICE, 'The {addonName} application was enabled.', array('addonName' => $applicationName));
     // Redefine the locale manager's settings $Locale->Set($CurrentLocale, $EnabledApps, $EnabledPlugins, true);
     $Locale = Gdn::locale();
     $Locale->set($Locale->current(), $this->enabledApplicationFolders(), Gdn::pluginManager()->enabledPluginFolders(), true);
     $this->EventArguments['AddonName'] = $applicationName;
     Gdn::pluginManager()->callEventHandlers($this, 'ApplicationManager', 'AddonEnabled');
     return true;
 }
 /**
  * Looks through the plugins directory for valid plugins and returns them
  * as an associative array of "PluginName" => "Plugin Info Array". It also
  * adds "Folder", and "ClassName" definitions to the Plugin Info Array for
  * each plugin.
  */
 public function AvailablePlugins($GetPlugin = NULL, $ForceReindex = FALSE)
 {
     if (!is_array($this->_AvailablePlugins) || $ForceReindex) {
         $this->_AvailablePlugins = array();
         $this->_PluginsByClassName = array();
         $Info = array();
         $InverseRelation = array();
         if ($FolderHandle = opendir(PATH_PLUGINS)) {
             if ($FolderHandle === FALSE) {
                 return $Info;
             }
             // Loop through subfolders (ie. the actual plugin folders)
             while (($Item = readdir($FolderHandle)) !== FALSE) {
                 if (in_array($Item, array('.', '..'))) {
                     continue;
                 }
                 $PluginPaths = SafeGlob(PATH_PLUGINS . DS . $Item . DS . '*plugin.php');
                 $PluginPaths[] = PATH_PLUGINS . DS . $Item . DS . 'default.php';
                 foreach ($PluginPaths as $i => $PluginFile) {
                     $this->PluginAvailable($PluginFile);
                 }
             }
             closedir($FolderHandle);
         }
     }
     if (is_null($GetPlugin)) {
         return $this->_AvailablePlugins;
     } elseif (ArrayKeyExistsI($GetPlugin, $this->_AvailablePlugins)) {
         return ArrayValueI($GetPlugin, $this->_AvailablePlugins);
     } else {
         return FALSE;
     }
 }
 /**
  * Populates the dropdown list for searching in certain categories -direct copy pretty
  * much out of the core of vanilla
  *
  * @param string $FieldName
  * @param mixed $Options
  * @return mixed dropdown list
  */
 public function CategoryDropDown($FieldName = 'forums[]', $Options = FALSE)
 {
     $Form = new Gdn_Form();
     //get form object
     $Value = ArrayValueI('Value', $Options);
     // The selected category id
     $CategoryData = GetValue('CategoryData', $Options, CategoryModel::Categories());
     // Sanity check
     if (is_object($CategoryData)) {
         $CategoryData = (array) $CategoryData;
     } else {
         if (!is_array($CategoryData)) {
             $CategoryData = array();
         }
     }
     // Respect category permissions (remove categories that the user shouldn't see).
     $SafeCategoryData = array();
     foreach ($CategoryData as $CategoryID => $Category) {
         if ($Value != $CategoryID) {
             if ($Category['CategoryID'] < 0 || !$Category['PermsDiscussionsView']) {
                 continue;
             }
         }
         $SafeCategoryData[$CategoryID] = $Category;
     }
     // Opening select tag
     $Return = '<select';
     $Return .= ' multiple="multiple"';
     $Return .= ' id="SearchDropdown"';
     $Return .= ' name="' . $FieldName . '"';
     $Return .= ' size="4"';
     $Return .= ">\n";
     // Get value from attributes
     if ($Value === FALSE) {
         $Value = $Form->GetValue($FieldName);
         $Return .= '<option value="0" selected="selected">All</option>';
         $All = TRUE;
     } else {
         $Return .= '<option value="0">All</option>';
         $All = FALSE;
     }
     if (!is_array($Value)) {
         $Value = array($Value);
     }
     // Prevent default $Value from matching key of zero
     $HasValue = $Value !== array(FALSE) && $Value !== array('') ? TRUE : FALSE;
     // Start with null option?
     //$Return .= '<option value="0" selected="selected">All</option>';    //Put an "All" categories option
     // Show root categories as headings (ie. you can't post in them)?
     $DoHeadings = C('Vanilla.Categories.DoHeadings');
     // If making headings disabled and there was no default value for
     // selection, make sure to select the first non-disabled value, or the
     // browser will auto-select the first disabled option.
     $ForceCleanSelection = $DoHeadings && !$HasValue;
     // Write out the category options
     if (is_array($SafeCategoryData)) {
         foreach ($SafeCategoryData as $CategoryID => $Category) {
             $Depth = GetValue('Depth', $Category, 0);
             $Disabled = $Depth == 1 && $DoHeadings;
             $Selected = in_array($CategoryID, $Value) && $HasValue;
             if ($ForceCleanSelection && $Depth > 1) {
                 $Selected = TRUE;
                 $ForceCleanSelection = FALSE;
             }
             $Return .= '<option value="' . $CategoryID . '"';
             if ($Disabled) {
                 $Return .= ' disabled="disabled"';
             } else {
                 if ($Selected && $All == FALSE) {
                     $Return .= ' selected="selected"';
                 }
             }
             // only allow selection if NOT disabled
             $Name = GetValue('Name', $Category, 'Blank Category Name');
             if ($Depth > 1) {
                 $Name = str_pad($Name, strlen($Name) + $Depth - 1, ' ', STR_PAD_LEFT);
                 $Name = str_replace(' ', '&#160;', $Name);
             }
             $Return .= '>' . $Name . "</option>\n";
         }
     }
     return $Return . '</select>';
 }
 /**
  * Enable an application.
  *
  * @param string $applicationName The name of the application to enable.
  * @return bool Returns true if the application was enabled or false otherwise.
  */
 public function enableApplication($applicationName)
 {
     $this->testApplication($applicationName);
     $ApplicationInfo = ArrayValueI($applicationName, $this->availableApplications(), array());
     $applicationName = $ApplicationInfo['Index'];
     $ApplicationFolder = val('Folder', $ApplicationInfo, '');
     saveToConfig('EnabledApplications' . '.' . $applicationName, $ApplicationFolder);
     Logger::event('addon_enabled', Logger::NOTICE, 'The {addonName} application was enabled.', array('addonName' => $applicationName));
     $this->EventArguments['AddonName'] = $applicationName;
     Gdn::pluginManager()->callEventHandlers($this, 'ApplicationManager', 'AddonEnabled');
     return true;
 }