コード例 #1
0
 function processRawFieldData($data, &$status, &$message = null, $simulate = false, $entry_id = null)
 {
     $status = self::__OK__;
     $increment_subsequent_order = false;
     if ($entry_id != null) {
         $entry_id = General::intval($entry_id);
     }
     if (is_array($data)) {
         //TODO Auto Increment for filtered ordering for now just return the data as it is already properly formatted
         return $data;
     }
     if ($entry_id) {
         $new_value = $data;
         $current_value = Symphony::Database()->fetchVar("value", 0, "\n\t\t\t\t\tSELECT value\n\t\t\t\t\tFROM tbl_entries_data_{$this->get('id')}\n\t\t\t\t\tWHERE entry_id=" . $entry_id . "\n\t\t\t\t\tLIMIT 1\n\t\t\t\t");
         if (isset($current_value) && $current_value !== $new_value) {
             $increment_subsequent_order = true;
         }
     } else {
         $increment_subsequent_order = true;
     }
     if ($increment_subsequent_order && !empty($data)) {
         Symphony::Database()->query("UPDATE tbl_entries_data_{$this->get('id')} SET value = (value + 1) WHERE value >= " . $data);
     }
     return array('value' => $data);
 }
コード例 #2
0
ファイル: email.smtp.php プロジェクト: hotdoy/EDclock
 /**
  * Send an email using an SMTP server
  *
  * @throws EmailGatewayException
  * @throws EmailValidationException
  * @throws Exception
  * @return boolean
  */
 public function send()
 {
     $this->validate();
     $settings = array();
     $settings['helo_hostname'] = $this->_helo_hostname;
     if ($this->_auth) {
         $settings['username'] = $this->_user;
         $settings['password'] = $this->_pass;
     }
     $settings['secure'] = $this->_secure;
     try {
         if (!is_a($this->_SMTP, 'SMTP')) {
             $this->_SMTP = new SMTP($this->_host, $this->_port, $settings);
         }
         // Encode recipient names (but not any numeric array indexes)
         $recipients = array();
         foreach ($this->_recipients as $name => $email) {
             // Support Bcc header
             if (isset($this->_header_fields['Bcc']) && $this->_header_fields['Bcc'] == $email) {
                 continue;
             }
             // if the key is not numeric, qEncode the key.
             $name = General::intval($name) > -1 ? General::intval($name) : EmailHelper::qEncode($name);
             $recipients[$name] = $email;
         }
         // Combine keys and values into a recipient list (name <email>, name <email>).
         $recipient_list = EmailHelper::arrayToList($recipients);
         // Encode the subject
         $subject = EmailHelper::qEncode((string) $this->_subject);
         // Build the 'From' header field body
         $from = empty($this->_sender_name) ? $this->_sender_email_address : EmailHelper::qEncode($this->_sender_name) . ' <' . $this->_sender_email_address . '>';
         // Build the 'Reply-To' header field body
         if (!empty($this->_reply_to_email_address)) {
             $reply_to = empty($this->_reply_to_name) ? $this->_reply_to_email_address : EmailHelper::qEncode($this->_reply_to_name) . ' <' . $this->_reply_to_email_address . '>';
         }
         if (!empty($reply_to)) {
             $this->_header_fields = array_merge($this->_header_fields, array('Reply-To' => $reply_to));
         }
         // Build the body text using attachments, html-text and plain-text.
         $this->prepareMessageBody();
         // Build the header fields
         $this->_header_fields = array_merge($this->_header_fields, array('Message-ID' => sprintf('<%s@%s>', md5(uniqid()), HTTP_HOST), 'Date' => date('r'), 'From' => $from, 'Subject' => $subject, 'To' => $recipient_list, 'X-Mailer' => 'Symphony Email Module', 'MIME-Version' => '1.0'));
         // Set header fields and fold header field bodies
         foreach ($this->_header_fields as $name => $body) {
             $this->_SMTP->setHeader($name, EmailHelper::fold($body));
         }
         // Send the email command. If the envelope from variable is set, use that for the MAIL command. This improves bounce handling.
         $this->_SMTP->sendMail(is_null($this->_envelope_from) ? $this->_sender_email_address : $this->_envelope_from, $this->_recipients, $this->_body);
         if ($this->_keepalive === false) {
             $this->closeConnection();
         }
         $this->reset();
     } catch (SMTPException $e) {
         throw new EmailGatewayException($e->getMessage());
     }
     return true;
 }
コード例 #3
0
 /**
  * Send an email using the PHP mail() function
  *
  * Please note that 'encoded-words' should be used according to
  * RFC2047. Basically this means that the subject should be
  * encoded if necessary, as well as (real) names in 'From', 'To'
  * or 'Reply-To' header field bodies. For details see RFC2047.
  *
  * The parts of a message body should be encoded (quoted-printable
  * or base64) to make non-US-ASCII text work with the widest range
  * of email transports and clients.
  *
  * @throws EmailGatewayException
  * @throws EmailValidationException
  * @return bool
  */
 public function send()
 {
     $this->validate();
     try {
         // Encode recipient names (but not any numeric array indexes)
         $recipients = array();
         foreach ($this->_recipients as $name => $email) {
             // Support Bcc header
             if (isset($this->_header_fields['Bcc']) && $this->_header_fields['Bcc'] == $email) {
                 continue;
             }
             // if the key is not numeric, qEncode the key.
             $name = General::intval($name) > -1 ? General::intval($name) : EmailHelper::qEncode($name);
             $recipients[$name] = $email;
         }
         // Combine keys and values into a recipient list (name <email>, name <email>).
         $recipient_list = EmailHelper::arrayToList($recipients);
         // Encode the subject
         $subject = EmailHelper::qEncode((string) $this->_subject);
         // Build the 'From' header field body
         $from = empty($this->_sender_name) ? $this->_sender_email_address : EmailHelper::qEncode($this->_sender_name) . ' <' . $this->_sender_email_address . '>';
         // Build the 'Reply-To' header field body
         if (!empty($this->_reply_to_email_address)) {
             $reply_to = empty($this->_reply_to_name) ? $this->_reply_to_email_address : EmailHelper::qEncode($this->_reply_to_name) . ' <' . $this->_reply_to_email_address . '>';
         }
         if (!empty($reply_to)) {
             $this->_header_fields = array_merge($this->_header_fields, array('Reply-To' => $reply_to));
         }
         // Build the message from the attachments, the html-text and the plain-text.
         $this->prepareMessageBody();
         // Build the header fields
         $this->_header_fields = array_merge($this->_header_fields, array('Message-ID' => sprintf('<%s@%s>', md5(uniqid()), HTTP_HOST), 'Date' => date('r'), 'From' => $from, 'X-Mailer' => 'Symphony Email Module', 'MIME-Version' => '1.0'));
         // Format header fields
         $header_fields = array();
         foreach ($this->_header_fields as $name => $body) {
             $header_fields[] = sprintf('%s: %s', $name, $body);
         }
         /**
          * Make things nice for mail().
          * - Replace CRLF in the message body by LF as required by mail().
          * - Implode the header fields as required by mail().
          */
         $this->_body = str_replace("\r\n", "\n", $this->_body);
         $header_fields = implode("\r\n", $header_fields);
         // Send the email
         mail($recipient_list, $subject, $this->_body, $header_fields, "-f{$this->_sender_email_address}");
     } catch (Exception $e) {
         throw new EmailGatewayException($e->getMessage());
     }
     return true;
 }
コード例 #4
0
ファイル: content.ajaxquery.php プロジェクト: hotdoy/EDclock
 public function view()
 {
     $database = Symphony::Configuration()->get('db', 'database');
     $field_ids = array_map(array('General', 'intval'), explode(',', General::sanitize($_GET['field_id'])));
     $search = MySQL::cleanValue(General::sanitize($_GET['query']));
     $types = array_map(array('MySQL', 'cleanValue'), explode(',', General::sanitize($_GET['types'])));
     $limit = General::intval(General::sanitize($_GET['limit']));
     // Set limit
     if ($limit === 0) {
         $max = '';
     } elseif ($limit < 0) {
         $max = ' LIMIT 100';
     } else {
         $max = sprintf(' LIMIT %d', $limit);
     }
     // Entries
     if (in_array('entry', $types)) {
         foreach ($field_ids as $field_id) {
             $this->get($database, intval($field_id), $search, $max);
         }
     }
     // Associations
     if (in_array('association', $types)) {
         foreach ($field_ids as $field_id) {
             $association_id = $this->getAssociationId($field_id);
             if ($association_id) {
                 $this->get($database, $association_id, $search, $max);
             }
         }
     }
     // Static values
     if (in_array('static', $types)) {
         foreach ($field_ids as $field_id) {
             $this->getStatic($field_id, $search);
         }
     }
     // Return results
     return $this->_Result;
 }
コード例 #5
0
 /**
  * Implodes an associative array or straight array to a
  * comma-separated string
  *
  * @param array $array
  * @return string
  */
 public static function arrayToList(array $array = array())
 {
     $return = array();
     foreach ($array as $name => $email) {
         $return[] = empty($name) || General::intval($name) > -1 ? $email : $name . ' <' . $email . '>';
     }
     return implode(', ', $return);
 }
コード例 #6
0
 /**
  * Appends data into the XML tree of a Data Source
  * @param $wrapper
  * @param $data
  */
 public function appendFormattedElement(&$wrapper, $data, $encode = false, $mode = null, $entry_id = null)
 {
     if (!is_array($data) || empty($data)) {
         return;
     }
     // root for all values
     $root = new XMLElement($this->get('element_name'));
     // selected items
     $entries = static::getEntries($data);
     // current linked entries
     $root->setAttribute('entries', $data['entries']);
     // available sections
     $root->setAttribute('sections', $this->get('sections'));
     // included elements
     $elements = $this->parseElements();
     // cache
     $sectionsCache = new CacheableFetch('SectionManager');
     // DS mode
     if (!$mode) {
         $mode = '*';
     }
     $parentDeepness = General::intval($this->recursiveDeepness);
     $deepness = General::intval($this->get('deepness'));
     // both deepnesses are defined and parent restricts more
     if ($parentDeepness > 0 && $deepness > 0 && $parentDeepness < $deepness) {
         $deepness = $parentDeepness;
     } else {
         if ($parentDeepness > 0 && $deepness < 1) {
             $deepness = $parentDeepness;
         }
     }
     // cache recursive level because recursion might
     // change its value later on.
     $recursiveLevel = $this->recursiveLevel;
     // build entries
     foreach ($entries as $eId) {
         $item = new XMLElement('item');
         // output id
         $item->setAttribute('id', $eId);
         // output recursive level
         $item->setAttribute('level', $recursiveLevel);
         $item->setAttribute('max-level', $deepness);
         // max recursion check
         if ($deepness < 1 || $recursiveLevel < $deepness) {
             // current entry, without data
             $entry = $this->fetchEntry($eId);
             // entry not found...
             if (!$entry || empty($entry)) {
                 $error = new XMLElement('error');
                 $error->setAttribute('id', $eId);
                 $error->setValue(__('Error: entry `%s` not found', array($eId)));
                 $root->prependChild($error);
                 continue;
             }
             // fetch section infos
             $sectionId = $entry->get('section_id');
             $item->setAttribute('section-id', $sectionId);
             $section = $sectionsCache->fetch($sectionId);
             $sectionName = $section->get('handle');
             $item->setAttribute('section', $sectionName);
             // adjust the mode for the current section
             $curMode = $mode;
             if ($curMode) {
                 // remove section name from current mode, i.e sectionName.field
                 if (preg_match('/^(' . $sectionName . '\\.)(.*)$/sU', $curMode)) {
                     $curMode = preg_replace('/^' . $sectionName . '\\./sU', '', $curMode);
                 } else {
                     if (preg_match('/^(' . $sectionName . ')$/sU', $curMode)) {
                         $curMode = null;
                     } else {
                         if (preg_match('/\\./sU', $curMode)) {
                             $item->setAttribute('forbidden', 'yes');
                             $root->appendChild($item);
                             continue;
                         }
                     }
                 }
             }
             $item->setAttribute('section', $section->get('handle'));
             // Get the valid elements for this section only
             $sectionElements = $elements[$sectionName];
             // get all if no mode is set or section element is empty
             // or mode is * and * is allowed
             if (!$curMode || empty($sectionElements) || $curMode === '*' && in_array('*', $sectionElements)) {
                 // setting null = get all
                 $sectionElements = null;
             } else {
                 if (in_array('*', $sectionElements) && !!$curMode) {
                     // get only the mode
                     $sectionElements = array($curMode);
                 } else {
                     if ($curMode !== '*') {
                         foreach ($sectionElements as $secElemIndex => $sectionElement) {
                             if ($curMode != $sectionElement) {
                                 unset($sectionElements[$secElemIndex]);
                             }
                         }
                     }
                 }
             }
             // current entry again, but with data and the allowed schema
             $entry = $this->fetchEntry($eId, $sectionElements);
             // cache fields info
             if (!isset($section->er_field_cache)) {
                 $section->er_field_cache = $section->fetchFields();
             }
             // cache the entry data
             $entryData = $entry->getData();
             // for each field returned for this entry...
             foreach ($entryData as $fieldId => $data) {
                 $filteredData = array_filter($data, function ($value) {
                     return $value != null;
                 });
                 if (empty($filteredData)) {
                     continue;
                 }
                 $field = $section->er_field_cache[$fieldId];
                 $fieldName = $field->get('element_name');
                 // Increment recursive level
                 if ($field instanceof FieldEntry_relationship) {
                     $field->recursiveLevel = $recursiveLevel + 1;
                     $field->recursiveDeepness = $deepness;
                 }
                 // filter out elements per what's allowed
                 if (self::isFieldIncluded($fieldName, $sectionElements)) {
                     $parentIncludableElement = self::getSectionElementName($fieldName, $sectionElements);
                     $fieldIncludableElements = null;
                     // if the includable element is not just the field name
                     if ($parentIncludableElement != $fieldName) {
                         // use the includable element's mode
                         $curMode = preg_replace('/^' . $fieldName . '\\s*\\:\\s*/i', '', $parentIncludableElement, 1);
                     } else {
                         // revert to the field's includable elements
                         $fieldIncludableElements = $field->fetchIncludableElements();
                     }
                     // do not use includable elements
                     if ($field instanceof FieldEntry_relationship) {
                         $fieldIncludableElements = null;
                     }
                     // include children
                     if (!empty($fieldIncludableElements) && count($fieldIncludableElements) > 1) {
                         // append each includable element
                         foreach ($fieldIncludableElements as $fieldIncludableElement) {
                             // remove field name from mode
                             $submode = preg_replace('/^' . $fieldName . '\\s*\\:\\s*/i', '', $fieldIncludableElement, 1);
                             $field->appendFormattedElement($item, $data, $encode, $submode, $eId);
                         }
                     } else {
                         $field->appendFormattedElement($item, $data, $encode, $curMode, $eId);
                     }
                 } else {
                     $item->appendChild(new XMLElement('error', __('Field "%s" not allowed', array($fieldName))));
                 }
             }
             // output current mode
             $item->setAttribute('matched-element', $curMode);
         }
         // append item when done
         $root->appendChild($item);
     }
     // output mode for this field
     $root->setAttribute('data-source-mode', $mode);
     // add all our data to the wrapper;
     $wrapper->appendChild($root);
     // clean up
     $this->recursiveLevel = 1;
     $this->recursiveDeepness = null;
 }
コード例 #7
0
 /**
  * This function iterates over `dsParamFILTERS` and builds the relevant
  * `$where` and `$joins` parameters with SQL. This SQL is generated from
  * `Field->buildDSRetrievalSQL`. A third parameter, `$group` is populated
  * with boolean from `Field->requiresSQLGrouping()`
  *
  * @param string $where
  * @param string $joins
  * @param boolean $group
  * @throws Exception
  */
 public function processFilters(&$where, &$joins, &$group)
 {
     if (!is_array($this->dsParamFILTERS) || empty($this->dsParamFILTERS)) {
         return;
     }
     $pool = FieldManager::fetch(array_filter(array_keys($this->dsParamFILTERS), 'is_int'));
     self::$_fieldPool += $pool;
     if (!is_string($where)) {
         $where = '';
     }
     foreach ($this->dsParamFILTERS as $field_id => $filter) {
         if (is_array($filter) && empty($filter) || trim($filter) == '') {
             continue;
         }
         if (!is_array($filter)) {
             $filter_type = Datasource::determineFilterType($filter);
             $value = preg_split('/' . ($filter_type == Datasource::FILTER_AND ? '\\+' : '(?<!\\\\),') . '\\s*/', $filter, -1, PREG_SPLIT_NO_EMPTY);
             $value = array_map('trim', $value);
             $value = array_map(array('Datasource', 'removeEscapedCommas'), $value);
         } else {
             $value = $filter;
         }
         if (!in_array($field_id, self::$_system_parameters) && $field_id != 'id' && !self::$_fieldPool[$field_id] instanceof Field) {
             throw new Exception(__('Error creating field object with id %1$d, for filtering in data source %2$s. Check this field exists.', array($field_id, '<code>' . $this->dsParamROOTELEMENT . '</code>')));
         }
         // Support system:id as well as the old 'id'. #1691
         if ($field_id === 'system:id' || $field_id === 'id') {
             $c = 'IN';
             if (stripos($value[0], 'not:') === 0) {
                 $value[0] = preg_replace('/^not:\\s*/', null, $value[0]);
                 $c = 'NOT IN';
             }
             // Cast all ID's to integers. (RE: #2191)
             $value = array_map(function ($val) {
                 $val = General::intval($val);
                 // General::intval can return -1, so reset that to 0
                 // so there are no side effects for the following
                 // array_sum and array_filter calls. RE: #2475
                 if ($val === -1) {
                     $val = 0;
                 }
                 return $val;
             }, $value);
             $count = array_sum($value);
             $value = array_filter($value);
             // If the ID was cast to 0, then we need to filter on 'id' = 0,
             // which will of course return no results, but without it the
             // Datasource will return ALL results, which is not the
             // desired behaviour. RE: #1619
             if ($count === 0) {
                 $value[] = 0;
             }
             // If there are no ID's, no need to filter. RE: #1567
             if (!empty($value)) {
                 $where .= " AND `e`.id " . $c . " (" . implode(", ", $value) . ") ";
             }
         } elseif ($field_id === 'system:creation-date' || $field_id === 'system:modification-date' || $field_id === 'system:date') {
             $date_joins = '';
             $date_where = '';
             $date = new FieldDate();
             $date->buildDSRetrievalSQL($value, $date_joins, $date_where, $filter_type == Datasource::FILTER_AND ? true : false);
             // Replace the date field where with the `creation_date` or `modification_date`.
             $date_where = preg_replace('/`t\\d+`.date/', $field_id !== 'system:modification-date' ? '`e`.creation_date_gmt' : '`e`.modification_date_gmt', $date_where);
             $where .= $date_where;
         } else {
             if (!self::$_fieldPool[$field_id]->buildDSRetrievalSQL($value, $joins, $where, $filter_type == Datasource::FILTER_AND ? true : false)) {
                 $this->_force_empty_result = true;
                 return;
             }
             if (!$group) {
                 $group = self::$_fieldPool[$field_id]->requiresSQLGrouping();
             }
         }
     }
 }
コード例 #8
0
ファイル: content.render.php プロジェクト: hotdoy/EDclock
    /**
     *
     * Builds the content view
     */
    public function view()
    {
        // _context[0] => entry values
        // _context[1] => fieldId
        if (!is_array($this->_context) || empty($this->_context)) {
            $this->_Result->appendChild(new XMLElement('error', __('Parameters not found')));
            return;
        } else {
            if (count($this->_context) < self::NUMBER_OF_URL_PARAMETERS) {
                $this->_Result->appendChild(new XMLElement('error', __('Not enough parameters')));
                return;
            } else {
                if (count($this->_context) > self::NUMBER_OF_URL_PARAMETERS) {
                    $this->_Result->appendChild(new XMLElement('error', __('Too many parameters')));
                    return;
                }
            }
        }
        $entriesId = explode(',', MySQL::cleanValue($this->_context[0]));
        $entriesId = array_map(array('General', 'intval'), $entriesId);
        if (!is_array($entriesId) || empty($entriesId)) {
            $this->_Result->appendChild(new XMLElement('error', __('No entry no found')));
            return;
        }
        $parentFieldId = General::intval($this->_context[1]);
        if ($parentFieldId < 1) {
            $this->_Result->appendChild(new XMLElement('error', __('Parent field id not valid')));
            return;
        }
        $parentField = $this->fieldManager->fetch($parentFieldId);
        if (!$parentField || empty($parentField)) {
            $this->_Result->appendChild(new XMLElement('error', __('Parent field not found')));
            return;
        }
        if ($parentField->get('type') != 'entry_relationship') {
            $this->_Result->appendChild(new XMLElement('error', __('Parent field is `%s`, not `entry_relationship`', array($parentField->get('type')))));
            return;
        }
        $includedElements = $this->parseIncludedElements($parentField);
        $xmlParams = self::getXmlParams();
        // Get entries one by one since they may belong to
        // different sections, which prevents us from
        // passing an array of entryId.
        foreach ($entriesId as $key => $entryId) {
            $entry = $this->entryManager->fetch($entryId);
            if (empty($entry)) {
                $li = new XMLElement('li', null, array('data-entry-id' => $entryId));
                $header = new XMLElement('header', null, array('class' => 'frame-header'));
                $title = new XMLElement('h4');
                $title->appendChild(new XMLElement('strong', __('Entry %s not found', array($entryId))));
                $header->appendChild($title);
                $options = new XMLElement('div', null, array('class' => 'destructor'));
                if ($parentField->is('allow_link')) {
                    $options->appendChild(new XMLElement('a', __('Un-link'), array('class' => 'unlink', 'data-unlink' => $entryId)));
                }
                $header->appendChild($options);
                $li->appendChild($header);
                $this->_Result->appendChild($li);
            } else {
                $entry = $entry[0];
                $entryData = $entry->getData();
                $entrySection = $this->sectionManager->fetch($entry->get('section_id'));
                $entryVisibleFields = $entrySection->fetchVisibleColumns();
                $entryFields = $entrySection->fetchFields();
                $entrySectionHandle = $this->getSectionName($entry, 'handle');
                $li = new XMLElement('li', null, array('data-entry-id' => $entryId, 'data-section' => $entrySectionHandle, 'data-section-id' => $entrySection->get('id')));
                $header = new XMLElement('header', null, array('class' => 'frame-header'));
                $title = new XMLElement('h4');
                $title->appendChild(new XMLElement('strong', $this->getEntryTitle($entry, $entryVisibleFields, $entryFields)));
                $title->appendChild(new XMLElement('span', $this->getSectionName($entry)));
                $header->appendChild($title);
                $options = new XMLElement('div', null, array('class' => 'destructor'));
                if ($parentField->is('allow_edit')) {
                    $title->setAttribute('data-edit', $entryId);
                    $options->appendChild(new XMLElement('a', __('Edit'), array('class' => 'edit', 'data-edit' => $entryId)));
                }
                if ($parentField->is('allow_delete')) {
                    $options->appendChild(new XMLElement('a', __('Delete'), array('class' => 'delete', 'data-delete' => $entryId)));
                }
                if ($parentField->is('allow_link')) {
                    $options->appendChild(new XMLElement('a', __('Replace'), array('class' => 'unlink', 'data-replace' => $entryId)));
                }
                if ($parentField->is('allow_delete') || $parentField->is('allow_link')) {
                    $options->appendChild(new XMLElement('a', __('Un-link'), array('class' => 'unlink', 'data-unlink' => $entryId)));
                }
                $header->appendChild($options);
                $li->appendChild($header);
                $xslFilePath = WORKSPACE . '/er-templates/' . $entrySectionHandle . '.xsl';
                if (!empty($entryData) && !!@file_exists($xslFilePath)) {
                    $xmlData = new XMLElement('data');
                    $xmlData->setIncludeHeader(true);
                    $xml = new XMLElement('entry');
                    $xml->setAttribute('id', $entryId);
                    $xmlData->appendChild($xmlParams);
                    $xmlData->appendChild($xml);
                    foreach ($entryData as $fieldId => $data) {
                        $filteredData = array_filter($data, function ($value) {
                            return $value != null;
                        });
                        if (empty($filteredData)) {
                            continue;
                        }
                        $field = $entryFields[$fieldId];
                        $fieldName = $field->get('element_name');
                        $fieldIncludedElement = $includedElements[$entrySectionHandle];
                        if (FieldEntry_relationship::isFieldIncluded($fieldName, $fieldIncludedElement)) {
                            $fieldIncludableElements = $field->fetchIncludableElements();
                            if ($field instanceof FieldEntry_relationship) {
                                $fieldIncludableElements = null;
                            }
                            if (!empty($fieldIncludableElements) && count($fieldIncludableElements) > 1) {
                                foreach ($fieldIncludableElements as $fieldIncludableElement) {
                                    $submode = preg_replace('/^' . $fieldName . '\\s*\\:\\s*/i', '', $fieldIncludableElement, 1);
                                    $field->appendFormattedElement($xml, $data, false, $submode, $entryId);
                                }
                            } else {
                                $field->appendFormattedElement($xml, $data, false, null, $entryId);
                            }
                        }
                    }
                    $indent = false;
                    $mode = $parentField->get('mode');
                    if (isset($_REQUEST['debug'])) {
                        $mode = 'debug';
                    }
                    if ($mode == 'debug') {
                        $indent = true;
                    }
                    $xmlMode = empty($mode) ? '' : 'mode="' . $mode . '"';
                    $xmlString = $xmlData->generate($indent, 0);
                    $xsl = '<?xml version="1.0" encoding="UTF-8"?>
						<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
							<xsl:import href="' . str_replace('\\', '/', $xslFilePath) . '"/>
							<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="no" />
							<xsl:template match="/">
								<xsl:apply-templates select="/data" ' . $xmlMode . ' />
							</xsl:template>
							<xsl:template match="/data" ' . $xmlMode . '>
								<xsl:apply-templates select="entry" ' . $xmlMode . ' />
							</xsl:template>
							<xsl:template match="/data" mode="debug">
								<xsl:copy-of select="/" />
							</xsl:template>
						</xsl:stylesheet>';
                    $xslt = new XsltProcess();
                    $result = $xslt->process($xmlString, $xsl, $this->params);
                    if ($mode == 'debug') {
                        $result = '<pre><code>' . str_replace('<', '&lt;', str_replace('>', '&gt;', $xmlString)) . '</code></pre>';
                    }
                    if ($xslt->isErrors()) {
                        $error = $xslt->getError();
                        $result = $error[1]['message'];
                    }
                    if (!!$xslt && strlen($result) > 0) {
                        $content = new XMLElement('div', $result, array('class' => 'content'));
                        $li->appendChild($content);
                    }
                }
                $this->_Result->appendChild($li);
            }
        }
    }
コード例 #9
0
ファイル: content.delete.php プロジェクト: hotdoy/EDclock
 /**
  *
  * Builds the content view
  */
 public function view()
 {
     if ($_SERVER['REQUEST_METHOD'] != 'POST') {
         $this->_Result['status'] = Page::HTTP_STATUS_BAD_REQUEST;
         $this->_Result['error'] = __('This page accepts posts only');
         $this->setHttpStatus($this->_Result['status']);
         return;
     }
     // _context[0] => entry id to delete
     // _context[1] => fieldId
     // _context[2] => current entry id (parent of entry id to delete)
     if (!is_array($this->_context) || empty($this->_context)) {
         $this->_Result['error'] = __('Parameters not found');
         return;
     } else {
         if (count($this->_context) < self::NUMBER_OF_URL_PARAMETERS) {
             $this->_Result['error'] = __('Not enough parameters');
             return;
         } else {
             if (count($this->_context) > self::NUMBER_OF_URL_PARAMETERS) {
                 $this->_Result['error'] = __('Too many parameters');
                 return;
             }
         }
     }
     // Validate to delete entry ID
     $rawToDeleteEntryId = MySQL::cleanValue($this->_context[0]);
     $toDeleteEntryId = General::intval($rawToDeleteEntryId);
     if ($toDeleteEntryId < 1) {
         $this->_Result['error'] = __('No entry no found');
         return;
     }
     // Validate parent field exists
     $parentFieldId = General::intval(MySQL::cleanValue($this->_context[1]));
     if ($parentFieldId < 1) {
         $this->_Result['error'] = __('Parent id not valid');
         return;
     }
     $parentField = FieldManager::fetch($parentFieldId);
     if (!$parentField || empty($parentField)) {
         $this->_Result['error'] = __('Parent field not found');
         return;
     }
     // Validate parent entry ID
     $rawEntryId = MySQL::cleanValue($this->_context[2]);
     $entryId = General::intval($rawEntryId);
     if ($entryId < 1) {
         $this->_Result['error'] = sprintf(__('Parent entry id `%s` not valid'), $rawEntryId);
         return;
     }
     // Validate parent entry exists
     $entry = EntryManager::fetch($entryId);
     if ($entry == null || count($entry) != 1) {
         $this->_Result['error'] = __('Parent entry not found');
         return;
     }
     if (is_array($entry)) {
         $entry = $entry[0];
     }
     if ($entry->get('section_id') != $parentField->get('parent_section')) {
         $this->_Result['error'] = __('Field and entry do not belong together');
         return;
     }
     // Validate to delete entry exists
     $toDeleteEntry = EntryManager::fetch($toDeleteEntryId);
     if ($toDeleteEntry == null || count($toDeleteEntry) != 1) {
         $this->_Result['error'] = __('Entry not found');
         return;
     }
     if (is_array($toDeleteEntry)) {
         $toDeleteEntry = $toDeleteEntry[0];
     }
     // Validate entry is not linked anywhere else
     if (!isset($_REQUEST['no-assoc'])) {
         //$toDeleteSection = SectionManager::fetch($toDeleteEntry->get('section_id'));
         //$toDeleteAssoc = $toDeleteSection->fetchChildAssociations(false);
         $toDeleteAssoc = SectionManager::fetchChildAssociations($toDeleteEntry->get('section_id'), false);
         //var_dump($toDeleteAssoc);die;
         // TODO: find if the toDeleteEntry is linked or not.
         if (count($toDeleteAssoc) > 1) {
             $this->_Result['assoc'] = true;
             $this->_Result['error'] = __('Entry might be link elsewhere. Do you want to continue?');
             return;
         }
     }
     // Delete the entry
     if (!EntryManager::delete($toDeleteEntryId)) {
         $this->_Result['error'] = __('Could not delete the entry');
         return;
     }
     $this->_Result['entry-id'] = $entryId;
     $this->_Result['ok'] = true;
 }
コード例 #10
0
ファイル: content.save.php プロジェクト: hotdoy/EDclock
 /**
  *
  * Builds the content view
  */
 public function view()
 {
     if ($_SERVER['REQUEST_METHOD'] != 'POST') {
         $this->_Result['status'] = Page::HTTP_STATUS_BAD_REQUEST;
         $this->_Result['error'] = __('This page accepts posts only');
         $this->setHttpStatus($this->_Result['status']);
         return;
     }
     // _context[0] => entry values
     // _context[1] => fieldId
     // _context[2] => current entry id
     if (!is_array($this->_context) || empty($this->_context)) {
         $this->_Result['error'] = __('Parameters not found');
         return;
     } else {
         if (count($this->_context) < self::NUMBER_OF_URL_PARAMETERS) {
             $this->_Result['error'] = __('Not enough parameters');
             return;
         } else {
             if (count($this->_context) > self::NUMBER_OF_URL_PARAMETERS) {
                 $this->_Result['error'] = __('Too many parameters');
                 return;
             }
         }
     }
     // Validate ALL entries ID
     $rawEntriesId = explode(',', MySQL::cleanValue($this->_context[0]));
     $entriesId = array_map(array('General', 'intval'), $rawEntriesId);
     if (!is_array($entriesId) || empty($entriesId)) {
         $this->_Result['error'] = __('No entry no found');
         return;
     }
     if (in_array('null', $rawEntriesId)) {
         $entriesId = array();
     }
     foreach ($entriesId as $entryPos => $entryId) {
         if ($entryId < 1) {
             $this->_Result['error'] = sprintf(__('Entry id `%s` not valid'), $rawEntriesId[$entryPos]);
             return;
         }
     }
     // Validate parent field exists
     $parentFieldId = General::intval(MySQL::cleanValue($this->_context[1]));
     if ($parentFieldId < 1) {
         $this->_Result['error'] = __('Parent id not valid');
         return;
     }
     $parentField = FieldManager::fetch($parentFieldId);
     if (!$parentField || empty($parentField)) {
         $this->_Result['error'] = __('Parent field not found');
         return;
     }
     // Validate parent entry ID
     $rawEntryId = MySQL::cleanValue($this->_context[2]);
     $entryId = General::intval($rawEntryId);
     if ($entryId < 1) {
         $this->_Result['error'] = sprintf(__('Parent entry id `%s` not valid'), $rawEntryId);
         return;
     }
     // Validate parent entry exists
     $entry = EntryManager::fetch($entryId);
     if ($entry == null || count($entry) != 1) {
         $this->_Result['error'] = __('Parent entry not found');
         return;
     }
     if (is_array($entry)) {
         $entry = $entry[0];
     }
     if ($entry->get('section_id') != $parentField->get('parent_section')) {
         $this->_Result['error'] = __('Field and entry do not belong together');
         return;
     }
     $entryData = $entry->getData();
     // set new data
     $entryData[$parentFieldId]['entries'] = implode(',', $entriesId);
     // check if data are valid
     $resMessage = null;
     $res = $parentField->checkPostFieldData($entryData[$parentFieldId], $resMessage, $entryId);
     if ($res != Field::__OK__) {
         $this->_Result['error'] = $resMessage;
         return;
     }
     // save the new data
     $entry->setData($parentFieldId, $entryData[$parentFieldId]);
     if (!$entry->commit()) {
         $this->_Result['error'] = __('Could not save entry');
         return;
     }
     $this->_Result['entry-id'] = $entryId;
     $this->_Result['ok'] = true;
     $this->_Result['entries'] = $entryData[$parentFieldId]['entries'];
 }