public function setMeta($key, $value){ $metas = $this->getMetas(); // keywords behave slightly differently here. if($key == 'keywords' || $key == 'keywords[]'){ if(!is_array($value)) $value = array($value => $value); // I need to make sure that each value is a key/value pair. foreach($value as $valueidx => $valueval){ if(trim($valueval) == ''){ // Empty value, empty value! unset($value[$valueidx]); } elseif(is_numeric($valueidx)){ // This will replace any numeric based key with the url version of the value. // This may have an odd side effect of transposing numeric values like 2013, // but since the url version of a number is just the number itself, it should be ok. unset($value[$valueidx]); $value[ \Core\str_to_url($valueval) ] = $valueval; } // No else needed, it's acceptable as-is. } foreach($metas as $idx => $meta){ /** @var $meta \FileMetaModel */ // I'm only interested in these! if($meta->get('meta_key') != 'keyword') continue; if(isset($value[ $meta->get('meta_value') ])){ // Yay, update the value title $meta->set('meta_value_title', $value[ $meta->get('meta_value') ]); $meta->save(); unset($value[ $meta->get('meta_value') ]); } else{ // Nope? Delete it! $meta->delete(); unset($this->_metas[$idx]); } } // Any new incoming keywords left? foreach($value as $metavalue => $metavaluetitle){ $meta = new \FileMetaModel($this->_filename, 'keyword', $metavalue); $meta->set('meta_value_title', $metavaluetitle); $meta->save(); $this->_metas[] = $meta; } } elseif($key == 'license'){ // Match this up to the value if it's available. $all = \Core\Licenses\Factory::GetLicenses(); if(isset($all[$value])){ $valuetitle = $all[$value]['title']; } else{ $valuetitle = $value; } foreach($metas as $idx => $meta){ /** @var $meta \FileMetaModel */ // I'm only interested in this one! if($meta->get('meta_key') != $key) continue; // It must be the one I'm looking for. $meta->set('meta_value', $value); $meta->set('meta_value_title', $valuetitle); $meta->save(); return; // :) } // Doesn't exist? $meta = new \FileMetaModel($this->_filename, $key, $value); $meta->set('meta_value_title', $valuetitle); $meta->save(); $this->_metas[] = $meta; } elseif($key == 'authorid'){ // This affects the author tag instead, look for that! foreach($metas as $idx => $meta){ /** @var $meta \FileMetaModel */ // I'm only interested in this one! if($meta->get('meta_key') != 'author') continue; // It must be the one I'm looking for. $meta->set('meta_value', $value); $meta->save(); return; // :) } // Doesn't exist? $meta = new \FileMetaModel($this->_filename, 'author', $value); $meta->save(); $this->_metas[] = $meta; } elseif($key == 'file'){ // Skip this one! } // Default action, one to one! else{ // Look for this key to see if it exists. foreach($metas as $idx => $meta){ /** @var $meta \FileMetaModel */ // I'm only interested in this one! if($meta->get('meta_key') != $key) continue; // It must be the one I'm looking for. if($value){ // Does it have a value? $meta->set('meta_value_title', $value); $meta->save(); } else{ // It's blank but exists... I can fix that :p $meta->delete(); unset($this->_metas[$idx]); } return; // :) } // Doesn't exist? if($value){ $meta = new \FileMetaModel($this->_filename, $key, ''); $meta->set('meta_value_title', $value); $meta->save(); $this->_metas[] = $meta; } } }