canDisplayDetails()) {
self::addFavorite(array(
'username'=>$ctype=='user' ? WT_USER_NAME : WT_GEDCOM,
'gid' =>$record->getXref(),
'type' =>$record->getType(),
'file' =>WT_GEDCOM,
'url' =>'',
'note' =>$favnote,
'title' =>$favtitle,
));
}
} elseif ($url) {
self::addFavorite(array(
'username'=>$ctype=='user' ? WT_USER_NAME : WT_GEDCOM,
'gid' =>'',
'type' =>'URL',
'file' =>WT_GEDCOM,
'url' =>$url,
'note' =>$favnote,
'title' =>$favtitle ? $favtitle : $url,
));
}
unset($_GET['action']);
break;
}
$block=get_block_setting($block_id, 'block', false);
if ($cfg) {
foreach (array('block') as $name) {
if (array_key_exists($name, $cfg)) {
$$name=$cfg[$name];
}
}
}
// Override GEDCOM configuration temporarily
if (isset($show_full)) $saveShowFull = $show_full;
$savePedigreeFullDetails = $PEDIGREE_FULL_DETAILS;
$show_full = 1;
$PEDIGREE_FULL_DETAILS = 1;
$userfavs = self::getUserFavorites($ctype=='user' ? WT_USER_NAME : WT_GEDCOM);
if (!is_array($userfavs)) $userfavs = array();
$id=$this->getName().$block_id;
$class=$this->getName().'_block';
$title=$this->getTitle();
if (WT_USER_ID && $ENABLE_AUTOCOMPLETE) {
$content = '
';
} else $content = '';
if ($block) {
$style = 2; // 1 means "regular box", 2 means "wide box"
$tableWidth = ($BROWSERTYPE=='msie') ? '95%' : '99%'; // IE needs to have room for vertical scroll bar inside the box
$cellSpacing = '1px';
} else {
$style = 2;
$tableWidth = '99%';
$cellSpacing = '3px';
}
if ($userfavs) {
$content .= "
";
foreach ($userfavs as $key=>$favorite) {
if (isset($favorite['id'])) $key=$favorite['id'];
$removeFavourite = "".WT_I18N::translate('Remove')."
";
$content .= '';
if ($favorite['type']=='URL') {
$content .= "";
if ($ctype=='user' || WT_USER_GEDCOM_ADMIN) $content .= $removeFavourite;
$content .= " ".PrintReady($favorite['title']).'';
$content .= ' '.PrintReady($favorite['note']);
$content .= ' ';
} else {
$record=WT_GedcomRecord::getInstance($favorite['gid']);
if ($record && $record->canDisplayDetails()) {
if ($record->getType()=='INDI') {
$content .= "getsex()) {
case 'M':
break;
case 'F':
$content.='F';
break;
case 'U':
$content.='NN';
break;
}
$content .= "\">";
if ($ctype=="user" || WT_USER_GEDCOM_ADMIN) $content .= $removeFavourite;
ob_start();
print_pedigree_person($record, $style, 1, $key);
$content .= ob_get_clean();
$content .= PrintReady($favorite["note"]);
$content .= " ";
} else {
$record=WT_GedcomRecord::getInstance($favorite['gid']);
$content .= "";
if ($ctype=='user' || WT_USER_GEDCOM_ADMIN) $content .= $removeFavourite;
if ($record) {
$content.=$record->format_list('span');
} else {
$content.=WT_I18N::translate('No such ID exists in this GEDCOM file.');
}
$content .= ' '.PrintReady($favorite['note']);
$content .= ' ';
}
}
}
$content .= ' |
';
}
$content .= '
';
}
if ($ctype=='user' || WT_USER_GEDCOM_ADMIN) {
$content .=
WT_JS_START.'var pastefield; function paste_id(value) {pastefield.value=value;}'.WT_JS_END.
'
';
$uniqueID = floor(microtime() * 1000000); // This block can theoretically appear multiple times, so use a unique ID.
$content .= "
".WT_I18N::translate('Add a new favorite')."";
$content .= "
";
}
if ($template) {
if ($block) {
require WT_THEME_DIR.'templates/block_small_temp.php';
} else {
require WT_THEME_DIR.'templates/block_main_temp.php';
}
} else {
return $content;
}
// Restore GEDCOM configuration
unset($show_full);
if (isset($saveShowFull)) $show_full = $saveShowFull;
$PEDIGREE_FULL_DETAILS = $savePedigreeFullDetails;
}
// Implement class WT_Module_Block
public function loadAjax() {
return false;
}
// Implement class WT_Module_Block
public function isUserBlock() {
return false;
}
// Implement class WT_Module_Block
public function isGedcomBlock() {
return true;
}
// Implement class WT_Module_Block
public function configureBlock($block_id) {
if (safe_POST_bool('save')) {
set_block_setting($block_id, 'block', safe_POST_bool('block'));
echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END;
exit;
}
require_once WT_ROOT.'includes/functions/functions_edit.php';
$block=get_block_setting($block_id, 'block', false);
echo '| ';
echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow');
echo ' | ';
echo edit_field_yes_no('block', $block);
echo ' |
';
}
/**
* deleteFavorite
* deletes a favorite in the database
* @param int $fv_id the id of the favorite to delete
*/
public static function deleteFavorite($fv_id) {
return (bool)
WT_DB::prepare("DELETE FROM `##favorites` WHERE fv_id=?")
->execute(array($fv_id));
}
/**
* stores a new favorite in the database
* @param array $favorite the favorite array of the favorite to add
*/
public static function addFavorite($favorite) {
// -- make sure a favorite is added
if (empty($favorite['gid']) && empty($favorite['url'])) {
return false;
}
//-- make sure this is not a duplicate entry
$sql = "SELECT 1 FROM `##favorites` WHERE";
if (!empty($favorite['gid'])) {
$sql.=" fv_gid=?";
$vars=array($favorite['gid']);
} else {
$sql.=" fv_url=?";
$vars=array($favorite['url']);
}
$sql.=" AND fv_file=? AND fv_username=?";
$vars[]=$favorite['file'];
$vars[]=$favorite['username'];
if (WT_DB::prepare($sql)->execute($vars)->fetchOne()) {
return false;
}
//-- add the favorite to the database
return (bool)
WT_DB::prepare("INSERT INTO `##favorites` (fv_username, fv_gid, fv_type, fv_file, fv_url, fv_title, fv_note) VALUES (?, ? ,? ,? ,? ,? ,?)")
->execute(array($favorite['username'], $favorite['gid'], $favorite['type'], $favorite['file'], $favorite['url'], $favorite['title'], $favorite['note']));
}
// Get favorites for a user or family tree
public static function getUserFavorites($username) {
self::updateSchema(); // make sure the favorites table has been created
return
WT_DB::prepare(
"SELECT fv_id AS id, fv_username AS username, fv_gid AS gid, fv_type AS type, fv_file AS file, fv_title AS title, fv_note AS note, fv_url AS url".
" FROM `##favorites` WHERE fv_username=? AND fv_file=?")
->execute(array($username, WT_GEDCOM))
->fetchAll(PDO::FETCH_ASSOC);
}
private static function updateSchema() {
// Create tables, if not already present
try {
WT_DB::updateSchema(WT_ROOT.WT_MODULES_DIR.'gedcom_favorites/db_schema/', 'FV_SCHEMA_VERSION', 1);
} catch (PDOException $ex) {
// The schema update scripts should never fail. If they do, there is no clean recovery.
die($ex);
}
}
public function modAction($modAction) {
switch($modAction) {
case 'menu-add-favorite':
// Process the "add to user favorites" menu item on indi/fam/etc. pages
$record=WT_GedcomRecord::getInstance(safe_POST_xref('xref'));
if ($record && $record->canDisplayName()) {
Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->addMessage(/* I18N: %s is the name of a person, source or other record */ WT_I18N::translate('“%s” has been added to your favorites.', $record->getFullName()));
self::addFavorite(array(
'username'=>WT_USER_NAME,
'gid' =>$record->getXref(),
'type' =>$record->getType(),
'file' =>WT_GEDCOM,
'url' =>'',
'note' =>'',
'title' =>'',
));
}
break;
}
}
}