/**
  * Add the content of this region into the content index
  * @param  boolean $item_id [description]
  * @param  boolean $rev [description]
  * @return [type]       [description]
  */
 public function index($rev = false)
 {
     if ($rev === false) {
         $rev = $this->regionLatestRev();
     }
     $Items = new PerchContent_Items();
     // clear out old items
     $sql = 'DELETE FROM ' . PERCH_DB_PREFIX . 'content_index 
             WHERE regionID=' . $this->db->pdb((int) $this->id()) . ' AND itemRev<' . $this->db->pdb((int) $Items->get_oldest_rev($this->id()));
     $this->db->execute($sql);
     $items = $Items->get_for_region($this->id(), $rev);
     if (PerchUtil::count($items)) {
         $sql = 'DELETE FROM ' . PERCH_DB_PREFIX . 'content_index 
                 WHERE regionID=' . $this->db->pdb((int) $this->id()) . ' AND itemRev=' . $this->db->pdb((int) $rev);
         $this->db->execute($sql);
         $Template = new PerchTemplate('content/' . $this->regionTemplate(), 'content');
         $tags = $Template->find_all_tags_and_repeaters('content');
         $tag_index = array();
         if (PerchUtil::count($tags)) {
             foreach ($tags as $Tag) {
                 if (!isset($tag_index[$Tag->id()])) {
                     $tag_index[$Tag->id()] = $Tag;
                 }
             }
         }
         foreach ($items as $Item) {
             $fields = PerchUtil::json_safe_decode($Item->itemJSON(), true);
             $sql = 'INSERT INTO ' . PERCH_DB_PREFIX . 'content_index (itemID, regionID, pageID, itemRev, indexKey, indexValue) VALUES ';
             $values = array();
             $id_set = false;
             if (PerchUtil::count($fields)) {
                 foreach ($fields as $key => $value) {
                     if (isset($tag_index[$key])) {
                         $tag = $tag_index[$key];
                         if ($tag->no_index()) {
                             continue;
                         }
                         if ($tag->type() == 'PerchRepeater') {
                             $index_value = $tag->get_index($value);
                         } else {
                             $FieldType = PerchFieldTypes::get($tag->type(), false, $tag);
                             $index_value = $FieldType->get_index($value);
                         }
                         if (is_array($index_value)) {
                             foreach ($index_value as $index_item) {
                                 $data = array();
                                 $data['itemID'] = (int) $Item->itemID();
                                 $data['regionID'] = (int) $this->id();
                                 $data['pageID'] = (int) $Item->pageID();
                                 $data['itemRev'] = (int) $Item->itemRev();
                                 $data['indexKey'] = $this->db->pdb(substr($index_item['key'], 0, 64));
                                 $data['indexValue'] = $this->db->pdb(substr($index_item['value'], 0, 255));
                                 $values[] = '(' . implode(',', $data) . ')';
                                 if ($index_item['key'] == '_id') {
                                     $id_set = true;
                                 }
                             }
                         }
                     }
                 }
             }
             // _id
             if (!$id_set) {
                 $data = array();
                 $data['itemID'] = (int) $Item->itemID();
                 $data['regionID'] = (int) $this->id();
                 $data['pageID'] = (int) $Item->pageID();
                 $data['itemRev'] = (int) $Item->itemRev();
                 $data['indexKey'] = $this->db->pdb('_id');
                 $data['indexValue'] = (int) $Item->itemID();
                 $values[] = '(' . implode(',', $data) . ')';
             }
             // natural order
             $data = array();
             $data['itemID'] = (int) $Item->itemID();
             $data['regionID'] = (int) $this->id();
             $data['pageID'] = (int) $Item->pageID();
             $data['itemRev'] = (int) $Item->itemRev();
             $data['indexKey'] = $this->db->pdb('_order');
             $data['indexValue'] = $this->db->pdb($Item->itemOrder());
             $values[] = '(' . implode(',', $data) . ')';
             $sql .= implode(',', $values);
             $this->db->execute($sql);
         }
     }
     // optimize index
     $sql = 'OPTIMIZE TABLE ' . PERCH_DB_PREFIX . 'content_index';
     $this->db->get_row($sql);
     $Perch = Perch::fetch();
     $Perch->event('region.index', $this);
 }
Esempio n. 2
0
            }
            $Perch->event('page.publish', $Page);
            $Alert->set('success', PerchLang::get('Your most recent change has been reverted.'));
        } else {
            $Alert->set('error', PerchLang::get('There was nothing to undo.'));
        }
    }
}
/* --------- Edit Form ----------- */
if ($Region->regionTemplate() != '') {
    $Resources = new PerchResources();
    $Template = new PerchTemplate('content/' . $Region->regionTemplate(), 'content');
    if ($Template->status == 404) {
        $Alert->set('error', PerchLang::get('The template for this region (%s) cannot be found.', '<code>' . $Region->regionTemplate() . '</code>'));
    }
    $tags = $Template->find_all_tags_and_repeaters('content');
    //PerchUtil::debug($tags);
    $template_help_html = $Template->find_help();
    $Form = new PerchForm('edit');
    $req = array();
    // initialise field types (add head javascript)
    $all_tags = $Template->find_all_tags('content');
    if (PerchUtil::count($all_tags)) {
        foreach ($all_tags as $tag) {
            $FieldType = PerchFieldTypes::get($tag->type(), $Form, $tag, $all_tags);
        }
    }
    // Check for required content
    if (is_array($tags)) {
        foreach ($details as $item) {
            $id = $item['itemID'];