Validate()) return false; $this->SetDBField('ResourceId', $this->Application->NextResourceId()); $this->SetDBField('Modified', mktime()); $ret = parent::Create(); if($ret) { if ( kTempTablesHandler::IsTempTable($this->TableName) ) { $table = kTempTablesHandler::GetTempName(TABLE_PREFIX.'CategoryItems'); } else { $table = TABLE_PREFIX.'CategoryItems'; } $cat_id = $this->Application->GetVar('m_cat_id'); $query = 'INSERT INTO '.$table.' (CategoryId,ItemResourceId,PrimaryCat) VALUES ('.$cat_id.','.$this->GetField('ResourceId').',1)'; $this->Conn->Query($query); } return $ret; } function Update($id=null) { $this->VirtualFields['ResourceId'] = true; $this->SetDBField('Modified', mktime()); return parent::Update($id); } function Copy($cat_id=null) { if (!isset($cat_id)) $cat_id = $this->Application->GetVar('m_cat_id'); $this->NameCopy($cat_id); return $this->Create($cat_id); } function NameCopy($master=null, $foreign_key=null) { $title_field = $this->Application->getUnitOption($this->Prefix, 'TitleField'); if (!$title_field) return; $new_name = $this->GetDBField($title_field); $cat_id = $this->Application->GetVar('m_cat_id'); $original_checked = false; do { if ( preg_match("/Copy ([0-9]*)[ ]*of(.*)/", $new_name, $regs) ) { $new_name = 'Copy '.($regs[1]+1).' of '.$regs[2]; } elseif ($original_checked) { $new_name = 'Copy of '.$new_name; } $query = 'SELECT '.$title_field.' FROM '.$this->TableName.' LEFT JOIN '.TABLE_PREFIX.'CategoryItems ON ('.TABLE_PREFIX.'CategoryItems.ItemResourceId = '.$this->TableName.'.ResourceId) WHERE ('.TABLE_PREFIX.'CategoryItems.CategoryId = '.$cat_id.') AND '. $title_field.' = '.$this->Conn->qstr($new_name); $res = $this->Conn->GetOne($query); $original_checked = true; } while ($res !== false); $this->SetDBField($title_field, $new_name); } function MoveToCat($cat_id=null) { // $this->NameCopy(); $cat_id = $this->Application->GetVar('m_cat_id'); // check if the product already exists in destination cat $query = 'SELECT PrimaryCat FROM '.TABLE_PREFIX.'CategoryItems WHERE CategoryId = '.$cat_id.' AND ItemResourceId = '.$this->GetDBField('ResourceId'); // if it's not found is_primary will be FALSE, if it's found but not primary it will be int 0 $is_primary = $this->Conn->GetOne($query); $exists = $is_primary !== false; if ($exists) { // if the Product already exists in destination category if ($is_primary) return; // do nothing when we paste to primary // if it's not primary - delete it from destination category, // as we will move it from current primary below $query = 'DELETE FROM '.TABLE_PREFIX.'CategoryItems WHERE ItemResourceId = '.$this->GetDBField('ResourceId').' AND CategoryId = '.$cat_id; $this->Conn->Query($query); } $query = 'UPDATE '.TABLE_PREFIX.'CategoryItems SET CategoryId = '.$cat_id. ' WHERE ItemResourceId = '.$this->GetDBField('ResourceId').' AND PrimaryCat = 1'; $this->Conn->Query($query); $this->Update(); } // We need to delete CategoryItems record when deleting product function Delete($id=null) { if( isset($id) ) { $this->setID($id); } $this->Load($this->GetID()); $ret = parent::Delete(); if ($ret) { $query = 'DELETE FROM '.TABLE_PREFIX.'CategoryItems WHERE ItemResourceId = '.$this->GetDBField('ResourceId'); $this->Conn->Query($query); } return $ret; } } ?>