Index: releases/5.2.1/constants.php =================================================================== --- releases/5.2.1/constants.php (revision 0) +++ releases/5.2.1/constants.php (revision 16070) @@ -0,0 +1,29 @@ + Array ('self' => true), + 'OnProcessReciprocalLinks' => Array ('self' => true), + 'OnSetGrouping' => Array ('self' => 'view'), + 'OnStoreSelected' => Array ('self' => 'view'), + 'OnMerge' => Array ('self' => 'edit'), + ); + + $this->permMapping = array_merge($this->permMapping, $permissions); + } + + /** + * Apply any custom changes to list's sql query + * + * @param kEvent $event + * @return void + * @access protected + * @see kDBEventHandler::OnListBuild() + */ + protected function SetCustomQuery(kEvent $event) + { + parent::SetCustomQuery($event); + + $object = $event->getObject(); + /* @var $object kDBList */ + + if ( !$this->Application->isAdminUser ) { + $object->addFilter('expire_filter', '(Expire > ' . adodb_mktime() . ' OR Expire IS NULL)'); + } + + if ( substr($event->Special, 0, 10) == 'duplicates' ) { + $object->removeFilter('category_filter'); + + $link_helper = $this->Application->recallObject('LinkHelper'); + /* @var $link_helper LinkHelper */ + + $grouping = $link_helper->getGrouping($event->getPrefixSpecial()); + + switch ($event->Special) { + case 'duplicates': + foreach ($grouping as $group_field) { + $object->AddGroupByField($object->TableName . '.' . $group_field); + } + + $object->addFilter('has_dupes_filter', 'DupeCount > 1', kDBList::AGGREGATE_FILTER); + break; + + case 'duplicates-sub': + $main_object = $this->Application->recallObject($event->Prefix . '.duplicates'); + /* @var $main_object kDBItem */ + + foreach ($grouping as $field_index => $group_field) { + $object->addFilter('dupe_filter_' . $field_index, '%1$s.`' . $group_field . '` = ' . $this->Conn->qstr($main_object->GetDBField($group_field))); + } + break; + } + + $object->addFilter('primary_filter', TABLE_PREFIX . 'CategoryItems.PrimaryCat = 1'); + } + } + + /** + * Set groping fields for link duplicate checker + * + * @param kEvent $event + */ + function OnSetGrouping($event) + { + $this->Application->LinkVar($event->getPrefixSpecial(true).'_dupe_fields', $event->getPrefixSpecial().'_dupe_fields'); + } + + /** + * Merge duplicate links together (only categories) & delete duplicates + * + * @param kEvent $event + */ + function OnMerge($event) + { + $link_helper = $this->Application->recallObject('LinkHelper'); + /* @var $link_helper LinkHelper */ + + $grouping = $link_helper->getGrouping($event->getPrefixSpecial()); + + $ids = $this->StoreSelectedIDs($event); + if ( !$ids ) { + return; + } + + // check, that user has not selected multiple links from same group + $primary_links = Array (); + + $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); + $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); + $sql = 'SELECT * + FROM ' . $table_name . ' + WHERE ' . $id_field . ' IN (' . implode(',', $ids) . ')'; + $links = $this->Conn->Query($sql, $id_field); + + $groping_error = false; + + foreach ($links as $link_data) { + $group_key = ''; + foreach ($grouping as $grouping_field) { + $group_key .= 'main_table.`' . $grouping_field . '` = ' . $this->Conn->qstr($link_data[$grouping_field]) . ' AND '; + } + $group_key = substr($group_key, 0, -5); + + if ( isset($primary_links[$group_key]) ) { + $groping_error = true; + break; + } + else { + $primary_links[$group_key] = $link_data['ResourceId']; + } + } + + if ( !$groping_error ) { + $temp_handler = $this->Application->recallObject($event->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler'); + /* @var $temp_handler kTempTablesHandler */ + + $categories_sql = ' SELECT main_table.ResourceId, ci.CategoryId, main_table.' . $id_field . ' + FROM ' . $table_name . ' main_table + LEFT JOIN ' . TABLE_PREFIX . 'CategoryItems ci ON main_table.ResourceId = ci.ItemResourceId + WHERE %s'; + + foreach ($primary_links as $group_key => $primary_resource_id) { + $categories = Array (); + $group_links = Array (); + $group_categories = $this->Conn->Query(sprintf($categories_sql, $group_key)); + + foreach ($group_categories as $category_data) { + $group_links[$category_data['ResourceId']] = $category_data[$id_field]; + $categories[$category_data['ResourceId'] == $primary_resource_id ? 'remove' : 'add'][] = $category_data['CategoryId']; + } + + unset($group_links[$primary_resource_id]); + $categories = array_unique(array_diff($categories['add'], $categories['remove'])); + + if ( $categories ) { + // add link to other link categories + $values_sql = ''; + foreach ($categories as $category_id) { + $values_sql .= '(' . $category_id . ',' . $primary_resource_id . ',0),'; + } + $values_sql = substr($values_sql, 0, -1); + $insert_sql = 'INSERT INTO ' . TABLE_PREFIX . 'CategoryItems (CategoryId,ItemResourceId,PrimaryCat) VALUES ' . $values_sql; + $this->Conn->Query($insert_sql); + } + + // delete all links from group except primary + $temp_handler->DeleteItems($event->Prefix, $event->Special, array_values($group_links)); + } + } + else { + $event->status = kEvent::erFAIL; + $event->redirect = false; + $this->Application->SetVar($event->getPrefixSpecial().'_error', 1); + } + } + + /** + * Stores ids, that were selected in duplicate checker + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnStoreSelected(kEvent $event) + { + $this->StoreSelectedIDs($event); + + $event->SetRedirectParam('pass', 'm,' . $event->getPrefixSpecial()); + } + + /** + * Allows to enhance link after creation + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnCreate(kEvent $event) + { + parent::OnCreate($event); + + if ( $event->status != kEvent::erSUCCESS ) { + return; + } + + $object = $event->getObject(); + /* @var $object kDBItem */ + + // replace 0 id in post with actual created id (used in enhancement process) + $items_info = $this->Application->GetVar($event->getPrefixSpecial(true)); + kUtil::array_rename_key($items_info, 0, $object->GetID()); + $this->Application->SetVar($event->getPrefixSpecial(true), $items_info); + + // listing was created -> enhance it right away + $enhancement_event = new kEvent('ls:OnRequestEnhancement'); + $this->Application->HandleEvent($enhancement_event); + + if ( ($enhancement_event->status == kEvent::erSUCCESS) && strlen($enhancement_event->redirect) ) { + $event->SetRedirectParam('next_template', $event->redirect); + $event->redirect = $enhancement_event->redirect; + } + } + + /** + * Adds free listing option to listing type selection + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnAfterConfigRead(kEvent $event) + { + parent::OnAfterConfigRead($event); + + if (defined('IS_INSTALL') && IS_INSTALL) { + return ; + } + + $free_listings = $this->Application->ConfigValue('Link_AllowFreeListings'); + + $virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields'); + $virtual_fields['ListingTypeId']['options'] = $free_listings ? Array (0 => 'lu_free_listing') : Array (); + + $language_id = $this->Application->GetVar('m_lang'); + $duplicate_options = array_flip($virtual_fields['DuplicateCheckFields']['options']); + $duplicate_options['NAME'] = 'l' . $language_id . '_Name'; + $virtual_fields['DuplicateCheckFields']['options'] = array_flip($duplicate_options); + $default = $virtual_fields['DuplicateCheckFields']['default']; + $virtual_fields['DuplicateCheckFields']['default'] = str_replace('|Name|', '|l' . $language_id . '_Name|', $default); + + $this->Application->setUnitOption($event->Prefix, 'VirtualFields', $virtual_fields); + + if (!$this->Application->isAdminUser) { + // for now only on Front-End + $this->Application->setUnitOption($event->Prefix, 'PopulateMlFields', true); + } + } + + /** + * contact us form submitted on link details page + * + * @param kEvent $event + */ + function OnContactFormSubmit($event) + { + $fields = Array ( + 'ContactFormFullName', 'ContactFormEmail', 'ContactFormSubject', 'ContactFormBody', 'ContactFormCaptcha' + ); + + // reset errors var + $this->Application->SetVar('ContactForm_HasErrors', ''); + + // 1. validate form fields + $required_fields = $this->Application->GetVar('FormRequiredFields'); + foreach ($fields as $field_name) { + $field_value = trim($this->Application->GetVar($field_name)); + if (in_array($field_name, $required_fields)) { + // custom captcha validation + if ($field_name == 'ContactFormCaptcha') { + if (!strlen($field_value) || ($field_value != $this->Application->RecallVar($event->Prefix . '_captcha_code'))) { + $this->Application->SetVar('error_'.$field_name, 1); + + $captcha_helper = $this->Application->recallObject('CaptchaHelper'); + /* @var $captcha_helper kCaptchaHelper */ + $this->Application->StoreVar($event->Prefix . '_captcha_code', $captcha_helper->GenerateCaptchaCode()); + + $event->status = kEvent::erFAIL; + $event->redirect = false; + } + } + // email validation + elseif (!strlen($field_value) || ($field_name == 'ContactFormEmail' && !preg_match('/'.REGEX_EMAIL_USER.'@'.REGEX_EMAIL_DOMAIN.'/', $field_value))) { + $this->Application->SetVar('error_'.$field_name, 1); + $event->status = kEvent::erFAIL; + $event->redirect = false; + } + + } + } + + if ($event->status != kEvent::erSUCCESS) { + // set errors var + $this->Application->SetVar('ContactForm_HasErrors', 1); + return ; + } + + $object = $event->getObject(); // get link object + /* @var $object kDBItem */ + + $send_params = Array( + 'from_name' => $this->Application->GetVar('ContactFormFullName'), + 'from_email' => $this->Application->GetVar('ContactFormEmail'), + 'from_subject' => $this->Application->GetVar('ContactFormSubject'), + 'message' => $this->Application->GetVar('ContactFormBody'), + 'to_linkname' => $object->GetField('Name'), + ); + + $email_sent = $this->Application->emailUser('LINK.CONTACTFORM', $object->GetDBField('CreatedById'), $send_params); + + if ( $email_sent ) { + $event->redirect = $this->Application->GetVar('success_template'); + + $redirect_params = Array ( + 'opener' => 's', + 'pass' => 'all', + 'thankyou_header' => $this->Application->GetVar('success_label_header'), + 'thankyou_text' => $this->Application->GetVar('success_label_body') + ); + $event->setRedirectParams($redirect_params); + + $this->Application->emailAdmin('LINK.CONTACTFORM', null, $send_params); + } + else { + $this->Application->SetVar('error_ContactFormEmail', 1); + $event->status = kEvent::erFAIL; + $event->redirect = false; + } + } + + /** + * Makes reciprocal check on link, when it is created + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeItemCreate(kEvent $event) + { + parent::OnBeforeItemCreate($event); + + $this->_checkLink($event); + } + + /** + * Makes reciprocal check on link, when it is updated + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeItemUpdate(kEvent $event) + { + parent::OnBeforeItemUpdate($event); + + $this->_checkLink($event); + } + + /** + * Makes reciprocal check on link & saves results + * + * @param kEvent $event + */ + function _checkLink($event) + { + if (!$this->Application->ConfigValue('ReciprocalLinkChecking')) { + return ; + } + + $object = $event->getObject(); + /* @var $object kDBItem */ + + if ($object->GetDBField('Url') != $object->GetOriginalField('Url')) { + // check only when url was changed + + $link_helper = $this->Application->recallObject('LinkHelper'); + /* @var $link_helper LinkHelper */ + + $link_checked = $link_helper->CheckReciprocalURL($object->GetDBField('Url')); + + $object->SetDBField('ReciprocalLinkFound', $link_checked ? LINK_IS_RECIPROCAL : LINK_IS_NOT_RECIPROCAL); + + if (!$link_checked) { + $this->Application->emailAdmin('LINK.RECIPROCAL.CHECK.FAILED'); + } + } + } + + /** + * Update links status by their reciprocal status + * + * @param kEvent $event + */ + function OnProcessReciprocalLinks($event) + { + if ( !$this->Application->ConfigValue('ReciprocalLinkChecking') ) { + return; + } + + $object = $event->getObject( Array('skip_autoload' => true) ); + /* @var $object kCatDBItem */ + + $link_helper = $this->Application->recallObject('LinkHelper'); + /* @var $link_helper LinkHelper */ + + $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); + $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); + + // 1. verify all links, that were not verified previously + $sql = 'SELECT ' . $id_field . ' + FROM ' . $table_name . ' + WHERE (ReciprocalLinkFound = 0)'; + $not_checked_links = $this->Conn->GetCol($sql); + + foreach ($not_checked_links as $link_id) { + $object->Load($link_id); + + $link_checked = $link_helper->CheckReciprocalURL($object->GetDBField('Url')); + + $object->SetDBField('ReciprocalLinkFound', $link_checked ? LINK_IS_RECIPROCAL : LINK_IS_NOT_RECIPROCAL); + $object->Update(); + + if ( $link_checked ) { + $object->ApproveChanges(); + } + else { + $object->DeclineChanges(); + $this->Application->emailAdmin('LINK.RECIPROCAL.CHECK.FAILED'); + } + } + + // 2. approve all links, that have succeeded in reciprocal check (during adding/changing on front-end) + $sql = 'SELECT ' . $id_field . ' + FROM ' . $table_name . ' + WHERE (ReciprocalLinkFound = ' . LINK_IS_RECIPROCAL . ') AND (Status <> ' . STATUS_ACTIVE . ')'; + $verified_links = $this->Conn->GetCol($sql); + + foreach ($verified_links as $link_id) { + $object->Load($link_id); + $object->ApproveChanges(); + } + + // 3. decline all links, that failed in reciprocal check (during adding/changing on front-end) + $sql = 'SELECT ' . $id_field . ' + FROM ' . $table_name . ' + WHERE (ReciprocalLinkFound = ' . LINK_IS_NOT_RECIPROCAL . ') AND (Status <> ' . STATUS_DISABLED . ')'; + $not_verified_links = $this->Conn->GetCol($sql); + + foreach ($not_verified_links as $link_id) { + $object->Load($link_id); + $object->DeclineChanges(); + } + } + + /** + * Allows to load duplicate link by special id + * + * @param kEvent $event + * @return int + * @access public + */ + public function getPassedID(kEvent $event) + { + $id = parent::getPassedID($event); + + if ( ($event->Special == 'duplicates') && !is_numeric($id) ) { + $load_keys = unserialize(base64_decode($id)); + // can't return $load_keys as $id, because "kCatDBItem::GetKeyClause" will ignore them + + foreach ($load_keys as $field => $value) { + $load_keys[$field] = $field . ' = ' . $this->Conn->qstr($value); + } + + $sql = 'SELECT ' . $this->Application->getUnitOption($event->Prefix, 'IDField') . ' + FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ' + WHERE (' . implode(') AND (', $load_keys) . ')'; + $id = $this->Conn->GetOne($sql); + } + + return $id; + } + + /** + * Returns events, that require item-based (not just event-name based) permission check + * + * @return Array + */ + function _getMassPermissionEvents() + { + $events = parent::_getMassPermissionEvents(); + $events[] = 'OnMerge'; + + return $events; + } + + /** + * [HOOK] Allows to add cloned subitem to given prefix + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnCloneSubItem(kEvent $event) + { + parent::OnCloneSubItem($event); + + if ( $event->MasterEvent->Prefix == 'rev' ) { + $clones = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'Clones'); + $subitem_prefix = $event->Prefix . '-' . $event->MasterEvent->Prefix; + + $clones[$subitem_prefix]['ConfigMapping'] = Array ( + 'PerPage' => 'Perpage_LinkReviews', + 'ShortListPerPage' => 'Perpage_LinkReviews_Short', + 'DefaultSorting1Field' => 'Link_ReviewsSort', + 'DefaultSorting2Field' => 'Link_ReviewsSort2', + 'DefaultSorting1Dir' => 'Link_ReviewsOrder', + 'DefaultSorting2Dir' => 'Link_ReviewsOrder2', + + 'ReviewDelayInterval' => 'link_ReviewDelay_Interval', + 'ReviewDelayValue' => 'link_ReviewDelay_Value', + ); + + $this->Application->setUnitOption($event->MasterEvent->Prefix, 'Clones', $clones); + } + } + + /** + * Occurs before original item of item in pending editing got deleted (for hooking only) + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeDeleteOriginal(kEvent $event) + { + parent::OnBeforeDeleteOriginal($event); + + $object = $event->getObject(); + /* @var $object kDBItem */ + + $link_id = $event->getEventParam('original_id'); + $new_resource_id = $object->GetDBField('ResourceId'); + + $sql = 'SELECT ResourceId + FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ' + WHERE ' . $this->Application->getUnitOption($event->Prefix, 'IDField') . '=' . $link_id; + $old_resource_id = $this->Conn->GetOne($sql); + + $this->Application->SetVar('original_resource_id', $old_resource_id); + $this->changeResourceId('rel', 'TargetId', $old_resource_id, $new_resource_id); + } + + /** + * Occurs after original item of item in pending editing got deleted + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnAfterDeleteOriginal(kEvent $event) + { + parent::OnAfterDeleteOriginal($event); + + $object = $event->getObject(); + /* @var $object kDBItem */ + + $old_resource_id = $this->Application->GetVar('original_resource_id'); + $new_resource_id = $object->GetDBField('ResourceId'); + + $this->changeResourceId('ls', 'ItemResourceId', $old_resource_id, $new_resource_id); + } + + /** + * Changes item resource id in one field + * + * @param string $prefix + * @param string $field + * @param string $old_resource_id + * @param string $new_resource_id + * @return void + * @access protected + */ + protected function changeResourceId($prefix, $field, $old_resource_id, $new_resource_id) + { + $fields_hash = Array ($field => $new_resource_id); + $table_name = $this->Application->getUnitOption($prefix, 'TableName'); + + $this->Conn->doUpdate($fields_hash, $table_name, $field . ' = ' . $old_resource_id); + } + } \ No newline at end of file Property changes on: releases/5.2.1/units/links/links_event_handler.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.6.6.16 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/links/links_config.php =================================================================== --- releases/5.2.1/units/links/links_config.php (revision 0) +++ releases/5.2.1/units/links/links_config.php (revision 16070) @@ -0,0 +1,653 @@ + 'l', + 'ItemClass' => Array ('class' => 'kCatDBItem', 'file' => '', 'build_event' => 'OnItemBuild'), + 'ListClass' => Array ('class' => 'kCatDBList', 'file' => '', 'build_event' => 'OnListBuild'), + 'EventHandlerClass' => Array ('class' => 'LinksEventHandler', 'file' => 'links_event_handler.php', 'build_event' => 'OnBuild'), + 'TagProcessorClass' => Array ('class' => 'LinkTagProcessor', 'file' => 'link_tag_processor.php', 'build_event' => 'OnBuild'), + 'AutoLoad' => true, + + 'ConfigPriority' => 0, + + 'CheckSimulatniousEdit' => true, + + 'RewritePriority' => 101, + 'RewriteListener' => 'CategoryItemRewrite:RewriteListener', + + 'Hooks' => Array ( + Array ( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => '', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnAfterConfigRead'), + 'DoPrefix' => 'cdata', + 'DoSpecial' => '*', + 'DoEvent' => 'OnDefineCustomFields', + ), + + Array ( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => '#file', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnAfterConfigRead'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnCloneSubItem', + ), + + Array ( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => 'rev', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnAfterConfigRead'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnCloneSubItem', + ), + + Array ( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => 'fav', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnAfterConfigRead'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnCloneSubItem', + ), + + Array ( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => 'rel', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnAfterConfigRead'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnCloneSubItem', + ), + + Array ( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => 'img', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnAfterConfigRead'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnCloneSubItem', + ), + + Array ( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => 'ci', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnAfterConfigRead'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnCloneSubItem', + ), + + Array ( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => '', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnAfterConfigRead'), + 'DoPrefix' => 'captcha', + 'DoSpecial' => '*', + 'DoEvent' => 'OnPrepareCaptcha', + ), + ), + + 'QueryString' => Array ( + 1 => 'id', + 2 => 'Page', + 3 => 'PerPage', + 4 => 'event', + 5 => 'mode', + ), + + 'AggregateTags' => Array ( + Array ( + 'AggregateTo' => 'l', + 'AggregatedTagName' => 'ListLinks', + 'LocalTagName' => 'PrintList2', + ), + ), + + 'CatalogItem' => true, + 'AdminTemplatePath' => 'links', + 'AdminTemplatePrefix' => 'links_', + 'SearchConfigPostfix' => 'links', + + 'IDField' => 'LinkId', + 'StatusField' => Array ('Status'), // field, that is affected by Approve/Decline events + + 'ItemType' => 4, + + 'StatisticsInfo' => Array ( + 'pending' => Array ( + 'icon' => 'icon16_link_pending.png', + 'label' => 'la_Text_Links', + 'js_url' => '#url#', + 'url' => Array ('t' => 'catalog/advanced_view', 'SetTab' => 'l', 'pass' => 'm,l.showall', 'l.showall_event' => 'OnSetFilterPattern', 'l.showall_filters' => 'show_active=0,show_pending=1,show_disabled=0,show_new=1,show_hot=1,show_pop=1,show_pick=1'), + 'status' => STATUS_PENDING, + ), + ), + + 'TitlePhrase' => 'la_Text_Link', // phrase used to specify item type in relationship list + + 'ViewMenuPhrase' => 'la_title_Links', + 'CatalogTabIcon' => 'in-link:icon16_links.png', + 'UsePendingEditing' => true, // item editing is controlled by LINK.ADD/EDIT, LINK.ADD/EDIT.PENDING permissions + + 'CatalogSelectorName' => 'linklist', // used in old catalog section + + 'ItemPropertyMappings' => Array ( + 'NewDays' => 'Link_NewDays', // number of days item to be NEW + 'MinPopVotes' => 'Link_MinPopVotes', // minimum number of votes for an item to be POP + 'MinPopRating' => 'Link_MinPopRating', // minimum rating for an item to be POP + 'MaxHotNumber' => 'Link_MaxHotNumber', // maximum number of HOT items + + 'HotLimit' => 'Link_HotLimit', // variable name in inp_Cache table + 'ClickField' => 'Hits', // item click count is stored here (in item table) + ), + + 'TitleField' => 'Name', + + 'TitlePresets' => Array ( + 'default' => Array ( + 'new_status_labels' => Array ('l' => '!la_title_AddingLink!'), + 'edit_status_labels' => Array ('l' => '!la_title_EditingLink!'), + 'new_titlefield' => Array ('l' => '!la_title_NewLink!'), + ), + + 'links_edit' => Array ( + 'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_General!", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next'), + ), + + 'link_list' => Array ( + 'prefixes' => Array ('c_List', 'l_List'), + 'format' => "!la_title_Categories! (#c_recordcount#) - !la_title_Links!", + 'toolbar_buttons' => Array (), + ), + + 'links_categories' => Array ( + 'prefixes' => Array ('l', 'l-ci_List'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Categories!", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'delete', 'setprimary',), + ), + + 'links_relations' => Array ( + 'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Relations!", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'edit', 'delete', 'approve', 'decline', 'view', 'dbl-click'), + ), + + 'links_images' => Array ( + 'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Images!", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'edit', 'delete', 'move_up', 'move_down', 'setprimary', 'view', 'dbl-click'), + ), + + 'links_files' => Array ( + 'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Files!", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'edit', 'delete', 'view', 'dbl-click'), + ), + + 'links_reviews' => Array ( + 'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Reviews!", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next', 'new_item', 'edit', 'delete', 'approve', 'decline', 'move_up', 'move_down', 'view', 'dbl-click'), + ), + + 'links_custom' => Array ( + 'prefixes' => Array ('l'), 'format' => "#l_status# '#l_titlefield#' - !la_title_Custom!", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next'), + ), + + 'images_edit' => Array ( + 'prefixes' => Array ('l', 'l-img'), + 'new_status_labels' => Array ('l-img' => '!la_title_Adding_Image!'), + 'edit_status_labels' => Array ('l-img' => '!la_title_Editing_Image!'), + 'new_titlefield' => Array ('l-img' => '!la_title_New_Image!'), + 'format' => "#l_status# '#l_titlefield#' - #l-img_status# '#l-img_titlefield#'", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next'), + ), + + 'file_edit' => Array ( + 'prefixes' => Array ('l', 'l-file'), + 'new_status_labels' => Array ('l-file' => "!la_title_AddingFile!"), + 'edit_status_labels' => Array ('l-file' => '!la_title_EditingFile!'), + 'new_titlefield' => Array ('l-file' => '!la_title_NewFile!'), + 'format' => "#l_status# '#l_titlefield#' - #l-file_status# '#l-file_titlefield#'", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next'), + ), + + 'reviews_edit' => Array ( + 'prefixes' => Array ('l', 'l-rev'), + 'new_status_labels' => Array ('l-rev' =>"!la_title_Adding_Review! '!la_title_New_Review!'"), + 'edit_status_labels' => Array ('l-rev' => '!la_title_Editing_Review!'), + 'format' => "#l_status# '#l_titlefield#' - #l-rev_status#", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next'), + ), + + 'relations_edit' => Array ( + 'prefixes' => Array ('l', 'l-rel'), + 'new_status_labels' => Array ('l-rel' =>"!la_title_Adding_Relationship! '!la_title_New_Relationship!'"), + 'edit_status_labels' => Array ('l-rel' => '!la_title_Editing_Relationship!'), + 'format' => "#l_status# '#l_titlefield#' - #l-rel_status#", + 'toolbar_buttons' => Array ('select', 'cancel', 'prev', 'next'), + ), + + 'links_export' => Array ('format' => '!la_title_LinksExport!'), + + 'links_import' => Array ('format' => '!la_title_ImportLinks!'), + + 'duplicate_links' => Array ( + 'prefixes' => Array ('l.duplicates_List'), 'format' => "!la_title_DuplicateLinks! - %s", + 'toolbar_buttons' => Array ('edit', 'view', 'dbl-click'), + ), + + 'duplicate_links_view' => Array ( + 'prefixes' => Array ('l.duplicates-sub_List'), 'format' => "!la_title_Links!", + 'toolbar_buttons' => Array ('cancel', 'edit', 'delete', 'merge_links', 'view', 'dbl-click'), + ), + + 'tree_in-link' => Array ('format' => '!la_Text_Version! '.$this->Application->findModule('Name', 'In-Link', 'Version')), + ), + + 'EditTabPresets' => Array ( + 'Default' => Array ( + 'general' => Array ('title' => 'la_tab_General', 't' => 'in-link/links/links_edit', 'priority' => 1), + 'categories' => Array ('title' => 'la_tab_Categories', 't' => 'in-link/links/links_categories', 'priority' => 2), + 'relations' => Array ('title' => 'la_tab_Relations', 't' => 'in-link/links/links_relations', 'priority' => 3), + 'images' => Array ('title' => 'la_tab_Images', 't' => 'in-link/links/links_images', 'priority' => 4), + 'files' => Array ('title' => 'la_tab_Files', 't' => 'in-link/links/links_files', 'priority' => 5), + 'reviews' => Array ('title' => 'la_tab_Reviews', 't' => 'in-link/links/links_reviews', 'priority' => 6), + 'custom' => Array ('title' => 'la_tab_Custom', 't' => 'in-link/links/links_custom', 'priority' => 7), + ), + ), + + 'PermItemPrefix' => 'LINK', + + 'PermTabText' => 'In-Link', + 'PermSection' => Array ('main' => 'CATEGORY:in-link:links_list', 'search' => 'in-link:configuration_search', 'custom' => 'in-link:configuration_custom'), + + 'Sections' => Array ( + 'in-link' => Array ( + 'parent' => 'in-portal:root', + 'icon' => 'settings_in-link', + 'label' => 'la_title_In-Link', + 'url' => Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'), + 'permissions' => Array ('view'), + 'priority' => 2.3, + 'container' => true, + 'type' => stTREE, + ), + + 'in-link:links' => Array ( + 'parent' => 'in-portal:site', + 'icon' => 'links', + 'label' => 'la_tab_Links', + 'url' => Array ('t' => 'catalog/advanced_view', 'anchor' => 'tab-l.showall', 'pass' => 'm'), + 'onclick' => 'setCatalogTab(\'l.showall\')', + 'permissions' => Array ('view'), + 'priority' => 3.1, + 'type' => stTREE, + ), + + 'in-link:duplicate_checker' => Array ( + 'parent' => 'in-link', + 'icon' => 'duplicate_checker', + 'label' => 'la_tab_DuplicateChecker', + 'url' => Array ('t' => 'in-link/duplicate_checker', 'pass' => 'm'), + 'permissions' => Array ('view', 'add', 'edit', 'delete'), + 'priority' => 2, + 'type' => stTREE, + ), + + // link settings + 'in-link:setting_folder' => Array ( + 'parent' => 'in-portal:system', + 'icon' => 'conf_directory', + 'label' => 'la_title_In-Link', + 'use_parent_header' => 1, + 'url' => Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'), + 'permissions' => Array ('view'), + 'priority' => 3.3, + 'container' => true, + 'type' => stTREE, + ), + + /*'in-link:inlink_general' => Array ( + 'parent' => 'in-link:setting_folder', + 'icon' => 'core:settings_general', + 'label' => 'la_tab_GeneralSettings', + 'url' => Array ('t' => 'config/config_general', 'pass_section' => true, 'pass' => 'm'), + 'permissions' => Array ('view', 'add', 'edit'), + 'priority' => 0.9, + 'type' => stTREE, + ),*/ + + 'in-link:configuration_output' => Array ( + 'parent' => 'in-link:setting_folder', + 'icon' => 'core:conf_output', + 'label' => 'la_tab_ConfigOutput', + 'url' => Array ('t' => 'config/config_general', 'pass_section' => true, 'pass' => 'm'), + 'permissions' => Array ('view', 'add', 'edit'), + 'priority' => 1, + 'type' => stTREE, + ), + + 'in-link:configuration_search' => Array ( + 'parent' => 'in-link:setting_folder', + 'icon' => 'core:conf_search', + 'label' => 'la_tab_ConfigSearch', + 'url' => Array ('t' => 'config/config_search', 'module_key' => 'links', 'pass_section' => true, 'pass' => 'm'), + 'permissions' => Array ('view', 'edit'), + 'priority' => 2, + 'type' => stTREE, + ), + + 'in-link:configuration_custom' => Array ( + 'parent' => 'in-link:setting_folder', + 'icon' => 'core:conf_customfields', + 'label' => 'la_tab_ConfigCustom', + 'url' => Array ('t' => 'custom_fields/custom_fields_list', 'cf_type' => 4, 'pass_section' => true, 'pass' => 'm,cf'), + 'permissions' => Array ('view', 'add', 'edit', 'delete'), + 'priority' => 3, + 'type' => stTREE, + ), + ), + + 'FilterMenu' => Array ( + 'Groups' => Array ( + Array ('mode' => 'AND', 'filters' => Array ('show_new'), 'type' => kDBList::HAVING_FILTER), + Array ('mode' => 'AND', 'filters' => Array ('show_hot'), 'type' => kDBList::HAVING_FILTER), + Array ('mode' => 'AND', 'filters' => Array ('show_pop'), 'type' => kDBList::HAVING_FILTER), + Array ('mode' => 'AND', 'filters' => Array ('show_pick'), 'type' => kDBList::WHERE_FILTER), + ), + 'Filters' => Array ( + 'show_new' => Array ('label' => 'la_Text_New', 'on_sql' => '', 'off_sql' => '`IsNew` != 1' ), + 'show_hot' => Array ('label' => 'la_Text_Hot', 'on_sql' => '', 'off_sql' => '`IsHot` != 1' ), + 'show_pop' => Array ('label' => 'la_Text_Pop', 'on_sql' => '', 'off_sql' => '`IsPop` != 1' ), + 'show_pick' => Array ('label' => 'la_prompt_EditorsPick', 'on_sql' => '', 'off_sql' => '%1$s.`EditorsPick` != 1' ), + ), + ), + + 'TableName' => TABLE_PREFIX.'Link', + 'CustomDataTableName' => TABLE_PREFIX . 'LinkCustomData', + + 'CalculatedFields' => Array ( + '' => Array ( + 'UserName' => 'IF (ISNULL(u.Username), IF (%1$s.CreatedById = ' . USER_ROOT . ', "root", IF (%1$s.CreatedById = ' . USER_GUEST . ', "Guest", "n/a")), IF(u.Username = "", u.Email, u.Username))', + 'CategoryId' => TABLE_PREFIX.'%3$sCategoryItems.CategoryId', + 'Filename' => TABLE_PREFIX.'%3$sCategoryItems.Filename', + 'CategoryFilename' => TABLE_PREFIX.'Categories.NamedParentPath', + 'PrimaryCat' => TABLE_PREFIX.'%3$sCategoryItems.PrimaryCat', + 'ParentPath' => TABLE_PREFIX.'Categories.ParentPath', + + 'AltName' => 'img.AltName', + 'SameImages' => 'img.SameImages', + 'LocalThumb' => 'img.LocalThumb', + 'ThumbPath' => 'img.ThumbPath', + 'ThumbUrl' => 'img.ThumbUrl', + 'LocalImage' => 'img.LocalImage', + 'LocalPath' => 'img.LocalPath', + 'FullUrl' => 'img.Url', + ), + ), + + 'CacheModRewrite' => true, + + 'AggregatedCalculatedFields' => Array ( + + 'duplicates' => Array ( + 'DupeCount' => 'COUNT(*)', + ), + ), + + 'ListSQLs' => Array ( '' => ' SELECT %1$s.* %2$s + FROM %1$s + LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId + {PERM_JOIN} + LEFT JOIN '.TABLE_PREFIX.'Categories ON '.TABLE_PREFIX.'Categories.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId + LEFT JOIN '.TABLE_PREFIX.'%3$sCatalogImages img ON img.ResourceId = %1$s.ResourceId AND img.DefaultImg = 1 + LEFT JOIN '.TABLE_PREFIX.'Users u ON %1$s.CreatedById = u.PortalUserId + LEFT JOIN '.TABLE_PREFIX.'%3$sLinkCustomData cust ON %1$s.ResourceId = cust.ResourceId', + + ), // key - special, value - list select sql + + 'ListSortings' => Array ( + '' => Array ( + 'ForcedSorting' => Array ('EditorsPick' => 'desc', 'Priority' => 'desc'), + 'Sorting' => Array ('Name' => 'asc', 'Description' => 'desc'), + ) + ), + 'ItemSQLs' => Array ( '' => ' SELECT %1$s.* %2$s + FROM %1$s + LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId + LEFT JOIN '.TABLE_PREFIX.'Categories ON '.TABLE_PREFIX.'Categories.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId + LEFT JOIN '.TABLE_PREFIX.'%3$sCatalogImages img ON img.ResourceId = %1$s.ResourceId AND img.DefaultImg = 1 + LEFT JOIN '.TABLE_PREFIX.'Users u ON %1$s.CreatedById = u.PortalUserId + LEFT JOIN '.TABLE_PREFIX.'%3$sLinkCustomData cust ON %1$s.ResourceId = cust.ResourceId'), + + 'SubItems' => Array ('l-rev', 'l-ci', 'l-rel', 'l-img', 'l-cdata', 'l-fav', 'l-file'), + + 'Fields' => Array ( + 'LinkId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,), + 'Name' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'not_null' => 1, 'required' => 1, 'max_len' => 255, 'default' => ''), + 'AutomaticFilename' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 1), + 'Description' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'using_fck' => 1, 'default' => null), + 'Url' => Array ('type' => 'string', 'not_null' => 1, 'required' => 1, 'default' => ''), + 'CreatedOn' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'), + 'Modified' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'), + 'Expire' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null), + 'Hits' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%d', 'not_null' => 1, 'default' => 0), + 'CachedRating' => Array ('type' => 'string', 'not_null' => 1, 'formatter' => 'kFormatter', 'default' => 0), + 'CachedVotesQty' => Array ('type' => 'int', 'formatter' => 'kFormatter', 'not_null' => 1, 'default' => 0), + 'CachedReviewsQty' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'CreatedById' => Array ( + 'type' => 'int', + 'formatter' => 'kLEFTFormatter', + 'options' => Array (USER_ROOT => 'root', USER_GUEST => 'Guest'), + 'left_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'Users WHERE %s', + 'left_key_field' => 'PortalUserId', 'left_title_field' => USER_TITLE_FIELD, + 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), + 'sample_value' => 'Guest', 'required' => 1, 'default' => NULL, + ), + 'ModifiedById' => Array ('type' => 'int', 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), 'options' => Array (USER_ROOT => 'root', USER_GUEST => 'Guest'), 'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'Users WHERE %s', 'left_key_field' => 'PortalUserId', 'left_title_field' => USER_TITLE_FIELD, 'default' => NULL), + 'Priority' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'Status' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1, + 'not_null' => 1, 'default' => 2, + ), + 'EditorsPick' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, + 'not_null' => 1, 'default' => 0, + ), + 'ResourceId' => Array ('type' => 'int', 'default' => null), + 'HotItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2), + 'PopItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2), + 'NewItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2), + 'OrgId' => Array ('type' => 'int', 'default' => null), + 'CustomTemplate' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''), + 'MetaKeywords' => Array ('type' => 'string', 'default' => null), + 'MetaDescription' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null), + 'ReciprocalLinkFound' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_NotChecked', 1 => 'la_Yes', 2 => 'la_No'), 'use_phrases' => 1, + 'not_null' => 1, 'default' => 0 + ), + ), + + 'VirtualFields' => Array ( + 'Relevance' => Array ('type' => 'float', 'default' => 0), + 'UserName' => Array ('type' => 'string', 'default' => ''), + 'DupeCount' => Array ('type' => 'string', 'default' => ''), + + 'ListingTypeId' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %1$s FROM '.TABLE_PREFIX.'ListingTypes ORDER BY Name', 'option_title_field' => 'Name', 'option_key_field' => 'ListingTypeId', 'default' => 0), + + 'MoreCategories' => Array ('type' => 'string', 'default' => ''), + + // export related fields: begin + 'CategoryId' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => 0), + 'ExportFormat' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CSV', /*2 => 'XML'*/), 'default' => 1), + 'ExportFilename' => Array ('type' => 'string', 'default' => ''), + 'FieldsSeparatedBy' => Array ('type' => 'string', 'default' => ','), + 'FieldsEnclosedBy' => Array ('type' => 'string', 'default' => '"'), + 'LineEndings' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'Windows', 2 => 'UNIX'), 'default' => 1), + 'LineEndingsInside' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CRLF', 2 => 'LF'), 'default' => 2), + 'IncludeFieldTitles' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options' => Array (0 => 'la_No', 1 => 'la_Yes'), + 'use_phrases' => 1, 'default' => 1, + ), + 'ExportColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''), + 'AvailableColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''), + 'CategoryFormat' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_MixedCategoryPath', 2 => 'la_SeparatedCategoryPath'), 'use_phrases' => 1, 'default' => 1), + 'CategorySeparator' => Array ('type' => 'string', 'error_field' => 'CategoryFormat', 'default' => ':'), + 'IsBaseCategory' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options' => Array (0 => 'la_No', 1 => 'la_Yes'), + 'use_phrases' => 1, 'default' => 0, + ), + // export related fields: end + + // import related fields: begin + 'FieldTitles' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Automatic', 2 => 'la_Manual'), 'use_phrases' => 1, 'default' => 1), + 'ImportSource' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Upload', 2 => 'la_Local'), 'use_phrases' => 1, 'default' => 2), + 'ImportFilename' => Array ('type' => 'string', 'formatter' => 'kUploadFormatter', 'max_size' => MAX_UPLOAD_SIZE, 'upload_dir' => EXPORT_BASE_PATH . '/', 'default' => ''), + 'ImportLocalFilename' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'default' => ''), + 'CheckDuplicatesMethod' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_IDField', 2 => 'la_OtherFields'), 'use_phrases' => 1, 'default' => 1), + 'ReplaceDuplicates' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_No', 1 => 'la_Yes'), 'use_phrases' => 1, 'default' => 0), + 'DuplicateCheckFields' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ('Name' => 'NAME', 'Url' => 'URL'), 'default' => '|Name|Url|'), + 'SkipFirstRow' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'default' => 1), + // import related fields: end + + 'ThumbnailImage' => Array ('type' => 'string', 'default' => ''), + 'FullImage' => Array ('type' => 'string', 'default' => ''), + 'ImageAlt' => Array ('type' => 'string', 'default' => ''), + + 'Filename' => Array ('type' => 'string', 'default' => ''), + 'CategoryFilename' => Array ('type' => 'string', 'default' => ''), + 'PrimaryCat' => Array ('type' => 'int', 'default' => 0), + 'IsHot' => Array ('type' => 'int', 'default' => 0), + 'IsNew' => Array ('type' => 'int', 'default' => 0), + 'IsPop' => Array ('type' => 'int', 'default' => 0), + 'CachedNavbar' => Array ('type' => 'string', 'default' => ''), + 'ParentPath' => Array ('type' => 'string', 'default' => ''), + + // for primary image + 'AltName' => Array ('type' => 'string', 'default' => ''), + 'SameImages' => Array ('type' => 'string', 'default' => ''), + 'LocalThumb' => Array ('type' => 'string', 'default' => ''), + 'ThumbPath' => Array ('type' => 'string', 'default' => ''), + 'ThumbUrl' => Array ('type' => 'string', 'default' => ''), + 'LocalImage' => Array ('type' => 'string', 'default' => ''), + 'LocalPath' => Array ('type' => 'string', 'default' => ''), + 'FullUrl' => Array ('type' => 'string', 'default' => ''), + ), + + 'Grids' => Array ( + 'Default' => Array ( + 'Icons' => Array ( + 0 => 'icon16_link_disabled.png', + 1 => 'icon16_link.png', + 2 => 'icon16_link_pending.png', + 'NEW' => 'icon16_link_new.png', + ), + 'Fields' => Array ( + 'LinkId' => Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ), + 'Name' => Array ('title' => 'column:la_fld_LinkName', 'data_block' => 'grid_catitem_td', 'width' => 200, ), + 'Priority' => Array('filter_block' => 'grid_range_filter', 'width' => 65), + 'Url' => Array ('title' => 'la_col_LinkUrl', 'width' => 200, ), + 'Description' => Array ('first_chars' => 100, 'width' => 100, ), + 'CreatedOn' => Array ('filter_block' => 'grid_date_range_filter', 'width' => 145, ), + 'Modified' => Array ('filter_block' => 'grid_date_range_filter', 'width' => 145, ), + 'Status' => Array ('filter_block' => 'grid_options_filter', 'width' => 70, ), + 'Hits' => Array ('filter_block' => 'grid_range_filter', 'width' => 60, ), + 'CachedRating' => Array ('title' => 'column:la_fld_Rating', 'filter_block' => 'grid_range_filter', 'width' => 70, ), + 'CachedVotesQty' => Array ('title' => 'la_col_VoteCount', 'filter_block' => 'grid_range_filter', 'width' => 70, ), + 'CachedReviewsQty' => Array ('title' => 'la_col_ReviewCount', 'filter_block' => 'grid_range_filter', 'width' => 85, ), + ), + ), + + 'Radio' => Array ( + 'Icons' => Array ( + 0 => 'icon16_link_disabled.png', + 1 => 'icon16_link.png', + 2 => 'icon16_link_pending.png', + 'NEW' => 'icon16_link_new.png', + ), + 'Selector' => 'radio', + 'Fields' => Array ( + 'LinkId' => Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_radio_td', 'filter_block' => 'grid_range_filter', 'width' => 70, ), + 'Name' => Array ('title' => 'column:la_fld_LinkName', 'data_block' => 'grid_catitem_td', 'width' => 200, ), + 'Priority' => Array('filter_block' => 'grid_range_filter', 'width' => 65), + 'Url' => Array ('title' => 'la_col_LinkUrl', 'width' => 200, ), + 'Description' => Array ('first_chars' => 100, 'width' => 100, ), + 'CreatedOn' => Array ('filter_block' => 'grid_date_range_filter', 'width' => 145, ), + 'Modified' => Array ('filter_block' => 'grid_date_range_filter', 'width' => 145, ), + 'Status' => Array ('filter_block' => 'grid_options_filter', 'width' => 70, ), + 'Hits' => Array ('filter_block' => 'grid_range_filter', 'width' => 60, ), + 'CachedRating' => Array ('title' => 'column:la_fld_Rating', 'filter_block' => 'grid_range_filter', 'width' => 70, ), + 'CachedVotesQty' => Array ('title' => 'la_col_VoteCount', 'filter_block' => 'grid_range_filter', 'width' => 70, ), + 'CachedReviewsQty' => Array ('title' => 'la_col_ReviewCount', 'filter_block' => 'grid_range_filter', 'width' => 85, ), + ), + ), + + 'Duplicates' => Array ( + 'Icons' => Array ( + 0 => 'icon16_link_disabled.png', + 1 => 'icon16_link.png', + 2 => 'icon16_link_pending.png', + 'NEW' => 'icon16_link_new.png', + ), + + 'Fields' => Array ( + 'Name' => Array ('title' => 'column:la_fld_LinkName', 'filter_block' => 'grid_like_filter', 'width' => 250, ), + 'Url' => Array ('title' => 'la_col_LinkUrl', 'filter_block' => 'grid_like_filter', 'width' => 300, ), + 'DupeCount' => Array ('title' => 'la_col_DupeCount', 'filter_block' => 'grid_range_filter', 'width' => 100, ), + ), + ), + ), + + 'ConfigMapping' => Array ( + 'PerPage' => 'Perpage_Links', + 'ShortListPerPage' => 'Perpage_Links_Short', + 'ForceEditorPick' => 'Link_ShowPick', + 'DefaultSorting1Field' => 'Link_SortField', + 'DefaultSorting2Field' => 'Link_SortField2', + 'DefaultSorting1Dir' => 'Link_SortOrder', + 'DefaultSorting2Dir' => 'Link_SortOrder2', + + 'RatingDelayValue' => 'link_RatingDelay_Value', + 'RatingDelayInterval' => 'link_RatingDelay_Interval', + + ), + ); \ No newline at end of file Property changes on: releases/5.2.1/units/links/links_config.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.75.2.30 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/links/link_tag_processor.php =================================================================== --- releases/5.2.1/units/links/link_tag_processor.php (revision 0) +++ releases/5.2.1/units/links/link_tag_processor.php (revision 16070) @@ -0,0 +1,460 @@ +Application->GetVar($this->Prefix.'_id'); + if ($object->isLoaded() && $id && ($object->GetID() != $id)) { + $object->Load($id); + } + } + + return $object; + }*/ + + function getListingInfo($resource_id, $field = null) + { + $sql = 'SELECT * + FROM '.$this->Application->getUnitOption('ls', 'TableName').' + WHERE ItemResourceId = '.$resource_id; + $listing_info = $this->Conn->GetRow($sql); + return isset($field) ? $listing_info[$field] : $listing_info; + } + + /** + * Detects listing enhancement status (enhanced or not) + * + * @param Array $params + * @return int + */ + function LinkIsEnhanced($params) + { + $object = $this->getObject($params); + /* @var $object kDBItem */ + + if ($object->GetDBField('Status') == STATUS_PENDING || $object->GetDBField('Status') == STATUS_PENDING_EDITING) { + return false; + } + + $listing_type_id = $this->getListingInfo($object->GetDBField('ResourceId'), 'ListingTypeId'); + + $this->Application->SetVar('lst_id', $listing_type_id); // compatibility with old-theme + return $listing_type_id ? 1 : 0; + } + + /** + * Detects if enhancement is pending approval + * + * @param Array $params + * @return int + */ + function EnhancementIsPending($params) + { + $object = $this->getObject($params); + /* @var $object kDBItem */ + + $status = $this->getListingInfo($object->GetDBField('ResourceId'), 'Status'); + + return $status == STATUS_PENDING ? 1 : 0; + } + + function ListingTypeField($params) + { + $object = $this->getObject($params); + /* @var $object kDBItem */ + + $lst_id = $this->getListingInfo($object->GetDBField('ResourceId'), 'ListingTypeId'); + + $lst_object = $this->Application->recallObject('lst', null, Array('skip_autoload' => true)); + $lst_object->Load($lst_id); + + return $lst_object->GetField( $this->SelectParam($params, 'name,field') ); + } + + function EnhancementField($params) + { + $object = $this->getObject($params); + /* @var $object kDBItem */ + + $listing_id = $this->getListingInfo($object->GetDBField('ResourceId'), 'ListingId'); + + $listing_object = $this->Application->recallObject('ls', null, Array('skip_autoload' => true)); + $listing_object->Load($listing_id); + + return $listing_object->GetField( $this->SelectParam($params, 'name,field') ); + } + + function IsRenewalPeriod($params) + { + $object = $this->getObject($params); + /* @var $object kDBItem */ + + $listing_info = $this->getListingInfo($object->GetDBField('ResourceId')); + + $sql = 'SELECT RenewalReminder + FROM '.$this->Application->getUnitOption('lst', 'TableName').' + WHERE ListingTypeId = '.$listing_info['ListingTypeId']; + $renewal_interval = $this->Conn->GetOne($sql) * 3600 * 24; + + return ($listing_info['ExpiresOn'] - adodb_mktime() < $renewal_interval) ? 1 : 0; + } + + function FirstListingType($params) + { + static $first = true; + if ($first) { + $first = false; + return true; + } + else { + return false; + } + } + + function IsReocurringEnhancement($params) + { + $params['name'] = 'Recurring'; + return $this->ListingTypeField($params); + } + + function EnhanceUsingInCommerce($params) + { + if (!$this->Application->isModuleEnabled('In-Commerce')) { + return 0; + } + + $object = $this->getObject($params); + /* @var $object kDBItem */ + + $listtype_id = $this->getListingInfo($object->GetDBField('ResourceId'), 'ListingTypeId'); + + $lst_object = $this->Application->recallObject('lst', null, Array('skip_autoload' => true)); + $lst_object->Load($listtype_id); + + return $lst_object->GetDBField('EnableBuying'); + } + + function ClickLink($params) + { + $object = $this->getObject($params); + + return $this->Application->HREF($params['t'], '', Array('l_id' => $object->GetID(), 'pass'=>'all,l' )); + } + + function ListRelatedLinks($params) + { + return $this->PrintList2($params); + } + + function LinkLink($params) + { + return $this->ItemLink($params, 'link'); + } + + function ListingDescription($params) + { + $listing_type = $this->Application->recallObject('lst'); + /* @var $listing_type kDBItem */ + + return $listing_type->GetDBField('Description'); + } + + function ListingTypeDetailsLink($params) + { + $listing_type = $this->Application->recallObject('lst', null, Array ('raise_warnings' => 0)); + /* @var $listing_type kDBList */ + + $params['lst_id'] = $listing_type->isLoaded() ? $listing_type->GetID() : $this->Application->Parser->GetParam('key'); + + return $this->Application->ProcessParsedTag('m', 'Link', $params); + } + + /** + * Register hit & go to link url + * + * @param Array $params + */ + function FollowLocation($params) + { + $object = $this->getObject($params); + /* @var $object kCatDBItem */ + + if (!$object->isLoaded()) { + throw new Exception('No Link ID for redirect'); + } + + $object->RegisterHit(); + + // save user and time + if (!$this->Application->isAdmin && $this->Application->LoggedIn()) { + $resource_id = $object->GetDBField('ResourceId'); + $user_id = $this->Application->RecallVar('user_id'); + + $link_visit = $this->Application->recallObject('l-visit', null, Array ('skip_autoload' => true)); + /* @var $link_visit kDBItem */ + + $link_visit->Load( Array ('ResourceId' => $resource_id, 'PortalUserId' => $user_id) ); + if ($link_visit->isLoaded()) { + // for existing visits update date + $link_visit->SetDBField('VisitTimestamp_date', adodb_mktime()); + $link_visit->SetDBField('VisitTimestamp_time', adodb_mktime()); + } + else { + // for new visits set user & link, visit will be set as default value + $link_visit->SetDBField('ResourceId', $resource_id); + $link_visit->SetDBField('PortalUserId', $user_id); + } + + $status = $link_visit->isLoaded() ? $link_visit->Update() : $link_visit->Create(); + } + + $url_field = $this->Application->GetVar('url_field'); + $url = $object->GetDBField($url_field); + if (!preg_match('/^(http|ftp|mailto:)(.*)/U', $url)) { + $url = 'http://'.$url; + } + + $this->Application->Redirect('external:'.$url); + } + + /** + * Returns formatted address (from custom fields) for using with google + * + * @param Array $params + * @return string + */ + function GetGoogleAddress($params) + { + $object = $this->getObject($params); + + if (isset($params['display_info']) && $params['display_info']) { + $ret = $object->GetField('cust_LinkAddress') ? $object->GetField('cust_LinkAddress').'
' : ''; + $ret .= $object->GetField('cust_LinkCity') ? $object->GetField('cust_LinkCity').',' : ''; + $ret .= $object->GetField('cust_LinkState') ? $object->GetField('cust_LinkState') : ''; + $ret .= $object->GetField('cust_LinkZipCode') ? $object->GetField('cust_LinkZipCode').'
' : ''; + $ret .= $object->GetField('cust_LinkCountry') ? $object->GetField('cust_LinkCountry').'
' : ''; + $ret .= $object->GetField('cust_LinkPhone') ? ''.$this->Application->Phrase('lu_fld_LinkPhone').': '.$object->GetField('cust_LinkPhone') : ''; + + return $ret; + } + + $ret = $object->GetField('cust_LinkAddress') ? $object->GetField('cust_LinkAddress').',' : ''; + $ret .= $object->GetField('cust_LinkCity') ? $object->GetField('cust_LinkCity').',' : ''; + $ret .= $object->GetField('cust_LinkState') ? $object->GetField('cust_LinkState').',' : ''; + $ret .= $object->GetField('cust_LinkZipCode') ? $object->GetField('cust_LinkZipCode').',' : ''; + $ret .= $object->GetField('cust_LinkCountry') ? $object->GetField('cust_LinkCountry') : ''; + + return $ret; + } + + /** + * Returns timestamp of last link visit for logged in users only. + * + * @param Array $params + * @return string + */ + function LastVisited($params) + { + if (!$this->Application->LoggedIn()) { + // we don't gather link visit statistics for Guests + return ''; + } + + static $link_visited = Array (); + + $object = $this->getObject($params); + /* @var $object kDBList */ + + if (!isset($link_visited[$this->Special])) { + $resource_ids = $object->GetCol('ResourceId'); + $user_id = $this->Application->RecallVar('user_id'); + + $table_name = $this->Application->getUnitOption('l-visit', 'TableName'); + $sql = 'SELECT VisitTimestamp, ResourceId + FROM '.$table_name.' + WHERE (PortalUserId = '.$user_id.') AND (ResourceId IN ('.implode(',', $resource_ids).'))'; + $link_visited[$this->Special] = $this->Conn->GetCol($sql, 'ResourceId'); + } + + if (!isset($link_visited[$this->Special][$object->GetDBField('ResourceId')])) { + // link has no visit information for current user + return ''; + } + + $link_visit = $link_visited[$this->Special][$object->GetDBField('ResourceId')]; + + if (isset($params['formatted']) && $params['formatted']) { + // format the date + $lang = $this->Application->recallObject('lang.current'); + + if (isset($params['display_time']) && $params['display_time']) { + $display_format = $lang->GetDBField('DateFormat').' @ '.$lang->GetDBField('TimeFormat'); + } + else { + $display_format = $lang->GetDBField('DateFormat'); + } + + return adodb_date($display_format, $link_visit); + } + + return $link_visit; + } + + /** + * Checks if specified Custom Fields and condition are true + * + * @param Array $params + * @return string + */ + function HasValue($params) + { + $condition = isset($params['condition']) ? strtolower($params['condition']) : false; + $fields = isset($params['fields']) ? $params['fields'] : false; + if (!$fields || !in_array($condition, Array('or', 'and'))) { + // required parameters not passed + return false; + } + + $fields = explode(',', $fields); + + $object = $this->getObject($params); + /* @var $object kDBList */ + + switch ($condition) { + case 'or': + foreach ($fields as $field) { + if (strlen($object->GetDBField($field))) { + return true; + } + } + break; + + case 'and': + foreach ($fields as $field) { + if (!strlen($object->GetDBField($field))) { + return false; + } + } + break; + } + + return $condition == 'and' ? true : false; + } + + /** + * Gets and parses custom details template or default one + * + * @param Array $params + * @return string + */ + function DisplayDetailTemplate($params) + { + $object = $this->getObject($params); + /* @var $object kDBItem */ + + $template_name = $object->GetDBField('CustomTemplate'); + if (!$template_name || !$this->Application->TemplatesCache->TemplateExists($template_name)) { + $template_name = $params['default_template']; + } + + $block_params['name'] = $template_name; + + // parse template + return $this->Application->IncludeTemplate($block_params); + } + + /** + * Changes title preset of "Duplicate checker" section to show current grouping + * + * @param Array $params + */ + function ModifyUnitConfig($params) + { + $grid = array_key_exists('grid', $params) ? $params['grid'] : false; + if ($grid != 'Duplicates') { + // only for "Duplicate Checker" section + return ; + } + + $link_helper = $this->Application->recallObject('LinkHelper'); + /* @var $link_helper LinkHelper */ + + // 1. get current grouping + $grouping = $link_helper->getGrouping( $this->getPrefixSpecial() ); + + // 2. replace field names in grouping with their corresponding column titles + $grids = $this->Application->getUnitOption($this->Prefix, 'Grids'); + foreach ($grouping as $index => $group_field) { + $group_field = preg_replace('/^l[\d]+_/', '', $group_field); // remove ml prefix + $grouping[$index] = $this->Application->Phrase($grids[$grid]['Fields'][$group_field]['title']); + } + + // 3. patch resulting title preset + $concat_with = "' " . $this->Application->Phrase('la_and') . " '"; + $title_presets = $this->Application->getUnitOption($this->Prefix, 'TitlePresets'); + $title_presets['duplicate_links'] = str_replace('%s', "'" . implode($concat_with, $grouping) . "'", $title_presets['duplicate_links']); + + $this->Application->setUnitOption($this->Prefix, 'TitlePresets', $title_presets); + } + + /** + * Allows to modify block params & current list record before PrintList parses record + * + * @param kDBList $object + * @param Array $block_params + */ + function PrepareListElementParams(&$object, &$block_params) + { + $grid = array_key_exists('grid', $block_params) ? $block_params['grid'] : false; + if ($grid != 'Duplicates') { + // only for "Duplicate Checker" section + return ; + } + + static $grouping = null; + + if (!isset($grouping)) { + $link_helper = $this->Application->recallObject('LinkHelper'); + /* @var $link_helper LinkHelper */ + + // 1. get current grouping + $grouping = $link_helper->getGrouping( $this->getPrefixSpecial() ); + } + + $fields_hash =& $object->getCurrentRecord(); + + $key_fields = Array (); + foreach ($grouping as $group_field) { + $key_fields[$group_field] = $fields_hash[$group_field]; + } + + $fields_hash['LinkId'] = base64_encode( serialize($key_fields) ); + } +} Property changes on: releases/5.2.1/units/links/link_tag_processor.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.20.2.14 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/helpers/link_helper.php =================================================================== --- releases/5.2.1/units/helpers/link_helper.php (revision 0) +++ releases/5.2.1/units/helpers/link_helper.php (revision 16070) @@ -0,0 +1,77 @@ +Application->BaseURL()); + + if (preg_match('/(.*)<\\/a.*>/sUi', $html, $ret)) { + return true; + } + + return false; + } + + + /** + * Returns grouping fields for "Duplicate Checker" section + * + * @param string $prefix_special + * @return Array + */ + function getGrouping($prefix_special) + { + // cut "sub" postfix from special + $prefix_special = preg_replace('/(.*)-sub$/', '\\1', $prefix_special); + $grouping = $this->Application->RecallVar($prefix_special . '_dupe_fields'); + + if (!$grouping) { + $grouping = '|Url|'; + $this->Application->StoreVar($prefix_special . '_dupe_fields', $grouping); + } + + return explode('|', substr($grouping, 1, -1)); + } + + } \ No newline at end of file Property changes on: releases/5.2.1/units/helpers/link_helper.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/helpers/helpers_config.php =================================================================== --- releases/5.2.1/units/helpers/helpers_config.php (revision 0) +++ releases/5.2.1/units/helpers/helpers_config.php (revision 16070) @@ -0,0 +1,24 @@ + 'in-link-helpers', + 'EventHandlerClass' => Array ('class' => 'kEventHandler', 'file' => '', 'build_event' => 'OnBuild'), + + 'RegisterClasses' => Array ( + Array ('pseudo' => 'LinkHelper', 'class' => 'LinkHelper', 'file' => 'link_helper.php', 'build_event' => ''), + ), + ); \ No newline at end of file Property changes on: releases/5.2.1/units/helpers/helpers_config.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/link_validation/link_validation_tp.php =================================================================== --- releases/5.2.1/units/link_validation/link_validation_tp.php (revision 0) +++ releases/5.2.1/units/link_validation/link_validation_tp.php (revision 16070) @@ -0,0 +1,60 @@ +getObject($params); + + $url = $object->GetDBField($params['field']); + if (!preg_match('/^(http|ftp|mailto:)(.*)/U', $url)) { + $url = 'http://' . $url; + } + + return $url; + } + + /** + * Show CachedNavbar of current item primary category + * + * @param Array $params + * @return string + */ + function CategoryName($params) + { + // show category cachednavbar of + $object = $this->getObject($params); + $category_id = isset($params['cat_id']) ? $params['cat_id'] : $object->GetDBField('CategoryId'); + + $cache_key = 'category_paths[%CIDSerial:' . $category_id . '%][%PhrasesSerial%][Adm:' . (int)$this->Application->isAdmin . ']'; + $category_path = $this->Application->getCache($cache_key); + + if ($category_path === false) { + if ($category_id > 0) { + $cached_navbar = preg_replace('/^(Content&\|&|Content)/i', '', $object->GetDBField('CachedNavbar')); + $category_path = trim($this->CategoryName( Array('cat_id' => 0) ).' > '.str_replace('&|&', ' > ', $cached_navbar), ' > '); + } + else { + $category_path = $this->Application->Phrase(($this->Application->isAdmin ? 'la_' : 'lu_') . 'rootcategory_name'); + } + + $this->Application->setCache($cache_key, $category_path); + } + + return $category_path; + } + } \ No newline at end of file Property changes on: releases/5.2.1/units/link_validation/link_validation_tp.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.2 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/link_validation/link_validation_config.php =================================================================== --- releases/5.2.1/units/link_validation/link_validation_config.php (revision 0) +++ releases/5.2.1/units/link_validation/link_validation_config.php (revision 16070) @@ -0,0 +1,171 @@ + 'link-validation', + 'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'), + 'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'), + 'EventHandlerClass' => Array ('class' => 'LinkValidationEventHandler', 'file' => 'link_validation_eh.php', 'build_event' => 'OnBuild'), + 'TagProcessorClass' => Array ('class' => 'LinkValidationTagProcessor', 'file' => 'link_validation_tp.php', 'build_event' => 'OnBuild'), + + 'AutoLoad' => true, + + 'Hooks' => Array ( + Array ( + 'Mode' => hAFTER, + 'Conditional' => true, + 'HookToPrefix' => 'l', + 'HookToSpecial' => '*', + 'HookToEvent' => Array('OnAfterConfigRead'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnPrepareLinkEditing', + ), + ), + + 'QueryString' => Array ( + 1 => 'id', + 2 => 'Page', + 3 => 'PerPage', + 4 => 'event', + 5 => 'mode', + ), + + 'ScheduledTasks' => Array ( + 'link_validation' => Array ('EventName' => 'OnCronValidation', 'RunSchedule' => '0 0 * * *'), + ), + + 'IDField' => 'LinkValidationId', + + 'TableName' => TABLE_PREFIX.'LinkValidation', + + 'StatusField' => Array ('ValidationStatus', 'LinkStatus'), + + 'TitlePresets' => Array ( + 'link_validation_list' => Array ('prefixes' => Array ('link-validation_List'), 'format' => "!la_tab_LinkValidation!"), + 'link_validation_progress' => Array ('format' => '!la_tab_ValidatingLinks!'), + ), + + 'PermSection' => Array('main' => 'in-link:link_validation'), + + 'Sections' => Array ( + 'in-link:link_validation' => Array ( + 'parent' => 'in-link', + 'icon' => 'in-link:validate', + 'label' => 'la_tab_LinkValidation', + 'url' => Array('t' => 'in-link/link_validation/link_validation_list', 'pass' => 'm'), + 'permissions' => Array('view', 'advanced:continue', 'advanced:restart', 'advanced:validate', 'advanced:reset'), + 'priority' => 3, + 'type' => stTREE, + ), + ), + + 'ListSQLs' => Array ( + '' => ' SELECT %1$s.* %2$s + FROM ' . TABLE_PREFIX . 'Link l + LEFT JOIN %1$s ON %1$s.LinkId = l.LinkId + LEFT JOIN ' . TABLE_PREFIX . 'CategoryItems ci ON ci.ItemResourceId = l.ResourceId + LEFT JOIN '.TABLE_PREFIX.'Categories c ON c.CategoryId = ci.CategoryId', + ), + + 'ListSortings' => Array ( + '' => Array ( + 'Sorting' => Array ('LinkValidationId' => 'desc'), + ) + ), + + 'CalculatedFields' => Array ( + '' => Array ( + 'ForeignLinkId' => 'l.LinkId', + 'LinkName' => 'l.Name', + 'LinkUrl' => 'l.Url', + 'LinkCreatedOn' => 'l.CreatedOn', + 'LinkStatus' => 'l.Status', + 'LinkValidationStatus' => 'IF(%1$s.ValidationStatus IS NULL, ' . LINK_VALIDATION_NOT_VALIDATED . ', %1$s.ValidationStatus)', + + 'CategoryId' => 'ci.CategoryId', + ), + ), + + 'Fields' => Array ( + 'LinkValidationId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'LinkId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'ValidationTime' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL), + 'ValidationCode' => Array ( + 'type' => 'string', + 'formatter' => 'kOptionsFormatter', 'options' => Array (200 => '200 OK', 301 => '301 Moved Permanently', 302 => '302 Found', 400 => '400 Bad Request', 403 => '403 Forbidden', 404 => '404 Not Found', 500 => '500 Internal Server Error'), + 'max_len' => 50, 'default' => NULL + ), + 'ValidationStatus' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'lc_Text_Not_Validated', 1 => 'lc_Text_Valid', 2 => 'lc_Text_Invalid'), 'use_phrases' => 1, + 'not_null' => 1, 'default' => 0 + ), + ), + + 'VirtualFields' => Array ( + 'ForeignLinkId' => Array ('type' => 'int', 'default' => 0), + 'LinkName' => Array('type' => 'string', /*'formatter' => 'kMultiLanguage',*/ 'max_len' => 255, 'default' => ''), + 'LinkUrl' => Array ('type' => 'string', 'default' => ''), + 'LinkCreatedOn' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'), + 'LinkStatus' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1, 'default' => 2), + 'LinkValidationStatus' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'lc_Text_Not_Validated', 1 => 'lc_Text_Valid', 2 => 'lc_Text_Invalid'), 'use_phrases' => 1, + 'default' => 0 + ), + + // for category path drawing + 'CategoryId' => Array ('type' => 'int', 'default' => 0), + 'CachedNavbar' => Array ('type' => 'string', 'default' => ''), + ), + + 'Grids' => Array ( + 'Default' => Array ( + 'Icons' => Array ( + 'default' => 'icon16_link.png', + // for valid links + LINK_VALIDATION_VALID . '_' . STATUS_DISABLED => 'icon16_valid_disabled.gif', + LINK_VALIDATION_VALID . '_' . STATUS_ACTIVE => 'icon16_valid.gif', + LINK_VALIDATION_VALID . '_' . STATUS_PENDING => 'icon16_valid_pend.gif', + + // for invalid links + LINK_VALIDATION_INVALID . '_' . STATUS_DISABLED => 'icon16_invalid_disabled.gif', + LINK_VALIDATION_INVALID . '_' . STATUS_ACTIVE => 'icon16_invalid.gif', + LINK_VALIDATION_INVALID . '_' . STATUS_PENDING => 'icon16_invalid_pend.gif', + + // for not validated links + LINK_VALIDATION_NOT_VALIDATED . '_' . STATUS_DISABLED => 'icon16_not_validated_disabled.gif', + LINK_VALIDATION_NOT_VALIDATED . '_' . STATUS_ACTIVE => 'icon16_not_validated.gif', + LINK_VALIDATION_NOT_VALIDATED . '_' . STATUS_PENDING => 'icon16_not_validated_pend.gif', + + '_' . STATUS_DISABLED => 'icon16_not_validated_disabled.gif', + '_' . STATUS_ACTIVE => 'icon16_not_validated.gif', + '_' . STATUS_PENDING => 'icon16_not_validated_pend.gif', + ), + + 'Fields' => Array ( + 'ForeignLinkId' => Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'module' => 'In-Link', 'width' => 60, ), + 'LinkName' => Array ('data_block' => 'grid_link_name_td', 'filter_block' => 'grid_like_filter', 'first_chars' => 30, 'width' => 180, ), + 'LinkUrl' => Array ('title' => 'la_col_LinkUrl', 'data_block' => 'grid_url_td', 'filter_block' => 'grid_like_filter', 'width' => 200, ), + 'LinkValidationStatus' => Array ('title' => 'column:la_fld_Status', 'filter_block' => 'grid_options_filter', 'width' => 87, ), + 'ValidationCode' => Array ('title' => 'la_col_ValidationCode', 'filter_block' => 'grid_options_filter', 'width' => 155, ), + 'ValidationTime' => Array ('title' => 'la_col_ValidatedOn', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ), + 'LinkCreatedOn' => Array ('title' => 'column:la_fld_CreatedOn', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ), + ), + ), + ), + ); \ No newline at end of file Property changes on: releases/5.2.1/units/link_validation/link_validation_config.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.5 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/link_validation/link_validation_eh.php =================================================================== --- releases/5.2.1/units/link_validation/link_validation_eh.php (revision 0) +++ releases/5.2.1/units/link_validation/link_validation_eh.php (revision 16070) @@ -0,0 +1,571 @@ + Array ('self' => 'advanced:reset',), + 'OnRestartValidation' => Array ('self' => 'advanced:restart',), + 'OnContinueValidation' => Array ('self' => 'advanced:continue',), + 'OnValidateSelected' => Array ('self' => 'advanced:validate',), + 'OnValidateProgress' => Array ('self' => 'advanced:validate|advanced:continue|advanced:restart|advanced:reset',), + 'OnCancelValidation' => Array ('self' => 'advanced:validate|advanced:continue|advanced:restart|advanced:reset',), + 'OnCronValidation' => Array ('self' => 'advanced:validate|advanced:continue|advanced:restart|advanced:reset',), + ); + + $this->permMapping = array_merge($this->permMapping, $permissions); + } + + /** + * Define alternative event processing method names + * + * @return void + * @see kEventHandler::$eventMethods + * @access protected + */ + protected function mapEvents() + { + parent::mapEvents(); + + $events_map = Array ( + 'OnApproveLinks' => 'iterateItems', + 'OnDeclineLinks' => 'iterateItems', + ); + + $this->eventMethods = array_merge($this->eventMethods, $events_map); + } + + /** + * Checks user permission to execute given $event + * + * @param kEvent $event + * @return bool + * @access public + */ + public function CheckPermission(kEvent $event) + { + $check_events = Array ('OnApproveLinks', 'OnDeclineLinks', 'OnDeleteLinks'); + + if ( in_array($event->Name, $check_events) ) { + $ids = $this->_getSelectedIds($event); + + $perm_value = true; + if ( $ids ) { + $perm_helper = $this->Application->recallObject('PermissionsHelper'); + /* @var $perm_helper kPermissionsHelper */ + + $items = $perm_helper->GetCategoryItemData('l', $ids); + $check_method = $event->Name == 'OnDeleteLinks' ? 'DeleteCheckPermission' : 'ModifyCheckPermission'; + foreach ($items as $item_id => $item_data) { + if ( $perm_helper->$check_method($item_data['CreatedById'], $item_data['CategoryId'], 'l') == 0 ) { + // one of items selected has no permission + $perm_value = false; + break; + } + } + + if ( !$perm_value ) { + $event->status = kEvent::erPERM_FAIL; + } + } + + return $perm_value; + } + + return parent::CheckPermission($event); + } + + /** + * Adds calculates fields for category name + * + * @param kDBItem|kDBList $object + * @param kEvent $event + * @return void + * @access protected + */ + protected function prepareObject(&$object, kEvent $event) + { + parent::prepareObject($object, $event); + + $object->addCalculatedField('CachedNavbar', 'c.l' . $this->Application->GetVar('m_lang') . '_CachedNavbar'); + } + + /** + * Allows to show only invalid links + * + * @param kEvent $event + * @return void + * @access protected + * @see kDBEventHandler::OnListBuild() + */ + protected function SetCustomQuery(kEvent $event) + { + parent::SetCustomQuery($event); + + $object = $event->getObject(); + /* @var $object kDBList */ + + $object->addFilter('primary_category_filter', 'ci.PrimaryCat = 1'); + + if ( $event->Special == 'invalid' ) { + $object->addFilter('status_filter', '%1$s.ValidationStatus = ' . LINK_VALIDATION_INVALID); + } + } + + /** + * Restarts link validation process + * + * @param kEvent $event + */ + function OnRestartValidation($event) + { + $this->_resetValidation($event); + + $this->OnContinueValidation($event); + } + + /** + * Restarts link validation process + * + * @param kEvent $event + */ + function _resetValidation($event) + { + // 1. delete previous validation results + $sql = 'SELECT ' . $this->Application->getUnitOption($event->Prefix, 'IDField') . ' + FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName'); + $ids = $this->Conn->GetCol($sql); + + if ($ids) { + $temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); + /* @var $temp_handler kTempTablesHandler */ + + $temp_handler->DeleteItems($event->Prefix, $event->Special, $ids); + } + } + + /** + * Validates only selected links + * + * @param kEvent $event + */ + function OnValidateSelected($event) + { + $link_ids = $this->_getSelectedIds($event); + if (!$link_ids) { + return ; + } + + $validation_data = Array ( + 'processed' => 0, + 'total' => count($link_ids), + 'items' => $link_ids, + ); + $this->Application->StoreVar($event->Prefix . '_status', serialize($validation_data)); + + $event->redirect = $this->Application->GetVar('progress_template'); + } + + /** + * Validates only links, that were not previously validated + * + * @param kEvent $event + */ + function OnContinueValidation($event) + { + $have_data = $this->_prepareValidation($event); + if ($have_data) { + $event->redirect = $this->Application->GetVar('progress_template'); + } + } + + /** + * Performs validation + * + * @param kEvent $event + * @param bool $from_ajax + */ + function _validate($event, $from_ajax = true) + { + $validation_data = unserialize( $this->Application->RecallVar($event->Prefix . '_status') ); + + $i = 0; + $link_ids = $validation_data['items']; + $per_page = count($link_ids) >= LINK_VALIDATION_PER_PAGE ? LINK_VALIDATION_PER_PAGE : count($link_ids); + + while ($i < $per_page) { + $this->_validateLink($link_ids[$i]); + $i++; + } + + // remove processed links from array + array_splice($link_ids, 0, LINK_VALIDATION_PER_PAGE); + + // store validation progress + $validation_data['processed'] += $i; + $validation_data['items'] = $link_ids; + + if ($validation_data['processed'] >= $validation_data['total']) { + // finished + $this->Application->emailAdmin('LINK.VALIDATION.RESULTS'); + + $this->Application->RemoveVar($event->Prefix . '_status'); + return true; + } + + // show progress, proceed to next step + $this->Application->StoreVar($event->Prefix . '_status', serialize($validation_data)); + + if ($from_ajax) { + echo $validation_data['processed'] / $validation_data['total'] * 100; + $event->status = kEvent::erSTOP; + } + + return false; + } + + /** + * Performs validation of links (called from AjaxProgressBar) + * + * @param kEvent $event + */ + function OnValidateProgress($event) + { + $done = $this->_validate($event, true); + + if ($done) { + $this->Application->Redirect( $this->Application->GetVar('finish_template') ); + } + } + + /** + * Returns categories, that are located inside recycle bin category + * + * @return Array + */ + function _getRecycleBinCategories() + { + $recycle_bin = $this->Application->ConfigValue('RecycleBinFolder'); + if (!is_numeric($recycle_bin)) { + return Array (); + } + + $recycle_categories = $this->Application->RecallVar('recycle_categories'); + if ($recycle_categories === false) { + $tree_indexes = $this->Application->getTreeIndex($recycle_bin); + + $sql = 'SELECT ' . $this->Application->getUnitOption('c', 'IDField') . ' + FROM ' . $this->Application->getUnitOption('c', 'TableName') . ' + WHERE TreeLeft BETWEEN ' . $tree_indexes['TreeLeft'] . ' AND ' . $tree_indexes['TreeRight']; + $recycle_categories = serialize( $this->Conn->GetCol($sql) ); + + // store recycle bin categories in session to prevent query below happening on each link validation step + $this->Application->StoreVar('recycle_categories', $recycle_categories); + } + + return unserialize($recycle_categories); + + } + + /** + * Checks, that link is located in one of RecycleBin subcategories + * + * @param unknown_type $resource_id + * @return unknown + */ + function _inRecycleBin($resource_id) + { + static $recycle_bin = null; + + if (!isset($recycle_bin)) { + $recycle_bin = $this->_getRecycleBinCategories(); + } + + if (!$recycle_bin) { + // Recycle Bin not used in system -> link is 100% not there + return false; + } + + $sql = 'SELECT CategoryId + FROM ' . $this->Application->getUnitOption('l-ci', 'TableName') . ' + WHERE ItemResourceId = ' . $resource_id . ' AND PrimaryCat = 1'; + + return in_array( $this->Conn->GetOne($sql), $recycle_bin); + } + + function _validateLink($link_id) + { + $curl_helper = $this->Application->recallObject('CurlHelper'); + /* @var $curl_helper kCurlHelper */ + + $sql = 'SELECT Url, ResourceId + FROM ' . $this->Application->getUnitOption('l', 'TableName') . ' + WHERE ' . $this->Application->getUnitOption('l', 'IDField') . ' = ' . $link_id; + $link_data = $this->Conn->GetRow($sql); + + if (!preg_match('/^(http|https):\/\/(.*)/U', $link_data['Url']) || $this->_inRecycleBin($link_data['ResourceId'])) { + return ; + } + + $curl_helper->timeout = LINK_VALIDATION_TIMEOUT; + + $result = $curl_helper->Send($link_data['Url']); + if ($result === false || $curl_helper->lastErrorMsg != '') { + $curl_helper->lastHTTPCode = 500; + } + + $link_validation = $this->Application->recallObject($this->Prefix . '.-item', null, Array ('skip_autoload' => true)); + /* @var $link_validation kDBItem */ + + $link_validation->Load($link_id, 'LinkId'); + + $now = adodb_mktime(); + + $fields_hash = Array ( + 'LinkId' => $link_id, + 'ValidationTime_date' => $now, + 'ValidationTime_time' => $now, + 'ValidationCode' => $curl_helper->lastHTTPCode, + 'ValidationStatus' => $curl_helper->lastHTTPCode < 400 ? LINK_VALIDATION_VALID : LINK_VALIDATION_INVALID, + ); + $link_validation->SetDBFieldsFromHash($fields_hash); + + return $link_validation->isLoaded() ? $link_validation->Update() : $link_validation->Create(); + } + + /** + * Cancels validation (from validation progress bar) + * + * @param kEvent $event + */ + function OnCancelValidation($event) + { + $this->Application->RemoveVar($event->Prefix . '_status'); + } + + /** + * Resets validation status for selected + * + * @param kEvent $event + */ + function OnResetValidationStatus($event) + { + $ids = $this->_getSelectedIds($event, true); + if (!$ids) { + return ; + } + + $temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); + /* @var $temp_handler kTempTablesHandler */ + + $temp_handler->DeleteItems($event->Prefix, $event->Special, $ids); + } + + /** + * Returns ids, that user has checked in grid + * + * @param kEvent $event + * @param bool $transform convert link ids to link validation ids + * @return Array + */ + function _getSelectedIds($event, $transform = false) + { + $ids = Array(); + + $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); + if ($items_info) { + foreach ($items_info as $id => $field_values) { + if ( getArrayValue($field_values, 'ForeignLinkId') ) { + // we are not gathering ids by unit idfield here! + array_push($ids, $id); + } + } + } + + if ($transform && $ids) { + $sql = 'SELECT ' . $this->Application->getUnitOption($event->Prefix, 'IDField') . ' + FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ' + WHERE LinkId IN (' . implode(',', $ids) . ')'; + $ids = $this->Conn->GetCol($sql); + } + + return $ids; + } + + /** + * Approves/declines selected links + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function iterateItems(kEvent $event) + { + if ( $this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1) ) { + $event->status = kEvent::erFAIL; + return; + } + + $ids = $this->_getSelectedIds($event); + if ( !$ids ) { + return; + } + + $object = $this->Application->recallObject('l.-item', null, Array ('skip_autoload' => true)); + /* @var $object kCatDBItem */ + + foreach ($ids as $id) { + $ret = true; + $object->Load($id); + + switch ( $event->Name ) { + case 'OnApproveLinks': + $ret = $object->ApproveChanges(); + break; + + case 'OnDeclineLinks': + $ret = $object->DeclineChanges(); + break; + } + + if ( !$ret ) { + $event->status = kEvent::erFAIL; + $event->redirect = false; + break; + } + } + } + + /** + * Deletes selected links + * + * @param kEvent $event + */ + function OnDeleteLinks($event) + { + if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + $event->status = kEvent::erFAIL; + return; + } + + $ids = $this->_getSelectedIds($event); + if (!$ids) { + return ; + } + + $temp_handler = $this->Application->recallObject('l_TempHandler', 'kTempTablesHandler'); + /* @var $temp_handler kTempTablesHandler */ + + $temp_handler->DeleteItems('l', '', $ids); + } + + /** + * [HOOK] Allows to edit links, used in selected link validation records + * + * @param kEvent $event + */ + function OnPrepareLinkEditing($event) + { + // hook to OnAfterConfigRead instead of OnEdit, because fake ids should be available in CheckPermission + if ($this->Application->GetVar('l_event') != 'OnEdit') { + return ; + } + + $ids = $this->_getSelectedIds($event); + $id_field = $this->Application->getUnitOption('l', 'IDField'); + + $items_info = Array (); + foreach ($ids as $id) { + $items_info[$id][$id_field] = 'on'; + } + + $this->Application->SetVar('l', $items_info); + } + + /** + * Gets all links, that are not yet validated and prepare data + * + * @param kEvent $event + * + * @return bool + */ + function _prepareValidation($event) + { + // 2. get ids of all links and put them into validation queue + $id_field = $this->Application->getUnitOption('l', 'IDField'); + $sql = 'SELECT ' . $id_field . ' + FROM ' . $this->Application->getUnitOption('l', 'TableName') . ' + WHERE LinkId NOT IN (SELECT LinkId FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ')'; + $link_ids = $this->Conn->GetCol($sql); + + if ($link_ids) { + $validation_data = Array ( + 'processed' => 0, + 'total' => count($link_ids), + 'items' => $link_ids, + ); + $this->Application->StoreVar($event->Prefix . '_status', serialize($validation_data)); // 4K links will be 78KB serialized + return true; + } + + return false; + } + + /** + * [SCHEDULED TASK] Performs link validation through cron + * + * @param kEvent $event + */ + function OnCronValidation($event) + { + $this->_resetValidation($event); // remove this for continuing to non validated before links + + $have_data = $this->_prepareValidation($event); + if ($have_data) { + do { + $done = $this->_validate($event, false); + } while (!$done); + } + } + + /** + * Makes calculated fields to go to multilingual link fields + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnAfterConfigRead(kEvent $event) + { + parent::OnAfterConfigRead($event); + + $calculated_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields'); + $calculated_fields['']['LinkName'] = 'l.l' . $this->Application->GetVar('m_lang') . '_Name'; + $this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calculated_fields); + } + + } \ No newline at end of file Property changes on: releases/5.2.1/units/link_validation/link_validation_eh.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/l-visits/l-visits_config.php =================================================================== --- releases/5.2.1/units/l-visits/l-visits_config.php (revision 0) +++ releases/5.2.1/units/l-visits/l-visits_config.php (revision 16070) @@ -0,0 +1,86 @@ + 'l-visit', + 'ItemClass' => Array('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'), + 'EventHandlerClass' => Array('class' => 'LinkVisitEventHandler', 'file' => 'l-visit_eh.php', 'build_event' => 'OnBuild'), + + 'AutoLoad' => true, + + 'Hooks' => Array ( + Array ( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => 'u', + 'HookToSpecial' => '-item', // from OnMassDelete event + 'HookToEvent' => Array('OnAfterItemDelete'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnDeleteVisits', + ), + + Array ( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => 'l', + 'HookToSpecial' => '-item', // from "Catalog" + 'HookToEvent' => Array('OnAfterItemDelete'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnDeleteVisits', + ), + + Array ( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => 'l', + 'HookToSpecial' => 'showall-item', // from "Advanced View" + 'HookToEvent' => Array('OnAfterItemDelete'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnDeleteVisits', + ), + ), + + 'QueryString' => Array ( + 1 => 'id', + 2 => 'Page', + 3 => 'PerPage', + 4 => 'event', + ), + + 'IDField' => 'VisitId', + 'TableName' => TABLE_PREFIX.'LinkVisits', + + 'AutoDelete' => true, + + 'ListSQLs' => Array ('' => 'SELECT * FROM %s'), + 'ItemSQLs' => Array ('' => 'SELECT * FROM %s'), + + 'ListSortings' => Array ( + '' => Array( + 'Sorting' => Array('VisitTimestamp' => 'desc'), + ) + ), + + 'Fields' => Array ( + 'VisitId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'ResourceId' => Array ('type' => 'int', 'default' => NULL), + 'PortalUserId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'VisitTimestamp' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'), + ), + ); \ No newline at end of file Property changes on: releases/5.2.1/units/l-visits/l-visits_config.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/l-visits/l-visit_eh.php =================================================================== --- releases/5.2.1/units/l-visits/l-visit_eh.php (revision 0) +++ releases/5.2.1/units/l-visits/l-visit_eh.php (revision 16070) @@ -0,0 +1,35 @@ +MasterEvent->Prefix == 'u' ? 'PortalUserId' : 'ResourceId'; + $table_name = $this->Application->getUnitOption($this->Prefix, 'TableName'); + + $object = $event->MasterEvent->getObject(); + + $sql = 'DELETE FROM '.$table_name.' + WHERE '.$key_field.' = '.$object->GetDBField($key_field); + $this->Conn->Query($sql); + } +} \ No newline at end of file Property changes on: releases/5.2.1/units/l-visits/l-visit_eh.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/.htaccess =================================================================== --- releases/5.2.1/units/.htaccess (revision 0) +++ releases/5.2.1/units/.htaccess (revision 16070) @@ -0,0 +1 @@ +Deny from all \ No newline at end of file Property changes on: releases/5.2.1/units/.htaccess ___________________________________________________________________ Added: svn:eol-style + LF Index: releases/5.2.1/units/listings/listings_event_handler.php =================================================================== --- releases/5.2.1/units/listings/listings_event_handler.php (revision 0) +++ releases/5.2.1/units/listings/listings_event_handler.php (revision 16070) @@ -0,0 +1,846 @@ + Array ('self' => true), + 'OnCancelEnhancement' => Array ('self' => true), + 'OnExtendEnhancement' => Array ('self' => true), + ); + + $this->permMapping = array_merge($this->permMapping, $permissions); + } + + /** + * Adds selected link to listing + * + * @param kEvent $event + */ + function OnProcessSelected($event) + { + $object = $event->getObject(); + + $selected_ids = $this->Application->GetVar('selected_ids'); + if ($selected_ids['l']) { + $link_id = $selected_ids['l']; + $sql = 'SELECT ResourceId + FROM '.$this->Application->getUnitOption('l', 'TableName').' + WHERE '.$this->Application->getUnitOption('l', 'IDField').' = '.$link_id; + + $object->SetDBField($this->Application->RecallVar('dst_field'), $this->Conn->GetOne($sql)); + $object->IgnoreValidation = true; + // $this->RemoveRequiredFields($object); + $object->Update(); + } + + $this->finalizePopup($event); + } + + function OnPreSaveListing($event) + { + $event->redirect=false; + $object = $event->getObject( Array('skip_autoload' => true) ); + $object->IgnoreValidation = true; + // $this->RemoveRequiredFields($object); + $event->CallSubEvent('OnPreSave'); + $this->Application->SetVar($event->getPrefixSpecial(true).'_id', $object->GetId()); + return; + } + + /** + * Occurs before updating item + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeItemUpdate(kEvent $event) + { + $object = $event->getObject(); + /* @var $object kDBItem */ + + if ( $object->IgnoreValidation ) { + $object->UpdateFormattersMasterFields(); + } + } + + /** + * Occurs before creating item + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeItemCreate(kEvent $event) + { + parent::OnBeforeItemCreate($event); + + $object = $event->getObject(); + /* @var $object kDBItem */ + + if ( $object->IgnoreValidation ) { + $object->UpdateFormattersMasterFields(); + } + } + + /** + * Occurs before an item is deleted from live table when copying from temp + * (temp handler deleted all items from live and then copy over all items from temp) + * Id of item being deleted is passed as event' 'id' param + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeDeleteFromLive(kEvent $event) + { + parent::OnBeforeDeleteFromLive($event); + + $object = $event->getObject(); + /* @var $object kDBItem */ + + $sql = 'SELECT * + FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ' + WHERE ListingId = ' . $object->GetId(); + $original_values = $this->Conn->GetRow($sql); + + $type_modified = ($object->GetDBField('ListingTypeId') != $original_values['ListingTypeId']); + $link_modified = ($object->GetDBField('ItemResourceId') != $original_values['ItemResourceId']); + $status_modified = ($object->GetDBField('Status') != $original_values['Status']); + + if ( $status_modified ) { + $email_event = $object->GetDBField('Status') ? 'LINK.ENHANCE.APPROVE' : 'LINK.ENHANCE.DENY'; + $sql = 'SELECT CreatedById + FROM ' . $this->Application->getUnitOption('l', 'TableName') . ' + WHERE ResourceId = ' . $object->GetDBField('ItemResourceId'); + $user_id = $this->Conn->GetOne($sql); + + $this->Application->emailUser($email_event, $user_id); + $this->Application->emailAdmin($email_event); + } + + if ( $type_modified || $link_modified ) { + $this->ResetLink($original_values); + } + + if ( $status_modified || $type_modified || $link_modified ) { + $this->EnhanceLink($object, $original_values); + } + + if ( $status_modified && !($type_modified || $link_modified) ) { + $this->ResetLink($original_values); + } + } + + function EnhanceLink(&$object, $original_values) + { + if ($object->GetDBField('Status') != STATUS_ACTIVE) { + return false; + } + + if ($object->GetDBField('ExpiresOn') < adodb_mktime()) { + $object->SetDBField('Status', STATUS_PENDING); + $object->Update(); + $this->ResetLink($original_values); + return false; + } + + $this->UpdateLink('OnPurchase', $object->GetDBField('ItemResourceId'), $object->GetDBField('ListingTypeId')); + + $listtype_object = $this->Application->recallObject('lst'); + if ( $listtype_object->GetDBField('OnPurchaseAddToCatEnabled') ) + { + $link_object = $this->Application->recallObject('l'); + $add_to_cat = (int)$listtype_object->GetDBField('OnPurchaseAddToCat'); + $sql = 'DELETE FROM '.$this->Application->getUnitOption('l-ci', 'TableName').' + WHERE CategoryId = '.$add_to_cat.' + AND ItemResourceId = '.$link_object->GetDBField('ResourceId').' + AND PrimaryCat = 0'; + $this->Conn->Query($sql); + $sql = 'INSERT INTO '.$this->Application->getUnitOption('l-ci', 'TableName').' + (CategoryId, ItemResourceId, PrimaryCat) + VALUES ('.$add_to_cat.', '.$link_object->GetDBField('ResourceId').', 0)'; + $this->Conn->Query($sql); + } + } + + function ResetLink($original_values) + { + static $has_been_reset = Array(); + + if( $original_values['Status'] != STATUS_ACTIVE || + getArrayValue($has_been_reset, $original_values['ListingId']) ) + { + return; + } + + $has_been_reset[$original_values['ListingId']] = 1; + + $this->UpdateLink('OnExpire', $original_values['ItemResourceId'], $original_values['ListingTypeId']); + + $listtype_object = $this->Application->recallObject('lst'); + if( $listtype_object->GetDBField('OnExpireRemoveFromCatEnabled') ) + { + $remove_from_cat = $listtype_object->GetDBField('OnExpireRemoveFromCat'); + $sql = 'DELETE FROM '.$this->Application->getUnitOption('l-ci', 'TableName').' + WHERE ItemResourceId = '.$original_values['ItemResourceId'].' + AND CategoryId = '.$remove_from_cat.' + AND PrimaryCat = 0'; + $this->Conn->Query($sql); + } + } + + function UpdateLink($action_prefix, $resource_id, $listtype_id) + { + + $link_object = $this->Application->recallObject('l', null, Array('skip_autoload' => true)); + $link_object->Load($resource_id, 'ResourceId'); + + // "-item", because can be called as regular after event, and just "lst" recalls list instead + $listtype_object = $this->Application->recallObject('lst.-item', null, Array('skip_autoload' => true)); + $listtype_object->Load($listtype_id); + + $action_fields = Array( 'EdPick' => 'EditorsPick', + 'New' => 'NewItem', + 'Hot' => 'HotItem', + 'Pop' => 'PopItem', + 'Status' => 'Status', + 'CustomTemplate' => 'CustomTemplate', + ); + // $action_prefix = 'OnPurchase'; + + foreach($action_fields as $action => $field) + { + $action_value = $listtype_object->GetDBField($action_prefix.$action); + if( $action_value != 3 ) + { + $link_object->SetDBField($field, $action_value); + } + } + + $priority_value = $listtype_object->GetDBField($action_prefix.'PriorityValue'); + switch( $listtype_object->GetDBField($action_prefix.'PriorityAction') ) + { + case 1: // equal + $link_object->SetDBField('Priority', $priority_value); + break; + case 2: // increase + $original_priority = $link_object->GetDBField('Priority'); + $link_object->SetDBField('Priority', $original_priority + $priority_value); + break; + case 3: // decrease + $original_priority = $link_object->GetDBField('Priority'); + $link_object->SetDBField('Priority', $original_priority - $priority_value); + break; + default: + } + + $link_object->Update(); + } + + /** + * Enter description here... + * + * @param kEvent $event + */ + function OnRequestEnhancement($event) + { + if ($this->Application->isModuleEnabled('In-Commerce')) { + $l_info = $this->Application->GetVar('l'); + if (!$l_info) { + return false; + } + + list ($link_id, $link_info) = each($l_info); + $listing_type_id = $link_info['ListingTypeId']; + + $listing_type = $this->Application->recallObject('lst', null, Array('skip_autoload' => true)); + $listing_type->Load($listing_type_id); + + if ($listing_type->GetDBField('EnableBuying')) { + $add_to_cart_event = new kEvent('ord:OnAddVirtualProductToCart'); + $this->Application->HandleEvent($add_to_cart_event); + + if ($add_to_cart_event->redirect) { + $event->SetRedirectParam('pass', 'm'); + $event->redirect = $add_to_cart_event->redirect; + } + return true; + } + } + + $event->CallSubEvent('OnListingCreate'); + } + + /** + * Create listing or extend existing listing period + * + * @param kEvent $event + */ + function OnListingCreate($event) + { + $new_processing = false; + $link_id = $listing_type_id = 0; + + $object = $event->getObject( Array('skip_autoload' => true) ); + /* @var $object kDBItem */ + + switch ($event->Name) { + case 'EnhanceLinkAfterOrderApprove': + case 'EnhancedLinkOnCompleteOrder': + // when order with listing virtual product is approved + $fields = $event->getEventParam('field_values'); + $item_data = unserialize($fields['ItemData']); + $listing_type_id = $item_data['ListingTypeId']; + $link_id = $item_data['LinkId']; + + $new_processing = getArrayValue($item_data, 'HasNewProcessing'); + break; + + case 'OnListingCreate': + // when requesting enhancement from front (and not via in-commerce) + $links_info = $this->Application->GetVar('l'); + if (!$links_info) return false; + + $event->redirect = false; + list($link_id, $link_info) = each($links_info); + $listing_type_id = $link_info['ListingTypeId']; + + $new_processing = false; + break; + } + + if (!$listing_type_id) { + // free or invalid listing type selected + return false; + } + + // get resource_id of link beeing enhanced + $sql = 'SELECT ResourceId + FROM '.$this->Application->getUnitOption('l', 'TableName').' + WHERE LinkId = '.$link_id; + $resource_id = $this->Conn->GetOne($sql); + + // get listing by link's resource_id + $object->Load($resource_id, 'ItemResourceId'); + if ($object->isLoaded()) { + $original_values = $object->GetFieldValues(); + } + else { + // set initial fields to listing + $object->SetDBField('ListingTypeId', $listing_type_id); + $object->SetDBField('ItemResourceId', $resource_id); + + if ($event->Name == 'OnListingCreate' || $new_processing) { + $item_status = STATUS_PENDING; + } + else { + $item_status = STATUS_ACTIVE; + } + + $object->SetDBField('Status', $item_status); + } + + // set date of purchase for new listings + $purchased_on = max(adodb_mktime(), $object->GetDBField('ExpiresOn')); + if (!$object->isLoaded()) { + $object->SetDBField('PurchasedOn_date', $purchased_on); + $object->SetDBField('PurchasedOn_time', $purchased_on); + } + + // set expiration time for listing + $listing_type = $this->Application->recallObject('lst', null, Array('skip_autoload' => true)); + $listing_type->Load($listing_type_id); + + $dur_type_mapping = Array( 1 => 1, + 2 => 60, + 3 => 3600, + 4 => 3600*24, + 5 => 3600*24*7, + 6 => 3600*24*365/12, + 7 => 3600*24*365 + ); + $duration = $listing_type->GetDBField('Duration'); + $duration_type = $listing_type->GetDBField('DurationType'); + $expiration_interval = $duration * $dur_type_mapping[$duration_type]; + $expiration_date = $purchased_on + $expiration_interval; + $object->SetDBField('ExpiresOn_date', $expiration_date); + $object->SetDBField('ExpiresOn_time', $expiration_date); + + // when extending enhancement mark listing as non-received renewal reminder + $object->SetDBField('RenewalReminderSent', 0); + + $action = $object->isLoaded() ? 'Update' : 'Create'; + if ($object->$action()) { + $event->status = kEvent::erSUCCESS; + switch ($event->Name) { + case 'EnhanceLinkAfterOrderApprove': + case 'EnhancedLinkOnCompleteOrder': + // when order with listing virtual product is approved + if (getArrayValue($original_values, 'Status') != STATUS_ACTIVE) { + $this->EnhanceLink($object, Array()); + } + break; + + case 'OnListingCreate': + // when requesting enhancement from front (and not via in-commerce) + $event->redirect = $this->Application->GetVar('success_template'); + + $sql = 'SELECT CreatedById FROM '.$this->Application->getUnitOption('l', 'TableName').' + WHERE ResourceId = '.$object->GetDBField('ItemResourceId'); + $this->Application->emailUser('LINK.ENHANCE', $this->Conn->GetOne($sql)); + $this->Application->emailAdmin('LINK.ENHANCE'); + break; + } + + + } + else { + $event->status = kEvent::erFAIL; + } + + + } + + /** + * Enter description here... + * + * @param kEvent $event + */ + function EnhancedLinkOnCompleteOrder($event) + { + // create enhancement, but pending + $this->OnListingCreate($event); + + // save created listing_id back to itemdata + $object = $event->getObject( Array('skip_autoload' => true) ); + $fields = $event->getEventParam('field_values'); + $item_data = unserialize($fields['ItemData']); + unset($item_data['ListingTypeId']); + $item_data['ListingId'] = $object->GetID(); + + $orditems_idfield = $this->Application->getUnitOption('orditems', 'IDField'); + $orditems_table = $this->Application->getUnitOption('orditems', 'TableName'); + + $this->Conn->doUpdate( Array('ItemData' => serialize($item_data)), $orditems_table, $orditems_idfield.' = '.$fields['OrderItemId'] ); + } + + /** + * Enter description here... + * + * @param kEvent $event + */ + function EnhanceLinkAfterOrderApprove($event) + { + $object = $event->getObject( Array('skip_autoload' => true) ); + /* @var $object kDBItem */ + + $fields = $event->getEventParam('field_values'); + $item_data = unserialize($fields['ItemData']); + + if ( getArrayValue($item_data, 'HasNewProcessing') ) { + // new processing: just approve created listing here + $listing_id = $item_data['ListingId']; + $object->Load($listing_id); + + // moved enhancement period to time admin approved enhancement + $time_diff = adodb_mktime() - $object->GetDBField('PurchasedOn'); + $object->SetDBField('PurchasedOn_date', $object->GetDBField('PurchasedOn_date') + $time_diff); + $object->SetDBField('PurchasedOn_time', $object->GetDBField('PurchasedOn_time') + $time_diff); + $object->SetDBField('ExpiresOn_date', $object->GetDBField('ExpiresOn_date') + $time_diff); + $object->SetDBField('ExpiresOn_time', $object->GetDBField('ExpiresOn_time') + $time_diff); + + $object->SetDBField('Status', STATUS_ACTIVE); + $object->Update(); + + $this->EnhanceLink($object, Array()); + return true; + } + else { + // create listing & approve it at the same time + $this->OnListingCreate($event); + } + } + + /** + * Delete listing + * + * @param kEvent $event + */ + function EnhanceLinkAfterOrderDeny($event) + { + $object = $event->getObject( Array('skip_autoload' => true) ); + $fields = $event->getEventParam('field_values'); + $item_data = unserialize($fields['ItemData']); + $listing_id = $item_data['ListingId']; + + $temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); + $temp_handler->DeleteItems($event->Prefix, $event->Special, Array($listing_id)); + } + + /** + * Enter description here... + * + * @param kEvent $event + */ + function ExpireLink($event) + { + $object = $event->getObject(Array ('skip_autoload' => true)); + /* @var $object kDBItem */ + + $fields = $event->getEventParam('field_values'); + $item_data = unserialize($fields['ItemData']); + + $sql = 'SELECT ListingId FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ' + WHERE ItemResourceId = ' . $item_data['LinkId']; + $listing_id = $this->Conn->GetOne($sql); + + $object->Load($listing_id); + $original_values = $object->GetFieldValues(); + $object->SetDBField('Status', 2); + + if ( $object->Update() ) { + $event->status = kEvent::erSUCCESS; + $this->ResetLink($original_values); + } + else { + $event->status = kEvent::erFAIL; + } + } + + /** + * Apply same processing to each item being selected in grid + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function iterateItems(kEvent $event) + { + $object = $event->getObject(Array ('skip_autoload' => true)); + /* @var $object kDBItem */ + + $ids = $this->StoreSelectedIDs($event); + + if ( $event->Name == 'OnMassApprove' ) { + foreach ($ids as $id) { + $object->Load($id); + if ( $object->GetDBField('Status') != STATUS_ACTIVE ) { + $original_values = $object->GetFieldValues(); + $object->SetDBField('Status', STATUS_ACTIVE); + $this->EnhanceLink($object, $original_values); + } + } + } + + if ( $event->Name == 'OnMassDecline' ) { + foreach ($ids as $id) { + $object->Load($id); + if ( $object->GetDBField('Status') == STATUS_ACTIVE ) { + $original_values = $object->GetFieldValues(); + $this->ResetLink($original_values); + + $sql = 'SELECT CreatedById + FROM ' . $this->Application->getUnitOption('l', 'TableName') . ' + WHERE ResourceId = ' . $object->GetDBField('ItemResourceId'); + $this->Application->emailUser('LINK.ENHANCE.DENY', $this->Conn->GetOne($sql)); + $this->Application->emailAdmin('LINK.ENHANCE.DENY'); + } + } + } + + parent::iterateItems($event); + + // extend period for pending/renewal links (if owner has agreed) + if ( $event->Name == 'OnMassApprove' ) { + $lst_object = $this->Application->recallObject('lst', null, Array ('skip_autoload' => true)); + /* @var $lst_object kDBItem */ + + foreach ($ids as $id) { + $object->Load($id); + + $sql = 'SELECT CreatedById + FROM ' . $this->Application->getUnitOption('l', 'TableName') . ' + WHERE ResourceId = ' . $object->GetDBField('ItemResourceId'); + $owner_id = $this->Conn->GetOne($sql); + + if ( $object->GetDBField('PendingRenewal') == 1 ) { + $lst_object->Load( $object->GetDBField('ListingTypeId') ); + $dur_type_mapping = Array ( + 1 => 1, 2 => 60, 3 => 3600, 4 => 3600 * 24, 5 => 3600 * 24 * 7, + 6 => 3600 * 24 * 365 / 12, 7 => 3600 * 24 * 365 + ); + $duration = $lst_object->GetDBField('Duration'); + $duration_type = $lst_object->GetDBField('DurationType'); + $expiration_interval = $duration * $dur_type_mapping[$duration_type]; + $renewal_begins = max(adodb_mktime(), $object->GetDBField('ExpiresOn')); + $expiration_date = $renewal_begins + $expiration_interval; + + $object->SetDBField('ExpiresOn_date', $expiration_date); + $object->SetDBField('ExpiresOn_time', $expiration_date); + + $object->SetDBField('RenewalReminderSent', 0); + $object->SetDBField('PendingRenewal', 0); + + if ( $object->Update() ) { + $event->status = kEvent::erSUCCESS; + $event->SetRedirectParam('opener', 's'); + $this->Application->emailUser('LINK.ENHANCE.RENEW', $owner_id); + $this->Application->emailAdmin('LINK.ENHANCE.RENEW'); + } + else { + $event->status = kEvent::erFAIL; + $event->redirect = false; + break; + } + } + else { + $this->Application->emailUser('LINK.ENHANCE.APPROVE', $owner_id); + $this->Application->emailAdmin('LINK.ENHANCE.APPROVE'); + } + } + } + } + + /** + * Redirects to cancel template on front-end + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnCancel(kEvent $event) + { + parent::OnCancel($event); + + if ( !$this->Application->isAdmin ) { + $event->SetRedirectParam('opener', 's'); + $event->redirect = $this->Application->GetVar('cancel_template'); + } + } + + /** + * Checks that user is owner of link & returns listing id if permissions are ok + * + * @param kEvent $event + * @return mixed + */ + function verifyListingOwner($event) + { + $link_id = $this->Application->GetVar('l_id'); + $user_id = $this->Application->RecallVar('user_id'); + $sql = 'SELECT ResourceId + FROM '.$this->Application->getUnitOption('l', 'TableName').' + WHERE (LinkId = '.$link_id.') AND (CreatedById = '.$user_id.')'; + $resource_id = $this->Conn->GetOne($sql); + + if (!$resource_id) { + $event->status = kEvent::erFAIL; + return false; + } + + $sql = 'SELECT ListingId + FROM '.$this->Application->getUnitOption($event->Prefix, 'TableName').' + WHERE ItemResourceId = '.$resource_id; + + return $this->Conn->GetOne($sql); + } + + function OnExtendEnhancement($event) + { + $listing_id = $this->verifyListingOwner($event); + if (!$listing_id) { + return ; + } + + $object = $event->getObject( Array('skip_autoload' => true) ); + $object->Load($listing_id); + + $object->SetDBField('PendingRenewal', 1); + $object->Update(); + $event->redirect = $this->Application->GetVar('success_template'); + + $sql = 'SELECT CreatedById FROM '.$this->Application->getUnitOption('l', 'TableName').' + WHERE ResourceId = '.$object->GetDBField('ItemResourceId'); + $this->Application->emailUser('LINK.ENHANCE.EXTEND', $this->Conn->GetOne($sql)); + $this->Application->emailAdmin('LINK.ENHANCE.EXTEND'); + } + + /** + * Cancels enhancement + * + * @param kEvent $event + */ + function OnCancelEnhancement($event) + { + $listing_id = $this->verifyListingOwner($event); + if ( !$listing_id ) { + return; + } + + $object = $event->getObject(Array ('skip_autoload' => true)); + /* @var $object kDBItem */ + + $object->Load($listing_id); + + $original_values = $object->GetFieldValues(); + $original_values['Status'] = 1; + $this->ResetLink($original_values); + + $sql = 'SELECT CreatedById FROM ' . $this->Application->getUnitOption('l', 'TableName') . ' + WHERE ResourceId = ' . $object->GetDBField('ItemResourceId'); + $this->Application->emailUser('LINK.ENHANCE.CANCEL', $this->Conn->GetOne($sql)); + $this->Application->emailAdmin('LINK.ENHANCE.CANCEL'); + + $object->Delete(); + $event->redirect = $this->Application->GetVar('success_template'); + } + + /** + * Checks expired paid listings + * + * @param kEvent $event + */ + function OnCheckExpiredPaidListings($event) + { + $sql = 'SELECT ListingId FROM '.$this->Application->getUnitOption($event->Prefix, 'TableName').' + WHERE ExpiresOn < '.adodb_mktime().' AND Status = 1'; + $expired_listings = $this->Conn->GetCol($sql); + if(is_array($expired_listings) && count($expired_listings) > 0) + { + $object = $this->Application->recallObject($event->Prefix.'.-item', null, Array('skip_autoload' => true)); + /* @var $object kDBItem */ + + foreach($expired_listings as $listing_id) + { + $object->Load($listing_id); + $original_values = $object->GetFieldValues(); + $this->ResetLink($original_values); + $object->SetDBField('Status', 2); + $object->Update(); + + $sql = 'SELECT CreatedById FROM '.$this->Application->getUnitOption('l', 'TableName').' + WHERE ResourceId = '.$object->GetDBField('ItemResourceId'); + $this->Application->emailUser('LINK.ENHANCE.EXPIRE', $this->Conn->GetOne($sql)); + $this->Application->emailAdmin('LINK.ENHANCE.EXPIRE'); + } + } + + $sql = 'SELECT ls.ListingId, l.CreatedById FROM '.$this->Application->getUnitOption($event->Prefix, 'TableName').' ls + LEFT JOIN '.$this->Application->getUnitOption('lst', 'TableName').' lst + ON ls.ListingTypeId = lst.ListingTypeId + LEFT JOIN '.$this->Application->getUnitOption('l', 'TableName').' l + ON ls.ItemResourceId = l.ResourceId + WHERE ls.Status = 1 + AND ls.ExpiresOn < '.adodb_mktime().' + lst.RenewalReminder * 3600 *24 + AND ls.RenewalReminderSent = 0'; + $res = $this->Conn->Query($sql); + if(is_array($res) && count($res) > 0) + { + $listing_ids = Array(); + foreach($res as $record) + { + $this->Application->emailUser('LINK.ENHANCE.RENEWAL.NOTICE', $record['CreatedById']); + $this->Application->emailAdmin('LINK.ENHANCE.RENEWAL.NOTICE'); + $listing_ids[] = $record['ListingId']; + } + $sql = 'UPDATE '.$this->Application->getUnitOption($event->Prefix, 'TableName').' + SET RenewalReminderSent = 1 + WHERE ListingId IN ('.implode(',', $listing_ids).')'; + $this->Conn->Query($sql); + } + } + + /** + * Removes enhancements on listing delete + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnMassDelete(kEvent $event) + { + $object = $event->getObject(Array ('skip_autoload' => true)); + /* @var $object kDBItem */ + + $ids = $this->StoreSelectedIDs($event); + + foreach ($ids as $id) { + $object->Load($id); + + if ( $object->GetDBField('Status') == STATUS_ACTIVE ) { + $this->ResetLink( $object->GetFieldValues() ); + } + } + + parent::OnMassDelete($event); + } + + /** + * Moves enhancement from original link to it's pending copy, that is going to be approved + * + * @param kEvent $event + */ + function OnMoveEnhancement($event) + { + $id_field = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'IDField'); + $item_table_name = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'TableName'); + + $pending_id = $event->MasterEvent->getEventParam('id'); + $original_id = $event->MasterEvent->getEventParam('original_id'); + + $sql = 'SELECT ResourceId, '.$id_field.' + FROM '.$item_table_name.' + WHERE '.$id_field.' IN ('.$pending_id.','.$original_id.')'; + $resource_ids = $this->Conn->GetCol($sql, $id_field); + + $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); + $sql = 'UPDATE '.$table_name.' + SET ItemResourceId = '.$resource_ids[$pending_id].' + WHERE ItemResourceId = '.$resource_ids[$original_id]; + $this->Conn->Query($sql); + } + + /** + * Makes calculated fields to go to multilingual link fields + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnAfterConfigRead(kEvent $event) + { + parent::OnAfterConfigRead($event); + + $language_id = $this->Application->GetVar('m_lang'); + $calculated_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields'); + $calculated_fields['']['LinkName'] = 'CONCAT(item_table.l' . $language_id . '_Name, " (", item_table.Url, ")")'; + $this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calculated_fields); + } +} \ No newline at end of file Property changes on: releases/5.2.1/units/listings/listings_event_handler.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.37.2.2 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/listings/listings_config.php =================================================================== --- releases/5.2.1/units/listings/listings_config.php (revision 0) +++ releases/5.2.1/units/listings/listings_config.php (revision 16070) @@ -0,0 +1,175 @@ + 'ls', + 'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'), + 'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'), + 'EventHandlerClass' => Array ('class' => 'ListingsEventHandler', 'file' => 'listings_event_handler.php', 'build_event' => 'OnBuild'), + 'TagProcessorClass' => Array ('class' => 'ListingsTagProcessor', 'file' => 'listings_tag_processor.php', 'build_event' => 'OnBuild'), + 'AutoLoad' => true, + + 'Hooks' => Array ( + Array ( + 'Mode' => hAFTER, + 'Conditional' => false, + 'HookToPrefix' => 'l', + 'HookToSpecial' => '*', + 'HookToEvent' => Array ('OnBeforeDeleteOriginal'), + 'DoPrefix' => '', + 'DoSpecial' => '*', + 'DoEvent' => 'OnMoveEnhancement', + ), + ), + + 'QueryString' => Array ( + 1 => 'id', + 2 => 'Page', + 3 => 'PerPage', + 4 => 'event', + 5 => 'mode', + ), + + 'ScheduledTasks' => Array ( + 'listings_expiration' => Array ('EventName' => 'OnCheckExpiredPaidListings', 'RunSchedule' => '*/30 * * * *'), + ), + + 'IDField' => 'ListingId', + 'StatusField' => Array ('Status', 'PendingRenewal'), + 'TitleField' => 'LinkName', + + 'TitlePresets' => Array ( + 'default' => Array ( 'new_status_labels' => Array ('ls' => '!la_title_AddingListing!'), + 'edit_status_labels' => Array ('ls' => '!la_title_EditingListing!'), + 'new_titlefield' => Array ('ls' => '!la_title_NewListing!'), + ), + + 'listing_list' => Array ('prefixes' => Array ('ls_List'), 'format' => "!la_title_PaidListings!",), + 'listing_edit' => Array ('prefixes' => Array ('ls'), 'format' => "#ls_status# '#ls_titlefield#' - !la_title_General!",), + ), + + 'PermSection' => Array ('main' => 'in-link:paid_listings'), + + 'Sections' => Array ( + 'in-link:paid_listings_folder' => Array ( + 'parent' => 'in-link', + 'icon' => 'paid_listings', + 'label' => 'la_tab_PaidListings', + 'use_parent_header' => 1, + 'permissions' => Array (), + 'priority' => 1, + 'type' => stTREE, + ), + + 'in-link:paid_listings' => Array ( + 'parent' => 'in-link:paid_listings_folder', + 'icon' => 'paid_listings', + 'label' => 'la_tab_Listings', + 'url' => Array ('t' => 'in-link/paid_listings/paid_listings_list', 'pass' => 'm'), + 'permissions' => Array ('view', 'add', 'edit', 'delete', 'advanced:approve', 'advanced:decline'), + 'priority' => 1.1, // ., because this section replaces parent in tree + 'type' => stTAB, + ), + ), + + 'TableName' => TABLE_PREFIX.'Listings', + + 'ListSQLs' => Array ( '' => ' SELECT %1$s.* %2$s + FROM %1$s + LEFT JOIN '.TABLE_PREFIX.'Link item_table ON item_table.ResourceId = %1$s.ItemResourceId + LEFT JOIN '.TABLE_PREFIX.'Users u ON u.PortalUserId = item_table.CreatedById'), + + 'ItemSQLs' => Array ( '' => ' SELECT %1$s.* %2$s + FROM %1$s + LEFT JOIN '.TABLE_PREFIX.'Link item_table ON item_table.ResourceId = %1$s.ItemResourceId + LEFT JOIN '.TABLE_PREFIX.'Users u ON u.PortalUserId = item_table.CreatedById'), + + 'ListSortings' => Array ( + '' => Array ( + 'Sorting' => Array ('PurchasedOn' => 'desc'), + ) + ), + + 'CalculatedFields' => Array ( + '' => Array ( + 'LinkName' => 'CONCAT(item_table.Name, " (", item_table.Url, ")")', + 'LinkOwner' => 'IF (ISNULL(u.Username), IF (item_table.CreatedById = ' . USER_ROOT . ', "root", IF (item_table.CreatedById = ' . USER_GUEST . ', "Guest", "n/a")), IF(u.Username = "", u.Email, u.Username))', + ), + ), + 'Fields' => Array ( + 'ListingId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,), + 'ListingTypeId' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options_sql' => 'SELECT %s + FROM '.TABLE_PREFIX.'ListingTypes + ORDER BY Name', + 'option_key_field' => 'ListingTypeId', 'option_title_field' => 'Name', + 'default' => 0, + ), + 'ItemResourceId' => Array ( + 'type' => 'int', + 'required' => 1, 'unique' => Array ('ItemResourceId'), 'default' => null, + 'error_field' => 'LinkName', + ), + 'PurchasedOn' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'), + 'ExpiresOn' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#', 'required' =>1), + 'Status' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1, + 'not_null' => 1, 'default' => 2, + ), + 'PendingRenewal' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options' => Array (0 => 'la_NotPendingRenewal', 1 => 'la_PendingRenewal'), 'use_phrases' => 1, + 'not_null' => 1, 'default' => 0, + ), + 'RenewalReminderSent' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + ), + + 'VirtualFields' => Array ( + 'LinkName' => Array ('type' => 'string', 'default' => ''), + 'LinkOwner' => Array ('type' => 'string', 'default' => ''), + ), + + 'Grids' => Array ( + 'Default' => Array ( + 'Icons' => Array ( + 'default' => 'icon16_item.png', + '1_0' => 'icon16_link.png', + '0_0' => 'icon16_link_disabled.png', + '2_0' => 'icon16_link_pending.png', + '1_1' => 'icon16_link_pending.png', + '0_1' => 'icon16_link_disabled.png', + '2_1' => 'icon16_link_pending.png'), + 'module' => 'core', + + 'Fields' => Array ( + 'ListingId' => Array ( 'title' => 'column:la_fld_Id' , 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ), + 'LinkName' => Array ('data_block' => 'link_td', 'filter_block' => 'grid_like_filter', 'width' => 170, ), + 'ListingTypeId' => Array ( 'title' => 'column:la_fld_ListingTypeName' , 'data_block' => 'listing_type_td', 'filter_block' => 'grid_like_filter', 'width' => 100, ), + 'LinkOwner' => Array ('filter_block' => 'grid_like_filter', 'width' => 115, ), + 'PendingRenewal' => Array ('filter_block' => 'grid_options_filter', 'width' => 143, ), + 'PurchasedOn' => Array ('filter_block' => 'grid_date_range_filter', 'width' => 140, ), + 'ExpiresOn' => Array ('filter_block' => 'grid_date_range_filter', 'width' => 140, ), + 'Status' => Array ('filter_block' => 'grid_options_filter'), + ), + ), + ), + + ); \ No newline at end of file Property changes on: releases/5.2.1/units/listings/listings_config.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.18.2.3 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/listings/listings_tag_processor.php =================================================================== --- releases/5.2.1/units/listings/listings_tag_processor.php (revision 0) +++ releases/5.2.1/units/listings/listings_tag_processor.php (revision 16070) @@ -0,0 +1,90 @@ +getObject($params); + /* @var $object kDBItem */ + + return $this->Application->HREF($params['edit_template'],'', Array( + 'm_opener' => 'd', + 'lst_mode' => 't', + 'lst_event' => 'OnEdit', + 'lst_id' => $object->GetDBField('ListingTypeId'), + 'pass' => 'all,lst' + ), 'index.php'); + } + + function LinkEditLink($params) + { + $object = $this->getObject($params); + /* @var $object kDBItem */ + + $sql = 'SELECT '.$this->Application->getUnitOption('l', 'IDField').' + FROM '.$this->Application->getUnitOption('l', 'TableName').' + WHERE ResourceId = '.$object->GetDBField('ItemResourceId'); + + return $this->Application->HREF($params['edit_template'],'', Array( + 'm_opener' => 'd', + 'l_mode' => 't', + 'l_event' => 'OnEdit', + 'l_id' => $this->Conn->GetOne($sql), + 'pass' => 'all,l' + )); + } + + protected function ExpirationDate($params) + { + return $this->_expirationField($params, 'DateFormat'); + } + + protected function ExpirationTime($params) + { + return $this->_expirationField($params, 'TimeFormat'); + } + + protected function _expirationField($params, $format_field) + { + $object = $this->getObject($params); + /* @var $object kDBItem */ + + $listing_type = $this->Application->recallObject( 'lst', 'lst', $params ); + /* @var $listing_type kDBItem */ + + $dur_type_mapping = Array ( + 1 => 1, 2 => 60, 3 => 3600, 4 => 3600 * 24, + 5 => 3600 * 24 * 7, 6 => 3600 * 24 * 365 / 12, 7 => 3600 * 24 * 365 + ); + + $duration = $listing_type->GetDBField('Duration'); + $duration_type = $listing_type->GetDBField('DurationType'); + $expiration_interval = $duration * $dur_type_mapping[$duration_type]; + $expiration_date = adodb_mktime() + $expiration_interval; + + $lang = $this->Application->recallObject('lang.current'); + /* @var $lang LanguagesItem */ + + return adodb_date($lang->GetDBField($format_field), $expiration_date); + } +} \ No newline at end of file Property changes on: releases/5.2.1/units/listings/listings_tag_processor.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.8 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/listing_types/listing_types_event_handler.php =================================================================== --- releases/5.2.1/units/listing_types/listing_types_event_handler.php (revision 0) +++ releases/5.2.1/units/listing_types/listing_types_event_handler.php (revision 16070) @@ -0,0 +1,97 @@ + Array ('self' => true), + ); + + $this->permMapping = array_merge($this->permMapping, $permissions); + } + + /** + * Set's selected category to listing type + * + * @param kEvent $event + */ + function OnProcessSelected($event) + { + $object = $event->getObject(); + $selected_ids = $this->Application->GetVar('selected_ids'); + + $object->SetDBField($this->Application->RecallVar('dst_field'), $selected_ids['c']); + $this->RemoveRequiredFields($object); + $object->Update(); + + $this->finalizePopup($event); + } + + + function OnPreSaveListingType($event) + { + $event->redirect = false; + $object = $event->getObject( Array('skip_autoload' => true) ); + $this->RemoveRequiredFields($object); + $event->CallSubEvent('OnPreSave'); + $this->Application->SetVar($event->getPrefixSpecial(true).'_id', $object->GetID()); + } + + /** + * Prepare temp tables and populate it + * with items selected in the grid + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnEdit(kEvent $event) + { + if ( $this->Application->prefixRegistred('p') ) { + $this->Application->recallObject('p', null, Array ('skip_autoload' => true)); + } + + parent::OnEdit($event); + } + + /** + * Makes shopping cart name required, when buying is enabled + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeItemUpdate(kEvent $event) + { + parent::OnBeforeItemUpdate($event); + + $object = $event->getObject(); + /* @var $object kDBItem */ + + $object->setRequired('ShopCartName', $object->GetDBField('EnableBuying')); + } + } \ No newline at end of file Property changes on: releases/5.2.1/units/listing_types/listing_types_event_handler.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.10 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/listing_types/listing_types_config.php =================================================================== --- releases/5.2.1/units/listing_types/listing_types_config.php (revision 0) +++ releases/5.2.1/units/listing_types/listing_types_config.php (revision 16070) @@ -0,0 +1,162 @@ + 'lst', + 'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'), + 'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'), + 'EventHandlerClass' => Array ('class' => 'ListingTypesEventHandler', 'file' => 'listing_types_event_handler.php', 'build_event' => 'OnBuild'), + 'TagProcessorClass' => Array ('class' => 'ListingTypesTagProcessor', 'file' => 'listing_types_tag_processor.php', 'build_event' => 'OnBuild'), + 'AutoLoad' => true, + 'AggregateTags' => Array ( + Array ( + 'AggregateTo' => 'l', + 'AggregatedTagName' => 'ListListingTypes', + 'LocalTagName' => 'PrintList', + ), + Array ( + 'AggregateTo' => 'l', + 'AggregatedTagName' => 'ListingTypeField', + 'LocalTagName' => 'Field', + ), + ), + 'Hooks' => Array (), + 'QueryString' => Array ( + 1 => 'id', + 2 => 'Page', + 3 => 'PerPage', + 4 => 'event', + 5 => 'mode', + ), + 'IDField' => 'ListingTypeId', + 'TitleField' => 'Name', + 'TitlePresets' => Array ( + 'default' => Array ( 'new_status_labels' => Array ('lst' => '!la_title_AddingPaidListingType!'), + 'edit_status_labels' => Array ('lst' => '!la_title_EditingPaidListingType!'), + 'new_titlefield' => Array ('lst' => '!la_title_NewPaidListingType!'), + ), + 'listing_type_list' =>Array ( 'prefixes' => Array ('lst_List'), + 'format' => "!la_title_PaidListingTypes!", + ), + 'listing_type_edit' =>Array ( 'prefixes' => Array ('lst'), + 'new_titlefield' => Array ('lst' => '!la_title_NewPaidListingType!'), + 'format' => "#lst_status# '#lst_titlefield#' - !la_title_General!", + ), + 'listing_type_shop_cart' =>Array ( 'prefixes' => Array ('lst'), + 'new_titlefield' => Array ('lst' => '!la_title_NewPaidListingType!'), + 'format' => "#lst_status# '#lst_titlefield#' - !la_title_ShopCartEntry!", + ), + + + ), + + 'EditTabPresets' => Array ( + 'Default' => Array ( + 'general' => Array ('title' => 'la_tab_General', 't' => 'in-link/paid_listings/paid_listing_type_edit', 'priority' => 1), + ), + ), + + 'PermSection' => Array ('main' => 'in-link:listing_types'), + + 'Sections' => Array ( + 'in-link:listing_types' => Array ( + 'parent' => 'in-link:paid_listings_folder', + 'icon' => 'paid_listings', + 'label' => 'la_tab_ListingTypes', + 'url' => Array ('t' => 'in-link/paid_listings/paid_listing_types_list', 'pass' => 'm'), + 'permissions' => Array ('view', 'add', 'edit', 'delete'), + 'priority' => 1.2, // ., because this section replaces parent in tree + 'type' => stTAB, + ), + ), + + 'TableName' => TABLE_PREFIX.'ListingTypes', + + 'ListSQLs' => Array ( '' => 'SELECT * FROM %s',), // key - special, value - list select sql + + 'ItemSQLs' => Array ( '' => 'SELECT * FROM %s',), + + 'ListSortings' => Array ( + '' => Array ( + 'Sorting' => Array ('ListingTypeId' => 'asc'), + ) + ), + + 'Fields' => Array ( + 'ListingTypeId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,), + 'Name' => Array ('type' => 'string', 'not_null' => 1, 'default' => '', 'required' => '1'), + 'Description' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => NULL), + 'Duration' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'DurationType' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (1 => 'la_opt_sec', 2 => 'la_opt_min', 3 => 'la_opt_hour', 4 => 'la_opt_day', 5 => 'la_opt_week', 6 => 'la_opt_month', 7 => 'la_opt_year')), + 'OnPurchaseEdPick' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_On', 0 => 'la_Off'), 'default' => 3), + + 'OnPurchaseStatus' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_Enabled', 0 => 'la_Disabled', 2 => 'la_Pending'), 'default' => 3), + + 'OnPurchaseNew' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_On', 0 => 'la_Off', 2 => 'la_Auto'), 'default' => 3), + 'OnPurchasePop' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_On', 0 => 'la_Off', 2 => 'la_Auto'), 'default' => 3), + 'OnPurchaseHot' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_On', 0 => 'la_Off', 2 => 'la_Auto'), 'default' => 3), + 'OnPurchasePriorityAction' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (0 => 'la_DontChange', 1 => 'la_SetEqualTo', 2 => 'la_IncreaseBy', 3 => 'la_DecreaseBy'), 'default' => 0), + 'OnPurchasePriorityValue' => Array ('type' => 'int', 'not_null' => 1, 'default' => 1), + 'OnPurchaseAddToCatEnabled' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'OnPurchaseAddToCat' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'OnPurchaseCustomTemplate' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''), + + 'OnExpireEdPick' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_On', 0 => 'la_Off'), 'not_null' => 1, 'default' => 3), + 'OnExpireNew' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_On', 0 => 'la_Off', 2 => 'la_Auto'), 'default' => 3), + 'OnExpirePop' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_On', 0 => 'la_Off', 2 => 'la_Auto'), 'default' => 3), + 'OnExpireHot' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_On', 0 => 'la_Off', 2 => 'la_Auto'), 'default' => 3), + 'OnExpirePriorityAction' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (0 => 'la_DontChange', 1 => 'la_SetEqualTo', 2 => 'la_IncreaseBy', 3 => 'la_DecreaseBy'), 'default' => 0), + 'OnExpirePriorityValue' => Array ('type' => 'int', 'not_null' => 1, 'default' => 1), + 'OnExpireRemoveFromCatEnabled' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'OnExpireRemoveFromCat' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'OnExpireCustomTemplate' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''), + + 'OnExpireStatus' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (3 => 'la_Unchanged', 1 => 'la_Enabled', 0 => 'la_Disabled', 2 => 'la_Pending'), 'default' => 3), + 'RenewalReminder' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + 'EnableBuying' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options' => Array (0 => 'la_No', 1 => 'la_Yes',), 'use_phrases' => 1, + 'default' => 0, 'not_null' => 1, + ), + 'ShopCartName' => Array ('type' => 'string', 'default' => null), + 'Price' => Array ('type' => 'double', 'default' => ''), + 'Recurring' => Array ( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', + 'options' => Array (0 => 'la_No', 1 => 'la_Yes',), 'use_phrases' => 1, + 'default' => 0, 'not_null' => 1, + ), + 'VirtualProductId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), + ), + + 'Grids' => Array ( + 'Default' => Array ( + 'Icons' => Array ( + 'default' => 'icon16_item.png', + 0 => 'icon16_disbaled.png', + 1 => 'icon16_item.png', + 'module' => 'core', + ), + 'Fields' => Array ( + 'ListingTypeId' => Array ( 'title' => 'column:la_fld_Id' , 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60), + 'Name' => Array ('filter_block' => 'grid_like_filter', 'width' => 250), + 'Duration' => Array ('data_block' => 'duration_td', 'filter_block' => 'grid_like_filter', 'width' => 100), + ), + + ), + ), + ); \ No newline at end of file Property changes on: releases/5.2.1/units/listing_types/listing_types_config.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.13.2.4 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/units/listing_types/listing_types_tag_processor.php =================================================================== --- releases/5.2.1/units/listing_types/listing_types_tag_processor.php (revision 0) +++ releases/5.2.1/units/listing_types/listing_types_tag_processor.php (revision 16070) @@ -0,0 +1,49 @@ +getObject($params); + $params['cat_id'] = $object->GetDBField($params['field']); + + $navigation_bar = $this->Application->recallObject('kNavigationBar'); + /* @var $navigation_bar kNavigationBar */ + + return $navigation_bar->build($params); + } + + /** + * Makes 1st listing type default + * + * @param Array $params + * @return bool + */ + function IsDefault($params) + { + static $listing_type_id = null; + + $object = $this->getObject($params); + /* @var $object kDBItem */ + + if (!isset($listing_type_id)) { + $listing_type_id = $object->GetID(); + } + + return $listing_type_id == $object->GetID(); + } + } \ No newline at end of file Property changes on: releases/5.2.1/units/listing_types/listing_types_tag_processor.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.4 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/export.tpl =================================================================== --- releases/5.2.1/admin_templates/export.tpl (revision 0) +++ releases/5.2.1/admin_templates/export.tpl (revision 16070) @@ -0,0 +1,122 @@ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ " onclick="move_options_up('', 1)" class="button"> + " onclick="move_options_down('', 1)" class="button">
+
+

:
+ + " value="" /> + + ', '')" class="button">
+
+ ', ''); select_sort('');" class="button"> +
+ +
+
+ + + + + + + + + + + + + +
+ checked name="" id="_1" value="1" /> + + +
+ error"> *: + " id="" value="" size="2" maxlength="1" />
+ (will look like "Category:Sub-category:Sub-sub-category") + +
+ checked name="" id="_2" value="2" /> + +
+ (the fields will be titled Category1..CategoryN accordingly) +
+
+
+ + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/export.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.7.2.4 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/export_finish.tpl =================================================================== --- releases/5.2.1/admin_templates/export_finish.tpl (revision 0) +++ releases/5.2.1/admin_templates/export_finish.tpl (revision 16070) @@ -0,0 +1,43 @@ + + + + + + + + + + +
+ +
+ +
+ + + + + + + + + + + +
+ +   + "> +
+
+ + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/export_finish.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.4.2.4 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/links_files.tpl =================================================================== --- releases/5.2.1/admin_templates/links/links_files.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/links_files.tpl (revision 16070) @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + +
+ +
+ + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/links_files.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.6 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/file_edit.tpl =================================================================== --- releases/5.2.1/admin_templates/links/file_edit.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/file_edit.tpl (revision 16070) @@ -0,0 +1,68 @@ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + +
+
+ + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/file_edit.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.6 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/links_reviews.tpl =================================================================== --- releases/5.2.1/admin_templates/links/links_reviews.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/links_reviews.tpl (revision 16070) @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/links_reviews.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.6.2.3 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/inlink_redirect.tpl =================================================================== --- releases/5.2.1/admin_templates/links/inlink_redirect.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/inlink_redirect.tpl (revision 16070) @@ -0,0 +1 @@ + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/inlink_redirect.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.2 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/links_categories.tpl =================================================================== --- releases/5.2.1/admin_templates/links/links_categories.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/links_categories.tpl (revision 16070) @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/links_categories.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.4.2.5 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/links_edit.tpl =================================================================== --- releases/5.2.1/admin_templates/links/links_edit.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/links_edit.tpl (revision 16070) @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/links_edit.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.13.2.12 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/links_images.tpl =================================================================== --- releases/5.2.1/admin_templates/links/links_images.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/links_images.tpl (revision 16070) @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + +
+ +
+ + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/links_images.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.7.2.4 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/relations_edit.tpl =================================================================== --- releases/5.2.1/admin_templates/links/relations_edit.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/relations_edit.tpl (revision 16070) @@ -0,0 +1,76 @@ + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + + + + + + + +
+
+ + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/relations_edit.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.5.2.4 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/review_edit.tpl =================================================================== --- releases/5.2.1/admin_templates/links/review_edit.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/review_edit.tpl (revision 16070) @@ -0,0 +1,78 @@ + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/review_edit.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.5.2.5 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/images_edit.tpl =================================================================== --- releases/5.2.1/admin_templates/links/images_edit.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/images_edit.tpl (revision 16070) @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + +
+
+ + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/images_edit.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.6.2.5 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/links_custom.tpl =================================================================== --- releases/5.2.1/admin_templates/links/links_custom.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/links_custom.tpl (revision 16070) @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + +
+
+ + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/links_custom.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.6.2.6 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/links/links_relations.tpl =================================================================== --- releases/5.2.1/admin_templates/links/links_relations.tpl (revision 0) +++ releases/5.2.1/admin_templates/links/links_relations.tpl (revision 16070) @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + +
+ +
+ + + +"> +"> + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/links/links_relations.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.5.2.3 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/user_item_tab.tpl =================================================================== --- releases/5.2.1/admin_templates/user_item_tab.tpl (revision 0) +++ releases/5.2.1/admin_templates/user_item_tab.tpl (revision 16070) @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + $Catalog.setItemCount('', ''); + $Catalog.setCurrentCategory('', ); + $Catalog.saveSearch('', '', ''); + + + + Grids[''].SetDependantToolbarButtons( new Array('edit','delete')); + $Catalog.setViewMenu(''); + #separator# + + + + + + + + + Property changes on: releases/5.2.1/admin_templates/user_item_tab.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.7 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/export_progress.tpl =================================================================== --- releases/5.2.1/admin_templates/export_progress.tpl (revision 0) +++ releases/5.2.1/admin_templates/export_progress.tpl (revision 16070) @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/export_progress.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.7.2.2 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/category_properties.tpl =================================================================== --- releases/5.2.1/admin_templates/category_properties.tpl (revision 0) +++ releases/5.2.1/admin_templates/category_properties.tpl (revision 16070) @@ -0,0 +1,2 @@ + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/category_properties.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.3.2.1 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/link_validation/link_validation_list.tpl =================================================================== --- releases/5.2.1/admin_templates/link_validation/link_validation_list.tpl (revision 0) +++ releases/5.2.1/admin_templates/link_validation/link_validation_list.tpl (revision 16070) @@ -0,0 +1,134 @@ + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + : "> + +
+ + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/link_validation/link_validation_list.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.6 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/link_validation/link_validation_progress.tpl =================================================================== --- releases/5.2.1/admin_templates/link_validation/link_validation_progress.tpl (revision 0) +++ releases/5.2.1/admin_templates/link_validation/link_validation_progress.tpl (revision 16070) @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/link_validation/link_validation_progress.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.2 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/import.tpl =================================================================== --- releases/5.2.1/admin_templates/import.tpl (revision 0) +++ releases/5.2.1/admin_templates/import.tpl (revision 16070) @@ -0,0 +1,221 @@ + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ " id="_1" checked value="1" /> + + + + " id="" onclick="check_radio('_1');"> +
+ " id="_2" checked value="2" /> + + + + +
+
+ + + + + + + + + + + +
+ " id="btn_move_up" onclick="move_options_up('', 1)" class="button"> + " id="btn_move_down" onclick="move_options_down('', 1)" class="button">
+
+

:
+ + " value="" /> + + ', '')" class="button">
+
+ ', ''); select_sort('');" class="button"> +
+ +
+
+ + + + + + + + + + + + + + +
+ checked name="" id="_1" value="1" /> + + +
+ checked name="" id="_2" value="2" /> + + + + + +
+
+ + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/import.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.11.2.7 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/paid_listings/paid_listing_types_tabs.tpl =================================================================== --- releases/5.2.1/admin_templates/paid_listings/paid_listing_types_tabs.tpl (revision 0) +++ releases/5.2.1/admin_templates/paid_listings/paid_listing_types_tabs.tpl (revision 16070) @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/paid_listings/paid_listing_types_tabs.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.6.2.1 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/paid_listings/paid_listings_list.tpl =================================================================== --- releases/5.2.1/admin_templates/paid_listings/paid_listings_list.tpl (revision 0) +++ releases/5.2.1/admin_templates/paid_listings/paid_listings_list.tpl (revision 16070) @@ -0,0 +1,75 @@ + + + + + + + + + + + + +
+ +
+ + +   + + + + "> + + + + "> + + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/paid_listings/paid_listings_list.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.11.2.2 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/paid_listings/paid_listing_types_list.tpl =================================================================== --- releases/5.2.1/admin_templates/paid_listings/paid_listing_types_list.tpl (revision 0) +++ releases/5.2.1/admin_templates/paid_listings/paid_listing_types_list.tpl (revision 16070) @@ -0,0 +1,54 @@ + + + + + + + + + + + + +
+ +
+ + +   + + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/paid_listings/paid_listing_types_list.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.10.2.3 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/paid_listings/paid_listing_edit.tpl =================================================================== --- releases/5.2.1/admin_templates/paid_listings/paid_listing_edit.tpl (revision 0) +++ releases/5.2.1/admin_templates/paid_listings/paid_listing_edit.tpl (revision 16070) @@ -0,0 +1,111 @@ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + + + + + + + + + +
+ + +
+
+ + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/paid_listings/paid_listing_edit.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.15.2.4 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/paid_listings/paid_listing_type_edit.tpl =================================================================== --- releases/5.2.1/admin_templates/paid_listings/paid_listing_type_edit.tpl (revision 0) +++ releases/5.2.1/admin_templates/paid_listings/paid_listing_type_edit.tpl (revision 16070) @@ -0,0 +1,299 @@ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + " value="" /> + + + + ', null, 'OnPreSaveListingType'); return false;"> + + + + + + + + + + + + + + + + + +
+ " id="" value="" tabindex="" size="5"> + + + " id="" value="" tabindex="" size="5"> + +
   + + + + + +
+ + + +
+
  + + + + + +
+ + + +
+
  + + + + + +
+ + + +
+
  + + + + + +
+ + + +
+
  + + + + + +
+ + + +
+
  + + + + + +
+ + + +
+
  + + + + + +
+ + " id="" value="" tabindex="" size="5"> + + + " id="" value="" tabindex="" size="5"> +
+
  + + + + + +
+ " id="" value="" tabindex="" size="40"> + + " id="" value="" tabindex="" size="40"> +
+
  + + + + + +
+ " name="" value=""> + " type="checkbox" id="_cb_" name="_cb_" onclick="update_checkbox(this, document.getElementById(''))"> + + + + + + + " name="" value=""> + " type="checkbox" id="_cb_" name="_cb_" onclick="update_checkbox(this, document.getElementById(''))"> + + + + + +
+
+
+ + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/paid_listings/paid_listing_type_edit.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.22.2.4 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/duplicate_checker.tpl =================================================================== --- releases/5.2.1/admin_templates/duplicate_checker.tpl (revision 0) +++ releases/5.2.1/admin_templates/duplicate_checker.tpl (revision 16070) @@ -0,0 +1,73 @@ + + + + + + + + + + + + + +
+ +
+ + + + + Property changes on: releases/5.2.1/admin_templates/duplicate_checker.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.15.2.6 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/img/toolbar/toolbar-sprite.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/toolbar/toolbar-sprite.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/toolbar/toolbar-sprite.css =================================================================== --- releases/5.2.1/admin_templates/img/toolbar/toolbar-sprite.css (revision 0) +++ releases/5.2.1/admin_templates/img/toolbar/toolbar-sprite.css (revision 16070) @@ -0,0 +1,28 @@ +.in-link-toolbar-sprite { + background: url("@templates_base@/../../modules/in-link/admin_templates/img/toolbar/toolbar-sprite.png") repeat-x scroll 0 0 transparent; + border: 0 none; + cursor: pointer; + padding: 0; +} +#in-link-tb-merge_links { background-position: -0px -0px; } +#in-link-tb-merge_links.hover { background-position: -32px -0px; } +#in-link-tb-merge_links.disabled { background-position: -64px -0px; } +#in-link-tb-new_link { background-position: -0px -32px; } +#in-link-tb-new_link.hover { background-position: -32px -32px; } +#in-link-tb-new_link.disabled { background-position: -64px -32px; } +#in-link-tb-new_listing { background-position: -0px -64px; } +#in-link-tb-new_listing.hover { background-position: -32px -64px; } +#in-link-tb-new_listing_type { background-position: -0px -96px; } +#in-link-tb-new_listing_type.hover { background-position: -32px -96px; } +#in-link-tb-validate_continue { background-position: -0px -128px; } +#in-link-tb-validate_continue.hover { background-position: -32px -128px; } +#in-link-tb-validate_continue.disabled { background-position: -64px -128px; } +#in-link-tb-validate { background-position: -0px -160px; } +#in-link-tb-validate.hover { background-position: -32px -160px; } +#in-link-tb-validate.disabled { background-position: -64px -160px; } +#in-link-tb-validate_reset { background-position: -0px -192px; } +#in-link-tb-validate_reset.hover { background-position: -32px -192px; } +#in-link-tb-validate_reset.disabled { background-position: -64px -192px; } +#in-link-tb-validate_restart { background-position: -0px -224px; } +#in-link-tb-validate_restart.hover { background-position: -32px -224px; } +#in-link-tb-validate_restart.disabled { background-position: -64px -224px; } Property changes on: releases/5.2.1/admin_templates/img/toolbar/toolbar-sprite.css ___________________________________________________________________ Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/img/itemicons/icon16_invalid_pend.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_invalid_pend.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_link.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_link.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_invalid_disabled.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_invalid_disabled.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_not_validated.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_not_validated.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_links.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_links.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_valid.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_valid.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_link_pending.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_link_pending.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_link_disabled.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_link_disabled.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_not_validated_pend.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_not_validated_pend.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_not_validated_disabled.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_not_validated_disabled.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_link_new.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_link_new.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_valid_pend.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_valid_pend.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_invalid.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_invalid.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_valid_disabled.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_valid_disabled.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/itemicons/icon16_listing_type.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/itemicons/icon16_listing_type.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/icons/icon24_duplicate_checker.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/icons/icon24_duplicate_checker.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/icons/icon24_links.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/icons/icon24_links.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/icons/icon24_settings_in-link.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/icons/icon24_settings_in-link.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/icons/icon46_settings_in-link.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/icons/icon46_settings_in-link.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/icons/icon24_conf_directory.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/icons/icon24_conf_directory.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/icons/icon24_paid_listings.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/icons/icon24_paid_listings.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/icons/icon24_validate.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/icons/icon24_validate.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/img/link_arrow.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/admin_templates/img/link_arrow.gif ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/admin_templates/import_progress.tpl =================================================================== --- releases/5.2.1/admin_templates/import_progress.tpl (revision 0) +++ releases/5.2.1/admin_templates/import_progress.tpl (revision 16070) @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/import_progress.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.7.2.2 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/catalog_tab.tpl =================================================================== --- releases/5.2.1/admin_templates/catalog_tab.tpl (revision 0) +++ releases/5.2.1/admin_templates/catalog_tab.tpl (revision 16070) @@ -0,0 +1,55 @@ + + + + + a_toolbar.AddButton( + new ToolBarButton( + 'in-link:new_link', + '', + add_item, + true + ) + ); + + + + + + + + + $Catalog.setItemCount('', ''); + + + + + + + + + $Catalog.setItemCount('', ''); + $Catalog.setCurrentCategory('', ); + $Catalog.saveSearch('', '', ''); + + + + + Grids[''].AddAlternativeGrid('', true); + + Grids[''].SetDependantToolbarButtons( new Array('edit','delete','approve','decline','sep3','cut','copy','move_up','move_down','sep6')); + + + $Catalog.setViewMenu(''); + + Grids[''].DblClick = function() {return false}; + + #separator# + + + + + + + + + Property changes on: releases/5.2.1/admin_templates/catalog_tab.tpl ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.19.2.8 Added: svn:eol-style + LF Index: releases/5.2.1/admin_templates/duplicate_checker/duplicate_link_view.tpl =================================================================== --- releases/5.2.1/admin_templates/duplicate_checker/duplicate_link_view.tpl (revision 0) +++ releases/5.2.1/admin_templates/duplicate_checker/duplicate_link_view.tpl (revision 16070) @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + +
+ +
+ + + + + + \ No newline at end of file Property changes on: releases/5.2.1/admin_templates/duplicate_checker/duplicate_link_view.tpl ___________________________________________________________________ Added: svn:eol-style + LF Index: releases/5.2.1/install/install_order.txt =================================================================== --- releases/5.2.1/install/install_order.txt (revision 0) +++ releases/5.2.1/install/install_order.txt (revision 16070) @@ -0,0 +1 @@ +102 \ No newline at end of file Property changes on: releases/5.2.1/install/install_order.txt ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:eol-style + LF Index: releases/5.2.1/install/module_info.xml =================================================================== --- releases/5.2.1/install/module_info.xml (revision 0) +++ releases/5.2.1/install/module_info.xml (revision 16070) @@ -0,0 +1,6 @@ + + + In-Link + Directory Management + modules/in-link/install/img/icon_directory_management.gif + \ No newline at end of file Property changes on: releases/5.2.1/install/module_info.xml ___________________________________________________________________ Added: svn:eol-style + LF Index: releases/5.2.1/install/upgrades.php =================================================================== --- releases/5.2.1/install/upgrades.php (revision 0) +++ releases/5.2.1/install/upgrades.php (revision 16070) @@ -0,0 +1,183 @@ +dependencies = Array ( + '4.3.9' => Array ('Core' => '4.3.9'), + '5.0.0' => Array ('Core' => '5.0.0'), + '5.0.1' => Array ('Core' => '5.0.1'), + '5.0.2-B1' => Array ('Core' => '5.0.2-B1'), + '5.0.2-B2' => Array ('Core' => '5.0.2-B2'), + '5.0.2-RC1' => Array ('Core' => '5.0.2-RC1'), + '5.0.2' => Array ('Core' => '5.0.2'), + '5.0.3-B1' => Array ('Core' => '5.0.3-B1'), + '5.0.3-B2' => Array ('Core' => '5.0.3-B2'), + '5.0.3-RC1' => Array ('Core' => '5.0.3-RC1'), + '5.0.3' => Array ('Core' => '5.0.3'), + '5.0.4-B1' => Array ('Core' => '5.0.4-B1'), + '5.0.4-B2' => Array ('Core' => '5.0.4-B2'), + '5.0.4' => Array ('Core' => '5.0.4'), + '5.1.0-B1' => Array ('Core' => '5.1.0-B1'), + '5.1.0-RC1' => Array ('Core' => '5.1.0-RC1'), + '5.1.0' => Array ('Core' => '5.1.0'), + '5.1.1-B1' => Array ('Core' => '5.1.1-B1'), + '5.1.1-B2' => Array ('Core' => '5.1.1-B2'), + '5.1.1-RC1' => Array ('Core' => '5.1.1-RC1'), + '5.1.1' => Array ('Core' => '5.1.1'), + '5.1.2-B1' => Array ('Core' => '5.1.2-B1'), + '5.1.2-RC1' => Array ('Core' => '5.1.2-RC1'), + '5.1.2' => Array ('Core' => '5.1.2'), + '5.1.3-B1' => Array ('Core' => '5.1.3-B2'), + '5.1.3-RC1' => Array ('Core' => '5.1.3-RC1'), + '5.1.3-RC2' => Array ('Core' => '5.1.3-RC2'), + '5.1.3' => Array ('Core' => '5.1.3'), + '5.2.0-B1' => Array ('Core' => '5.2.0-B1'), + '5.2.0-B2' => Array ('Core' => '5.2.0-B2'), + '5.2.0-B3' => Array ('Core' => '5.2.0-B3'), + '5.2.0-RC1' => Array ('Core' => '5.2.0-RC1'), + '5.2.0' => Array ('Core' => '5.2.0'), + '5.2.1-B1' => Array ('Core' => '5.2.1-B1'), + '5.2.1-B2' => Array ('Core' => '5.2.1-B2'), + '5.2.1-RC1' => Array ('Core' => '5.2.1-RC1'), + '5.2.1' => Array ('Core' => '5.2.1'), + ); + } + + /** + * Changes table structure, where multilingual fields of TEXT type are present + * + * @param string $mode when called mode {before, after) + */ + function Upgrade_5_0_0($mode) + { + if ($mode == 'after') { + $root_category = $this->Application->findModule('Name', 'In-Link', 'RootCat'); + + $sql = 'UPDATE ' . $this->Application->getUnitOption('c', 'TableName') . ' + SET UseMenuIconUrl = 1, MenuIconUrl = "in-link/img/menu_links.gif" + WHERE ' . $this->Application->getUnitOption('c', 'IDField') . ' = ' . $root_category; + $this->Conn->Query($sql); + + $this->_updateDetailTemplate('l', 'inlink/detail', 'in-link/designs/detail'); + + // copy link name and description to their multilingual equivalents + $this->_copyToMultilingual(); + } + } + + /** + * Copy link values from normal fields to multilingual + * + */ + function _copyToMultilingual() + { + $fields = Array ('Name', 'Description'); + $primary_language = $this->Application->GetDefaultLanguageId(); + + $set_clause = Array (); + foreach ($fields as $field) { + $set_clause[] = 'l' . $primary_language . '_' . $field . ' = ' . $field; + } + + $sql = 'UPDATE ' . TABLE_PREFIX . 'Link + SET ' . implode(', ', $set_clause); + $this->Conn->Query($sql); + } + + /** + * Update to 5.0.1 + * + * @param string $mode when called mode {before, after) + */ + function Upgrade_5_0_1($mode) + { + if ($mode == 'after') { + $this->_updateDetailTemplate('l', 'in-link/designs/detail', 'in-link/links/link_detail'); + + // delete old events + $events_to_delete = Array ( 'LINK.OWNER.MODIFY.PENDING', 'LINK.OWNER.MODIFY' ); + + $sql = 'SELECT EventId FROM ' . TABLE_PREFIX . 'Events + WHERE Event IN ("' . implode('","', $events_to_delete) . '")'; + $event_ids = $this->Conn->GetCol($sql); + + if ($event_ids) { + $sql = 'DELETE FROM ' . TABLE_PREFIX . 'EmailMessage + WHERE EventId IN (' . implode(',', $event_ids) . ')'; + $this->Conn->Query($sql); + + $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Events + WHERE EventId IN (' . implode(',', $event_ids) . ')'; + $this->Conn->Query($sql); + + $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Phrase + WHERE Phrase IN ("la_event_link.owner.modify", "la_event_link.owner.modify.pending")'; + $this->Conn->Query($sql); + } + } + } + + /** + * Update to 5.0.4-B1 + * + * @param string $mode when called mode {before, after) + */ + function Upgrade_5_0_4_B1($mode) + { + if ($mode == 'after') { + // check in-link custom fields if need to add to search config + $custom_fields = Array ( + 'LinkAddress' => "('CustomField', 'LinkAddress', 1, 1, 'la_fld_LinkAddress', 'lu_fld_LinkAddress', 'In-Link', 'la_section_BusinessLocation', 1, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, {CUSTOM_FIELD_ID})", + 'LinkCity' => "('CustomField', 'LinkCity', 1, 1, 'la_fld_LinkCity', 'lu_fld_LinkCity', 'In-Link', 'la_section_BusinessLocation', 2, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, {CUSTOM_FIELD_ID})", + 'LinkState' => "('CustomField', 'LinkState', 1, 1, 'la_fld_LinkState', 'lu_fld_LinkState', 'In-Link', 'la_section_BusinessLocation', 3, DEFAULT, 0, 'select', NULL, NULL, NULL, NULL, NULL, NULL, {CUSTOM_FIELD_ID})", + 'LinkZipCode' => "('CustomField', 'LinkZipCode', 1, 1, 'la_fld_LinkZipCode', 'lu_fld_LinkZipCode', 'In-Link', 'la_section_BusinessLocation', 4, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, {CUSTOM_FIELD_ID})", + 'LinkCountry' => "('CustomField', 'LinkCountry', 1, 1, 'la_fld_LinkCountry', 'lu_fld_LinkCountry', 'In-Link', 'la_section_BusinessLocation', 5, DEFAULT, 0, 'select', NULL, NULL, NULL, NULL, NULL, NULL, {CUSTOM_FIELD_ID})", + 'LinkPhone' => "('CustomField', 'LinkPhone', 1, 1, 'la_fld_LinkPhone', 'lu_fld_LinkPhone', 'In-Link', 'la_section_BusinessLocation', 6, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, {CUSTOM_FIELD_ID})", + ); + + // get all in-link custom fields ides at once + $sql = 'SELECT CustomFieldId, FieldName + FROM ' . TABLE_PREFIX . 'CustomField + WHERE Type = 4 AND IsSystem = 0'; + $custom_field_ids = $this->Conn->GetCol($sql, 'FieldName'); + + foreach ($custom_fields as $field_name => $custom_field_sql) { + $sql = 'SELECT FieldName + FROM ' . TABLE_PREFIX . 'SearchConfig + WHERE (FieldName = ' . $this->Conn->qstr($field_name) . ') AND (LOWER(ModuleName) = "in-link")'; + $found = $this->Conn->GetOne($sql); + + if (!$found) { + // replace sql and insert new search config record + $sql = str_replace('{CUSTOM_FIELD_ID}', $custom_field_ids[$field_name], $custom_field_sql); + $sql = 'INSERT INTO ' . TABLE_PREFIX . 'SearchConfig VALUES ' . $sql; + $this->Conn->Query($sql); + } + } + } + } + } Property changes on: releases/5.2.1/install/upgrades.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.3 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/install/install_schema.sql =================================================================== --- releases/5.2.1/install/install_schema.sql (revision 0) +++ releases/5.2.1/install/install_schema.sql (revision 16070) @@ -0,0 +1,145 @@ +CREATE TABLE Link ( + LinkId int(11) NOT NULL AUTO_INCREMENT, + `Name` varchar(255) NOT NULL DEFAULT '', + l1_Name varchar(255) NOT NULL DEFAULT '', + l2_Name varchar(255) NOT NULL DEFAULT '', + l3_Name varchar(255) NOT NULL DEFAULT '', + l4_Name varchar(255) NOT NULL DEFAULT '', + l5_Name varchar(255) NOT NULL DEFAULT '', + AutomaticFilename tinyint(3) unsigned NOT NULL DEFAULT '1', + Description text, + l1_Description text, + l2_Description text, + l3_Description text, + l4_Description text, + l5_Description text, + MetaKeywords varchar(255) DEFAULT NULL, + MetaDescription text, + Url varchar(255) NOT NULL DEFAULT '', + CreatedOn int(10) unsigned DEFAULT NULL, + Modified int(10) unsigned DEFAULT NULL, + Expire int(10) unsigned DEFAULT NULL, + Hits double(20,6) NOT NULL DEFAULT '0.000000', + CachedRating varchar(10) NOT NULL DEFAULT '0', + CachedVotesQty int(11) NOT NULL DEFAULT '0', + CachedReviewsQty int(11) NOT NULL DEFAULT '0', + CreatedById int(11) DEFAULT NULL, + ModifiedById int(11) DEFAULT NULL, + Priority int(11) NOT NULL DEFAULT '0', + `Status` tinyint(4) NOT NULL DEFAULT '2', + EditorsPick tinyint(4) NOT NULL DEFAULT '0', + ResourceId int(11) DEFAULT NULL, + HotItem tinyint(4) NOT NULL DEFAULT '2', + PopItem tinyint(4) NOT NULL DEFAULT '2', + NewItem tinyint(4) NOT NULL DEFAULT '2', + OrgId int(11) DEFAULT NULL, + CustomTemplate varchar(255) NOT NULL DEFAULT '', + ReciprocalLinkFound tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (LinkId), + UNIQUE KEY ResourceId (ResourceId), + KEY sorting (Priority,`Name`), + KEY Hits (Hits), + KEY `Name` (`Name`), + KEY l1_Name (l1_Name), + KEY l2_Name (l2_Name), + KEY l3_Name (l3_Name), + KEY l4_Name (l4_Name), + KEY l5_Name (l5_Name), + KEY Description (Description(5)), + KEY l1_Description (l1_Description(5)), + KEY l2_Description (l2_Description(5)), + KEY l3_Description (l3_Description(5)), + KEY l4_Description (l4_Description(5)), + KEY l5_Description (l5_Description(5)), + KEY EditorsPick (EditorsPick), + KEY CreatedOn (CreatedOn), + KEY Modified (Modified,CreatedOn), + KEY `Status` (`Status`), + KEY HotItem (HotItem), + KEY PopItem (PopItem), + KEY NewItem (NewItem) +); + +CREATE TABLE LinkValidation ( + LinkValidationId int(11) NOT NULL AUTO_INCREMENT, + LinkId int(11) NOT NULL DEFAULT '0', + ValidationTime int(11) DEFAULT NULL, + ValidationCode varchar(50) DEFAULT NULL, + ValidationStatus tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (LinkValidationId), + UNIQUE KEY LinkId (LinkId), + KEY ValidationStatus (ValidationStatus), + KEY ValidationTime (ValidationTime) +); + +CREATE TABLE Listings ( + ListingId int(11) NOT NULL auto_increment, + ListingTypeId int(11) default '0', + ItemResourceId int(11) default NULL, + PurchasedOn int(11) default NULL, + ExpiresOn int(11) default NULL, + `Status` TINYINT(4) UNSIGNED NOT NULL DEFAULT '2', + PendingRenewal tinyint(4) NOT NULL default '0', + RenewalReminderSent tinyint(4) NOT NULL default '0', + PRIMARY KEY (ListingId), + KEY ListingTypeId (ListingTypeId), + KEY ItemResourceId (ItemResourceId), + KEY PurchasedOn (PurchasedOn), + KEY ExpiresOn (ExpiresOn), + KEY Status (Status), + KEY RenewalReminderSent (RenewalReminderSent) +); + +CREATE TABLE ListingTypes ( + ListingTypeId int(11) NOT NULL AUTO_INCREMENT, + `Name` varchar(255) NOT NULL DEFAULT '', + Description text, + Duration int(11) NOT NULL DEFAULT '0', + DurationType int(11) NOT NULL DEFAULT '0', + OnPurchaseEdPick tinyint(4) NOT NULL DEFAULT '3', + OnPurchaseNew tinyint(4) NOT NULL DEFAULT '3', + OnPurchasePop tinyint(4) NOT NULL DEFAULT '3', + OnPurchaseHot tinyint(4) NOT NULL DEFAULT '3', + OnPurchasePriorityAction tinyint(4) NOT NULL DEFAULT '0', + OnPurchasePriorityValue tinyint(4) NOT NULL DEFAULT '1', + OnPurchaseAddToCatEnabled tinyint(4) NOT NULL DEFAULT '0', + OnPurchaseAddToCat int(11) NOT NULL DEFAULT '0', + OnPurchaseCustomTemplate varchar(255) NOT NULL DEFAULT '', + OnPurchaseStatus tinyint(4) NOT NULL DEFAULT '3', + OnExpireEdPick tinyint(4) NOT NULL DEFAULT '3', + OnExpireNew tinyint(4) NOT NULL DEFAULT '3', + OnExpirePop tinyint(4) NOT NULL DEFAULT '3', + OnExpireHot tinyint(4) NOT NULL DEFAULT '3', + OnExpirePriorityAction tinyint(4) NOT NULL DEFAULT '0', + OnExpirePriorityValue tinyint(4) NOT NULL DEFAULT '1', + OnExpireRemoveFromCatEnabled tinyint(4) NOT NULL DEFAULT '0', + OnExpireRemoveFromCat int(11) NOT NULL DEFAULT '0', + OnExpireCustomTemplate varchar(255) NOT NULL DEFAULT '', + OnExpireStatus tinyint(4) NOT NULL DEFAULT '3', + RenewalReminder int(11) NOT NULL DEFAULT '0', + EnableBuying tinyint(4) NOT NULL DEFAULT '0', + ShopCartName varchar(255) DEFAULT NULL, + Price double DEFAULT NULL, + Recurring tinyint(4) NOT NULL DEFAULT '0', + VirtualProductId int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (ListingTypeId), + KEY VirtualProductId (VirtualProductId) +); + +CREATE TABLE LinkCustomData ( + CustomDataId int(11) NOT NULL auto_increment, + ResourceId int(10) unsigned NOT NULL default '0', + KEY ResourceId (ResourceId), + PRIMARY KEY (CustomDataId) +); + +CREATE TABLE LinkVisits ( + VisitId int(11) NOT NULL AUTO_INCREMENT, + ResourceId int(11) DEFAULT NULL, + PortalUserId int(11) NOT NULL DEFAULT '0', + VisitTimestamp int(11) DEFAULT NULL, + PRIMARY KEY (VisitId), + KEY ResourceId (ResourceId), + KEY PortalUserId (PortalUserId), + KEY VisitTimestamp (VisitTimestamp) +); Property changes on: releases/5.2.1/install/install_schema.sql ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.2 Added: svn:eol-style + LF Index: releases/5.2.1/install/upgrades.sql =================================================================== --- releases/5.2.1/install/upgrades.sql (revision 0) +++ releases/5.2.1/install/upgrades.sql (revision 16070) @@ -0,0 +1,207 @@ +# ===== v 4.3.9 ===== +INSERT INTO Events VALUES (DEFAULT, 'LINK.VALIDATION.RESULTS', NULL, 1, 0, 'In-Link', 'la_event_link.validation.results', 1); + +INSERT INTO ImportScripts VALUES (DEFAULT, 'Links from CSV file [In-Link]', '', 'l', 'In-Link', '', 'CSV', '1'); + +UPDATE CustomField +SET ValueList = '=+||SELECT DestAbbr AS OptionValue, DestName AS OptionName FROM StdDestinations WHERE DestType = 2 AND (DestParentId = 225 OR DestParentId = 38) ORDER BY DestParentId DESC, DestAbbr ASC' +WHERE FieldName = 'LinkState'; + +UPDATE CustomField +SET ValueList = '=+||SELECT DestAbbr AS OptionValue, DestName AS OptionName FROM StdDestinations WHERE DestType = 1 ORDER BY DestAbbr ASC' +WHERE FieldName = 'LinkCountry'; + +# ===== v 5.0.0 ===== +INSERT INTO Counters VALUES (DEFAULT, 'linkhits_count', 'SELECT ROUND(SUM(Hits)) FROM <%PREFIX%>Link', NULL, NULL, '300', '0', '|Link|'); +UPDATE Category SET Template = '/in-link/designs/section' WHERE Template = 'inlink/index'; +UPDATE Category SET CachedTemplate = '/in-link/designs/section' WHERE CachedTemplate = 'inlink/index'; + +UPDATE ConfigurationValues SET VariableValue = '/in-link/designs/section' WHERE VariableName = 'l_CategoryTemplate'; +UPDATE ConfigurationValues SET VariableValue = 'in-link/designs/detail' WHERE VariableName = 'l_ItemTemplate'; + +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:links.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:setting_folder.view', 11, 1, 1, 0); +DELETE FROM Permissions WHERE Permission LIKE 'in-link:inlink_general.%'; + +UPDATE Events SET Description = 'la_event_link.owner.modify' WHERE Description = 'la_event_link.modify.modify'; +UPDATE Events SET Description = 'la_event_link.owner.modify.pending' WHERE Description = 'la_event_link.modify.modify.pending'; + +UPDATE Phrase SET Module = 'In-Link' WHERE ((Phrase LIKE '%Links%' OR Phrase LIKE '%Listing%') AND (Module = 'Core') AND Phrase NOT IN ('la_section_QuickLinks')); + +UPDATE Phrase SET Module = 'In-Link', PhraseType = 1 WHERE ( (Phrase LIKE '%Validation%' OR Phrase LIKE 'la_title_In-Link') AND (Module = 'Core') AND Phrase NOT IN ('la_ValidationEmail', 'la_prompt_validation')); + +# ===== v 5.0.1 ===== +UPDATE ConfigurationValues SET VariableValue = 'in-link/links/link_detail' WHERE VariableName = 'l_ItemTemplate'; + +UPDATE ConfigurationAdmin SET ValueList = 'ReviewText=la_opt_CommentText,CreatedOn=la_opt_CreatedOn' +WHERE VariableName IN ('Link_ReviewsSort', 'Link_ReviewsSort2'); + +UPDATE ConfigurationAdmin SET ValueList = 'ASC=la_common_Ascending,DESC=la_common_Descending' +WHERE VariableName IN ('Link_ReviewsOrder', 'Link_ReviewsOrder2'); + +UPDATE ConfigurationAdmin SET ValueList = 'Name=la_Link_Name,Description=la_Link_Description,Url=la_Link_URL,CreatedOn=la_opt_CreatedOn,Hits=la_Link_Hits,CachedRating=la_opt_Rating,SELECT Prompt AS OptionName, CONCAT("cust_", FieldName) AS OptionValue FROM CustomField WHERE (Type = 4) AND (IsSystem = 0)' +WHERE VariableName IN ('Link_SortField', 'Link_SortField2'); + +UPDATE ConfigurationAdmin +SET ValueList = '1=la_opt_Sec,60=la_opt_Min,3600=la_opt_Hour,86400=la_opt_Day,604800=la_opt_Week,2419200=la_opt_Month,29030400=la_opt_Year' +WHERE VariableName IN ('link_ReviewDelay_Interval', 'link_RatingDelay_Interval'); + +UPDATE CustomField SET FieldLabel = 'la_fld_cust_l_ItemTemplate', Prompt = 'la_fld_cust_l_ItemTemplate' WHERE FieldName = 'l_ItemTemplate'; + +INSERT INTO Events VALUES(DEFAULT, 'LINK.REVIEW.ADD.PENDING', NULL, 1, 0, NULL, 'In-Link', 'la_event_link.review.add.pending', 1); + +UPDATE ConfigurationAdmin SET ValueList = 'style="width: 50px;"' WHERE VariableName IN ('link_ReviewDelay_Value', 'link_RatingDelay_Value'); + +# ===== v 5.0.2-B1 ===== +ALTER TABLE ListingTypes CHANGE Description Description text NULL; +ALTER TABLE LinkValidation CHANGE ValidationTime ValidationTime INT NULL DEFAULT NULL; +ALTER TABLE LinkVisits CHANGE VisitTimestamp VisitTimestamp INT(11) NULL DEFAULT NULL; + +# ===== v 5.0.2-B2 ===== + +# ===== v 5.0.2-RC1 ===== + +# ===== v 5.0.2 ===== + +# ===== v 5.0.3-B1 ===== +UPDATE Phrase +SET Module = 'In-Link' +WHERE Phrase IN ( + 'lu_PermName_Link.Add.Pending_desc', 'lu_PermName_Link.Add_desc', 'lu_PermName_Link.Delete_desc', + 'lu_PermName_Link.Modify.Pending_desc', 'lu_PermName_Link.Modify_desc', 'lu_PermName_Link.Owner.Delete_desc', + 'lu_PermName_Link.Owner.Modify.Pending_desc', 'lu_PermName_Link.Owner.Modify_desc', 'lu_PermName_Link.Rate_desc', + 'lu_PermName_Link.Review_Pending_desc', 'lu_PermName_Link.View_desc' +); + +# ===== v 5.0.3-B2 ===== + +# ===== v 5.0.3-RC1 ===== + +# ===== v 5.0.3 ===== + +# ===== v 5.0.4-B1 ===== + +# ===== v 5.0.4-B2 ===== + +# ===== v 5.0.4 ===== + +# ===== v 5.1.0-B1 ===== +UPDATE Modules SET Path = 'modules/in-link/' WHERE `Name` = 'In-Link'; +DELETE FROM ConfigurationValues WHERE VariableName IN ('StartValidationTime', 'LastExpirationTime', 'Link_Root'); + +UPDATE CustomField +SET ValueList = '=+||SELECT IsoCode AS OptionValue, l%3$s_Name AS OptionName FROM CountryStates WHERE Type = 2 ORDER BY StateCountryId DESC, IsoCode ASC' +WHERE ValueList = '=+||SELECT DestAbbr AS OptionValue, DestName AS OptionName FROM StdDestinations WHERE DestType = 2 AND (DestParentId = 225 OR DestParentId = 38) ORDER BY DestParentId DESC, DestAbbr ASC'; + +UPDATE CustomField +SET ValueList = '=+||SELECT IsoCode AS OptionValue, l%3$s_Name AS OptionName FROM CountryStates WHERE Type = 1 ORDER BY IsoCode ASC' +WHERE ValueList = '=+||SELECT DestAbbr AS OptionValue, DestName AS OptionName FROM StdDestinations WHERE DestType = 1 ORDER BY DestAbbr ASC'; + +DELETE FROM Permissions WHERE Permission LIKE 'in-link:configuration_email%'; + +# ===== v 5.1.0-RC1 ===== + +# ===== v 5.1.0 ===== + +# ===== v 5.1.1-B1 ===== +ALTER TABLE Link + CHANGE CreatedById CreatedById INT(11) NULL DEFAULT NULL , + CHANGE ModifiedById ModifiedById INT(11) NULL DEFAULT NULL; + +# ===== v 5.1.1-B2 ===== +UPDATE Events +SET l<%PRIMARY_LANGUAGE%>_Body = REPLACE(l<%PRIMARY_LANGUAGE%>_Body, 'CatalogReviews review_table WHERE review_table.ItemId = main_table.ResourceId); + +# ===== v 5.2.0-B3 ===== + +# ===== v 5.2.0-RC1 ===== + +# ===== v 5.2.0 ===== +INSERT INTO Permissions VALUES(DEFAULT, 'in-link:configuration_output.add', 11, 1, 1, 0); + +# ===== v 5.2.1-B1 ===== + +# ===== v 5.2.1-B2 ===== +UPDATE Modules +SET ClassNamespace = 'Intechnic\\InPortal\\Modules\\InLink' +WHERE `Name` = 'In-Link'; + +# ===== v 5.2.1-RC1 ===== + +# ===== v 5.2.1 ===== Property changes on: releases/5.2.1/install/upgrades.sql ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.11 Added: svn:eol-style + LF Index: releases/5.2.1/install/english.lang =================================================================== --- releases/5.2.1/install/english.lang (revision 0) +++ releases/5.2.1/install/english.lang (revision 16070) @@ -0,0 +1,297 @@ + + + + + JGJvZHkNCjxici8+PGJyLz4NCg0KU2luY2VyZWx5LDxici8+PGJyLz4NCg0KV2Vic2l0ZSBhZG1pbmlzdHJhdGlvbi4NCg0KPCEtLSMjIDxpbnAyOmVtYWlsLWxvZ19JdGVtTGluayB0ZW1wbGF0ZT0icGxhdGZvcm0vbXlfYWNjb3VudC9lbWFpbCIvPiAjIy0tPg== + + + QWN0aW9ucyBVcG9uIEV4cGlyYXRpb24= + QWN0aW9ucyBVcG9uIFB1cmNoYXNl + RHVwbGljYXRlcw== + VmFsaWRhdGVkIE9u + VmFsaWRhdGlvbiBDb2Rl + RW5hYmxlIExpbmsgQ29udGFjdCBGb3Jtcw== + UmVjaXByb2NhbCBMaW5rIENoZWNraW5n + RGVjcmVhc2UgQnk= + RG9uJ3QgQ2hhbmdl + QWRkaXRpb25hbCBTZWN0aW9u + TGluayBJdGVtIFRlbXBsYXRl + RW5hYmxlIFB1cmNoYXNpbmc= + RXhwaXJhdGlvbiBEYXRl + QWRkcmVzcw== + Q2l0eQ== + Q291bnRyeQ== + RW5hYmxlIEdvb2dsZSBNYXBz + R29vZ2xlIE1hcHMgQVBJIEtleQ== + TGluayBOYW1l + TGluayBPd25lcg== + UGhvbmU= + U3RhdGU= + TGluayBTdGF0dXM= + WmlwIGNvZGU= + TWF4aW11bSBudW1iZXIgb2YgSE9UIGxpbmtz + TWluaW11bSByYXRpbmcgdG8gY29uc2lkZXIgbGluayBQT1A= + TWluaW11bSBudW1iZXIgb2Ygdm90ZXMgdG8gY29uc2lkZXIgbGluayBQT1A= + RGVzY3JpcHRpb24= + SUQ= + TmFtZQ== + UGVuZGluZyBSZW5ld2Fs + UHVyY2hhc2UgRGF0ZQ== + UmVjaXByb2NhbCBMaW5rIFN0YXR1cw== + UmVjdXJyaW5n + UmVuZXdhbCBSZW1pbmRlcg== + UHJvZHVjdCBOYW1l + SW4tTGluaw== + SW5jcmVhc2UgQnk= + TGlua3M= + QWxsb3cgRnJlZSBMaXN0aW5ncw== + TGluayBEZXNjcmlwdGlvbg== + RW5oYW5jZWQgTGlzdGluZ3M= + SGl0cw== + TGluayBOYW1l + YW5kIHRoZW4gYnk= + U29ydCBDb21tZW50cyBieQ== + VVJM + R3JvdXBpbmcgQnk= + Tm90IENoZWNrZWQ= + Tm8= + UGVuZGluZyBSZW5ld2Fs + Q29udGludWUgTGluayBWYWxpZGF0aW9u + UmVzZXQgTGluayBWYWxpZGF0aW9u + UmVzdGFydCBMaW5rIFZhbGlkYXRpb24= + TGluayBWYWxpZGF0aW9uIGZvciBJbmRpdmlkdWFsIExpc3Rpbmdz + QXBwcm92ZSBQYWlkIExpc3Rpbmdz + RGVjbGluZSBQYWlkIExpc3Rpbmdz + UGVuZGluZyBMaW5r + QWRkIExpbms= + RGVsZXRlIExpbms= + TW9kaWZ5IExpbmsgUGVuZGluZw== + TW9kaWZ5IExpbms= + TGluayBEZWxldGUgYnkgT3duZXI= + TGluayBNb2RpZnkgUGVuZGluZyBieSBPd25lcg== + TGluayBNb2RpZnkgYnkgT3duZXI= + UmF0ZSBMaW5r + Q29tbWVudCBMaW5r + UmV2aWV3IExpbmsgUGVuZGluZw== + VmlldyBMaW5r + QWN0aXZlIExpbmtz + RGlzYWJsZWQgTGlua3M= + RWRpdG9yJ3MgUGljayBMaW5rcw== + SG90IExpbmtz + VG90YWwgTGluayBDb21tZW50cw== + QXZlcmFnZSBSYXRpbmcgb2YgTGlua3M= + TWF4aW11bSBIaXRzIG9mIGEgTGluaw== + TWF4aW11bSBWb3RlcyBvZiBhIExpbms= + TmV3IExpbmtz + UGVuZGluZyBMaW5rcw== + UG9wdWxhciBMaW5rcw== + VG90YWwgTGlua3M= + TG9jYXRpb24= + TGluaw== + T3JpZ2luYWwgVmFsdWVz + U2V0IEVxdWFsIFRv + UmVzZXQ= + RHVwbGljYXRlIENoZWNrZXI= + TGlua3M= + TGluayBWYWxpZGF0aW9u + TGlzdGluZ3M= + TGlzdGluZyBUeXBlcw== + UGFpZCBMaXN0aW5ncw== + U2hvcHBpbmcgQ2FydCBFbnRyeQ== + VmFsaWRhdGluZyBMaW5rcw== + TGlua3M= + UGFpZCBMaXN0aW5n + TGlzdGluZyBUeXBl + U2hvcHBpbmcgQ2FydCBJdGVt + QWRkaW5nIExpbms= + QWRkaW5nIExpc3Rpbmc= + QWRkaW5nIExpc3RpbmcgVHlwZQ== + RHVwbGljYXRlIExpbmtz + RWRpdGluZyBMaW5r + RWRpdGluZyBMaXN0aW5n + RWRpdGluZyBMaXN0aW5nIFR5cGU= + SW1wb3J0IExpbmtz + RGlyZWN0b3J5 + TGlua3M= + TGlua3MgRXhwb3J0 + TmV3IExpbms= + TmV3IExpc3Rpbmc= + TmV3IExpc3RpbmcgVHlwZQ== + UGFpZCBMaXN0aW5ncw== + TGlzdGluZyBUeXBlcw== + U2hvcHBpbmcgQ2FydCBFbnRyeQ== + Q29udGludWUgTGluayBWYWxpZGF0aW9u + TWVyZ2U= + TmV3IEZpbGU= + TmV3IExpc3Rpbmc= + TmV3IExpc3RpbmcgVHlwZQ== + TmV3IFBhaWQgTGlzdGluZw== + U3RhcnQgTmV3IFZhbGlkYXRpb24= + UmVzZXQgVmFsaWRhdGlvbiBTdGF0dXM= + VXNlIGdyaWQgdG8gQXBwcm92ZSAvIERlY2xpbmU= + + + + TmV3IExpbmsgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPiIgLSBBZGRlZA== + VGhhbmsgeW91IGZvciBzdWJtaXR0aW5nIHlvdXIgbGluayB0byBvdXIgd2Vic2l0ZSE8YnIgLz4NCjxiciAvPg0KTGluayBkZXRhaWwgYXJlIGxpc3RlZCBiZWxvdzo8YnIgLz4NCjxiciAvPg0KTGluayBOYW1lOiA8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4gPGJyIC8+DQo8aW5wMjptX2lmIGNoZWNrPSJsX0ZpZWxkIiBuYW1lPSJVcmwiPiBMaW5rIFdlYnNpdGU6IDxpbnAyOmxfRmllbGQgbmFtZT0iVXJsIi8+PGJyIC8+DQo8L2lucDI6bV9pZj4gPGlucDI6bV9pZiBjaGVjaz0ibF9GaWVsZCIgbmFtZT0iRGVzY3JpcHRpb24iPiBEZXNjcmlwdGlvbjogPGlucDI6bF9GaWVsZCBuYW1lPSJEZXNjcmlwdGlvbiIvPjxiciAvPg0KPC9pbnAyOm1faWY+IDxiciAvPg0KPGJyIC8+DQpZb3UgY2FuIHZpZXcgeW91ciBsaW5rIGhlcmUgPGEgaHJlZj0iPGlucDI6bF9MaW5rTGluayB0ZW1wbGF0ZT0iX19kZWZhdWx0X18iLz4iPjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPjwvYT4= + + + TmV3IExpbmsgaGFzIGJlZW4gU3VibWl0dGVk + QSBuZXcgTGluayBoYXMgYmVlbiBzdWJtaXR0ZWQgdG8gdGhlIHdlYnNpdGUgYnkgPGlucDI6bF9GaWVsZCBuYW1lPSJVc2VyTmFtZSIvPi48YnIgLz4NCjxiciAvPg0KTGluayBOYW1lOiA8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz48YnIgLz4NCjxpbnAyOm1faWYgY2hlY2s9ImxfRmllbGQiIG5hbWU9IlVybCI+IExpbmsgV2Vic2l0ZTogPGlucDI6bF9GaWVsZCBuYW1lPSJVcmwiLz48YnIgLz4NCjwvaW5wMjptX2lmPiA8aW5wMjptX2lmIGNoZWNrPSJsX0ZpZWxkIiBuYW1lPSJEZXNjcmlwdGlvbiI+IERlc2NyaXB0aW9uOiA8aW5wMjpsX0ZpZWxkIG5hbWU9IkRlc2NyaXB0aW9uIi8+PGJyIC8+DQo8L2lucDI6bV9pZj4gPGJyIC8+DQo8YnIgLz4NCllvdSBjYW4gdmlldyBpdCBoZXJlIDxhIGhyZWY9IjxpbnAyOmxfTGlua0xpbmsgdGVtcGxhdGU9Il9fZGVmYXVsdF9fIi8+Ij48aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz48L2E+ + + + WW91ciBMaW5rICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGlzIFBlbmRpbmc= + VGhhbmsgeW91IGZvciBzdWJtaXR0aW5nIHlvdXIgTGluay48YnIvPjxici8+DQoNCkN1cnJlbnRseSBpdCdzIHBlbmRpbmcgZm9yIGFkbWluaXN0cmF0aXZlIGFwcHJvdmFsLjxici8+PGJyLz4NCg0KWW91J2xsIGJlIGNvbnRhY3RlZCBkaXJlY3RseSBieSBlbWFpbC48YnIvPjxici8+DQoNCkxpbmsgTmFtZTogPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+PGJyLz4NCjxpbnAyOm1faWYgY2hlY2s9ImxfRmllbGQiIG5hbWU9IlVybCI+DQpMaW5rIFdlYnNpdGU6IDxpbnAyOmxfRmllbGQgbmFtZT0iVXJsIi8+PGJyLz4NCjwvaW5wMjptX2lmPg0KPGlucDI6bV9pZiBjaGVjaz0ibF9GaWVsZCIgbmFtZT0iRGVzY3JpcHRpb24iPg0KRGVzY3JpcHRpb246IDxpbnAyOmxfRmllbGQgbmFtZT0iRGVzY3JpcHRpb24iLz48YnIvPg0KPC9pbnAyOm1faWY+DQo8YnIvPjxici8+DQoNCg== + + + TmV3IExpbmsgIGhhcyBiZWVuIFN1Ym1pdHRlZCBhbmQgUGVuZGluZyE= + TmV3IGxpbmsgaGFzIGJlZW4gc3VibWl0dGVkIGFuZCBpcyBwZW5kaW5nIGZvciBhZG1pbmlzdHJhdGl2ZSBhcHByb3ZhbC48YnIvPjxici8+DQoNCkxpbmsgTmFtZTogPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+PGJyLz4NCjxpbnAyOm1faWYgY2hlY2s9ImxfRmllbGQiIG5hbWU9IlVybCI+DQpMaW5rIFdlYnNpdGU6IDxpbnAyOmxfRmllbGQgbmFtZT0iVXJsIi8+PGJyLz4NCjwvaW5wMjptX2lmPg0KPGlucDI6bV9pZiBjaGVjaz0ibF9GaWVsZCIgbmFtZT0iRGVzY3JpcHRpb24iPg0KRGVzY3JpcHRpb246IDxpbnAyOmxfRmllbGQgbmFtZT0iRGVzY3JpcHRpb24iLz48YnIvPg0KPC9pbnAyOm1faWY+DQo8YnIvPjxici8+DQoNClBsZWFzZSBwcm9jZWVkIHRvIHRoZSBBZG1pbmlzdHJhdGl2ZSBDb25zb2xlIHRvIGFwcHJvdmUgb3IgZGVueSB0aGlzIGxpbms8YnIvPjwvYnI+ + + + WW91ciBMaW5rICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIC0gQXBwcm92ZWQh + WW91ciBMaW5rIGhhcyBiZWVuIEFwcHJvdmVkITxiciAvPg0KPGJyIC8+DQpMaW5rIE5hbWU6IDxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPjxiciAvPg0KPGJyIC8+DQpZb3UgY2FuIHZpZXcgaXQgaGVyZSA8YSBocmVmPSI8aW5wMjpsX0xpbmtMaW5rIHRlbXBsYXRlPSJfX2RlZmF1bHRfXyIvPiI+PGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+PC9hPg== + + + IlJlcXVlc3QgSW5mb3JtYXRpb24iIGZvcm0gc3VibWl0dGVk + RGVhciBCdXNpbmVzcyBPd25lciw8YnIgLz4NCjxiciAvPg0KJnF1b3Q7UmVxdWVzdCBJbmZvcm1hdGlvbiZxdW90OyBmb3JtIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgPGlucDI6bV9wYXJhbSBuYW1lPSJ0b19saW5rbmFtZSIvPjxiciAvPg0KPGJyIC8+DQo8aHIgbm9zaGFkZT0iIiB3aWR0aD0iMTAwJSIgLz4NCjxiciAvPg0KPHRhYmxlPg0KICAgIDx0Ym9keT4NCiAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkPkZ1bGwgbmFtZTo8L3RkPg0KICAgICAgICAgICAgPHRkPjxpbnAyOm1fcGFyYW0gbmFtZT0iZnJvbV9uYW1lIiAvPjwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZD5FLW1haWw6PC90ZD4NCiAgICAgICAgICAgIDx0ZD48YSBocmVmPSJtYWlsdG86PGlucDI6bV9wYXJhbSBuYW1lPSJmcm9tX2VtYWlsIiAvPiI+PGlucDI6bV9wYXJhbSBuYW1lPSJmcm9tX2VtYWlsIiAvPjwvYT48L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQ+U3ViamVjdDo8L3RkPg0KICAgICAgICAgICAgPHRkPjxpbnAyOm1fcGFyYW0gbmFtZT0iZnJvbV9zdWJqZWN0IiAvPjwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZD5RdWVzdGlvbnM6PC90ZD4NCiAgICAgICAgICAgIDx0ZD48aW5wMjptX3BhcmFtIG5hbWU9Im1lc3NhZ2UiLz4gPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICA8L3Rib2R5Pg0KPC90YWJsZT4NCjxiciAvPg0KPGhyIG5vc2hhZGU9IiIgd2lkdGg9IjEwMCUiIC8+DQo8YnIgLz4= + + + SW5mb3JtYXRpb24gUmVxdWVzdCBmb3IgIjxpbnAyOm1fcGFyYW0gbmFtZT0idG9fbGlua25hbWUiIC8+IiBzdWJtaXR0ZWQ= + RGVhciBBZG1pbmlzdHJhdG9yLDxici8+PGJyLz4NCg0KIlJlcXVlc3QgSW5mb3JtYXRpb24iIGZvcm0gaGFzIGJlZW4gc3VibWl0dGVkIGZvciAiPGlucDI6bV9wYXJhbSBuYW1lPSJ0b19saW5rbmFtZSIgLz4iPGJyLz48YnIvPg0KDQo8aHIgd2lkdGg9IjEwMCUiIG5vc2hhZGU+PGJyLz4NCg0KPHRhYmxlPg0KPHRyPg0KPHRkPkZ1bGwgbmFtZTo8L3RkPg0KPHRkPjxpbnAyOm1fcGFyYW0gbmFtZT0iZnJvbV9uYW1lIiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHI+DQo8dGQ+RS1tYWlsOjwvdGQ+DQo8dGQ+PGlucDI6bV9wYXJhbSBuYW1lPSJmcm9tX2VtYWlsIiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHI+DQo8dGQ+U3ViamVjdDo8L3RkPg0KPHRkPjxpbnAyOm1fcGFyYW0gbmFtZT0iZnJvbV9zdWJqZWN0IiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHI+DQo8dGQ+UXVlc3Rpb25zOjwvdGQ+DQo8dGQ+DQo8YmxvY2txdW90ZT4NCjxpbnAyOm1fcGFyYW0gbmFtZT0ibWVzc2FnZSIvPg0KPC9ibG9ja3F1b3RlPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPGJyPjxociB3aWR0aD0iMTAwJSIgbm9zaGFkZT48YnI+DQo= + + + WW91ciBMaW5rICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGhhcyBiZWVuIGRlbmllZA== + U29ycnksIGJ1dCBzdWJtaXR0ZWQgYnkgeW91IExpbmsgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPiIgaGFzIGJlZW4gZGVuaWVkPGJyPjxicj4NCg0KUGxlYXNlIGZlZWwgZnJlZSB0byBzdWJtaXQgYWdhaW4uPGJyPg== + + + TGluayBFbmhhbmNlbWVudCBSZWNlaXZlZCBhbmQgUGVuZGluZw== + RGVhciA8aW5wMjp1Li1pdGVtX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS4taXRlbV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sPGJyLz48YnIvPg0KDQpUaGFuayB5b3UgZm9yIHN1Ym1pdHRpbmcgbGluayBlbmhhbmNlbWVudCByZXF1ZXN0LiBZb3Ugd2lsbCBiZSBub3RpZmllZCBvbmNlIHlvdXIgbGluayBlbmhhbmNlbWVudCBpcyBwcm9jZXNzZWQu + + + TGluayBFbmhhbmNlbWVudCBzdWJtaXR0ZWQ= + QSB1c2VyIGhhcyBzdWJtaXR0ZWQgYSBsaW5rIGVuaGFuY2VtZW50IHJlcXVlc3QuPGJyLz48YnIvPg0KDQpQbGVhc2UgcHJvY2VlZCB0byBhZG1pbmlzdHJhdGl2ZSBjb25zb2xlIHRvIHJldmlldyBpdC4= + + + WW91ciBMaW5rIGVuaGFuY2VtZW50IGZvciA8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiIC8+IC0gQXBwcm92ZWQh + RGVhciA8aW5wMjp1Li1pdGVtX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS4taXRlbV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sPGJyLz48YnIvPg0KDQpZb3VyIHJlY2VudCBsaW5rIGVuaGFuY2VtZW50IHJlcXVlc3QgaGFzIGJlZW4gYXBwcm92ZWQuIFRoYW5rIHlvdSENCg== + + + TGluayBFbmhhbmNlbWVudCBpcyBBcHByb3ZlZA== + TGluayBlbmhhbmNlbWVudCBmb3IgPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IGFzIGJlZW4gYXBwcm92ZWQu + + + TGluayBFbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIC0gQ2FuY2VsZWQ= + RGVhciA8aW5wMjp1Li1pdGVtX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS4taXRlbV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sPGJyLz48YnIvPg0KDQpZb3VyIGxpbmsgZW5oYW5jZW1lbnQgZm9yICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiIC8+IiBvbiA8aW5wMjpjb25mX0NvbmZpZ1ZhbHVlIG5hbWU9IlNpdGVfTmFtZSIvPiBoYXMgYmVlbiBjYW5jZWxlZC4= + + + TGluayBFbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIC0gQ2FuY2VsZWQh + TGluayBFbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIGhhcyBiZWVuIGNhbmNlbGVkIQ== + + + TGluayBFbmhhbmNlbWVudCBmb3IgPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiAtIERlbmllZA== + RGVhciA8aW5wMjp1Li1pdGVtX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS4taXRlbV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sPGJyLz48YnIvPg0KDQpTb3JyeSwgYnV0IHlvdXIgcmVjZW50IGxpbmsgZW5oYW5jZW1lbnQgcmVxdWVzdCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIGhhcyBiZWVuIGRlbmllZC4= + + + TGluayBFbmhhbmNlbWVudCBoYXMgYmVlbiBEZW5pZWQ= + TGluayBlbmhhbmNlbWVudCBmb3IgPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiBoYXMgYmVlbiBkZW5pZWQu + + + TGluayBFbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIC0gRXhwaXJlZA== + RGVhciA8aW5wMjp1Li1pdGVtX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS4taXRlbV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sPGJyLz48YnIvPg0KDQpZb3VyIGVuaGFuY2VkIGxpbmsgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIGF0IDxpbnAyOmNvbmZfQ29uZmlnVmFsdWUgbmFtZT0iU2l0ZV9OYW1lIi8+IGhhcyBleHBpcmVkLjxici8+PGJyLz4NCg0KSWYgeW91IHdhbnQgdG8gcmVuZXcgeW91ciBlbmhhbmNlZCBsaW5rLCBwbGVhc2UgcmUtc3VibWl0IGxpbmsgZW5oYW5jZW1lbnQgcmVxdWVzdC4= + + + TGluayBFbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIC0gRXhwaXJlZA== + RW5oYW5jZWQgbGluayA8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiIC8+IGhhcyBleHBpcmVkLg== + + + TGluayBFbmhhbmNlbWVudCBSZW5ld2FsIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgLSBTdWJtaXR0ZWQ= + RGVhciA8aW5wMjp1Li1pdGVtX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS4taXRlbV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sDQoNClRoYW5rIHlvdSBmb3Igc3VibWl0dGluZyBsaW5rIGVuaGFuY2VtZW50IHJlbmV3YWwgcmVxdWVzdCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iLjxici8+PGJyLz4NCg0KWW91IHdpbGwgYmUgbm90aWZpZWQgc2hvcnRseSBvbmNlIHlvdSByZXF1ZXN0IGlzIHByb2Nlc3NlZC4NCg0K + + + TGluayBFbmhhbmNlbWVudCBSZW5ld2FsIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgLSBTdWJtaXR0ZWQ= + TGluayBlbmhhbmNlbWVudCByZW5ld2FsIHJlcXVlc3QgZm9yICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiIC8+IiBoYXMgYmVlbiBzdWJtaXR0ZWQgYnkgdXNlci48YnIvPjxici8+DQoNClBsZWFzZSBwcm9jZWVkIHRvIHRoZSBBZG1pbmlzdHJhdGl2ZSBDb25zb2xlIHRvIHJldmlldyBpdC4= + + + TGluayBFbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIC0gRXh0ZW5kZWQh + RGVhciA8aW5wMjp1Li1pdGVtX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS4taXRlbV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sPGJyLz48YnIvPg0KDQpZb3UgbGluayBlbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIG9uIDxpbnAyOmNvbmZfQ29uZmlnVmFsdWUgbmFtZT0iU2l0ZV9OYW1lIi8+IGhhcyBiZWVuIGV4dGVuZGVkLg== + + + TGluayBFbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIC0gRXh0ZW5kZWQh + TGluayBlbmhhbmNlbWVudCBoYXMgYmVlbiBleHRlbmRlZCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iLg== + + + TGluayBFbmhhbmNlbWVudCBSZW5ld2FsIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgLSBGYWlsZWQ= + TGluayBFbmhhbmNlbWVudCBSZW5ld2FsIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgaGFzIGZhaWxlZCBvbiBvbiA8aW5wMjpjb25mX0NvbmZpZ1ZhbHVlIG5hbWU9IlNpdGVfTmFtZSIvPi4= + + + TGluayBFbmhhbmNlbWVudCBSZW5ld2FsIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgLSBGYWlsZWQ= + TGluayBFbmhhbmNlbWVudCBSZW5ld2FsIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgaGFzIGZhaWxlZC4= + + + TGluayBFbmhhbmNlbWVudCBSZW5ld2FsIG5vdGljZSBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4i + RGVhciA8aW5wMjp1X0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sPGJyLz48YnIvPg0KDQpZb3VyIGxpbmsgZW5oYW5jZW1lbnQgZm9yICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiIC8+IiBvbiA8aW5wMjpjb25mX0NvbmZpZ1ZhbHVlIG5hbWU9IlNpdGVfTmFtZSIvPiBpcyBhYm91dCB0byBleHBpcmUuPGJyLz48YnIvPg0KDQpQbGVhc2UgbG9naW4gdG8geW91ciBhY2NvdW50IHRvIHJlbmV3IHlvdXIgbGluayBlbmhhbmNlbWVudC4= + + + TGluayBFbmhhbmNlbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIgLz4iIGlzIGFib3V0IHRvIEV4cGlyZSE= + VGhpcyBpcyBhbiBlbWFpbCBub3RpZmljYXRpb24gdGhhdCBMaW5rIEVuaGFuY2VtZW50IGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgaXMgYWJvdXQgdG8gRXhwaXJlLjxici8+PGJyLz4NCg== + + + WW91ciBMaW5rICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiIC8+IiBoYXMgYmVlbiBVcGRhdGVk + VGhhbmsgeW91IGZvciB1cGRhdGluZyB5b3VyIExpbmsgZGV0YWlscy4NCg0KWW91ciBMaW5rICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiIC8+IiBoYXMgYmVlbiBtb2RpZmllZA== + + + TGluayAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgaGFzIGJlZW4gTW9kaWZpZWQ= + TGluayAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgaGFzIGJlZW4gbW9kaWZpZWQgdG8gdGhlIHVzZXIuDQo= + + + WW91ciBNb2RpZmljYXRpb25zIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgYXBwcm92ZWQ= + WW91ciBNb2RpZmljYXRpb25zIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIiAvPiIgbGluayB3ZXJlIGFwcHJvdmVkLg== + + + WW91ciBNb2RpZmljYXRpb25zIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiAtIERlY2xpbmVk + WW91ciBtb2RpZmljYXRpb25zIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiBsaW5rIHdlcmUgZGVjbGluZWQu + + + TGluayBNb2RpZmljYXRpb25zIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiBwZW5kaW5n + VGhhbmsgeW91LDxicj48YnI+DQoNCllvdXIgbGluayBtb2RpZmljYXRpb25zIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiBhcmUgcGVuZGluZyBmb3IgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwu + + + TGluayBNb2RpZmljYXRpb25zIGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiBwZW5kaW5nIGFwcHJvdmFs + TW9kaWZpY2F0aW9ucyBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPiIgbGluayBhcmUgcGVuZGluZyBmb3IgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwu + + + Q2hlY2sgZm9yIFJlY2lwcm9jYWwvQmFjayBMaW5rIG9uICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGlzIEZhaWxlZA== + Q2hlY2sgZm9yIFJlY2lwcm9jYWwvQmFjayBsaW5rIGlzIEZhaWxlZCBmb3I6PGJyLz48YnIvPg0KDQpMaW5rIElkOiA8aW5wMjpsX0ZpZWxkIG5hbWU9IkxpbmtJZCIvPjxici8+DQpMaW5rIE5hbWU6IDxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPjxici8+DQpMaW5rIFdlYnNpdGU6IDxhIGhyZWY9IjxpbnAyOmxfRmllbGQgbmFtZT0iVXJsIi8+Ij48aW5wMjpsX0ZpZWxkIG5hbWU9IlVybCIvPjwvYT48YnIvPg0K + + + WW91ciBDb21tZW50IGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiBTdWJtaXR0ZWQ= + VGhhbmsgeW91LCB5b3VyIGNvbW1lbnQgZm9yICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSB3ZWJzaXRlLg== + + + TmV3IENvbW1lbnQgZm9yICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGxpbmsgc3VibWl0dGVk + TmV3IGNvbW1lbnQgZm9yICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGxpbmsgaGFzIGJlZW4gc3VibWl0dGVkLg== + + + WW91ciBDb21tZW50IGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiBsaW5rIGlzIHBlbmRpbmc= + VGhhbmsgeW91IGZvciBzdWJtaXR0aW5nIHlvdXIgY29tbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPiIuPGJyPjxicj4NCg0KQ3VycmVudGx5IGl0J3MgcGVuZGluZyBmb3IgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwgYW5kIHdpbGwgYmUgcHVibGlzaGVkIHNob3J0bHku + + + WC1NYWlsZXI6IEluLVBvcnRhbA== + WW91ciBDb21tZW50IGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiBsaW5rIGlzIHBlbmRpbmcgW2FkbWluXQ== + VGhhbmsgeW91IGZvciBzdWJtaXR0aW5nIHlvdXIgY29tbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPiIuPGJyPjxicj4NCg0KQ3VycmVudGx5IGl0J3MgcGVuZGluZyBmb3IgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwgYW5kIHdpbGwgYmUgcHVibGlzaGVkIHNob3J0bHku + + + WW91ciBDb21tZW50IGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiAtIFB1Ymxpc2hlZA== + VGhhbmsgeW91IGZvciBzdWJtaXR0aW5nIHlvdXIgY29tbWVudCBmb3IgIjxpbnAyOmxfRmllbGQgbmFtZT0iTmFtZSIvPiIuPGJyLz48YnIvPg0KDQpJdCdzIGFscmVhZHkgcHVibGlzaGVkIG9uIHRoZSB3ZWJzaXRlIQ== + + + WW91ciBDb21tZW50IGZvciAiPGlucDI6bF9GaWVsZCBuYW1lPSJOYW1lIi8+IiAtIERlY2xpbmVk + U29ycnksIGJ1dCB5b3VyIGNvbW1lbnQgZm9yICI8aW5wMjpsX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGxpbmsgaGFzIGJlZW4gZGVjbGluZWQu + + + TGluayBWYWxpZGF0aW9uIFJlc3VsdHMgKDxpbnAyOmxhbmcuY3VycmVudF9DdXJyZW50RGF0ZSBmb3JtYXQ9ImQtTS1ZIi8+KQ== + TGluayBWYWxpZGF0aW9uIENvbXBsZXRlZCBvbiA8aW5wMjpsYW5nLmN1cnJlbnRfQ3VycmVudERhdGUgZm9ybWF0PSJkLU0tWSIvPiBhdCA8aW5wMjpsYW5nLmN1cnJlbnRfQ3VycmVudERhdGUgZm9ybWF0PSJIOmk6cyIvPjxiciAvPjxiciAvPg0KDQo8aW5wMjpsaW5rLXZhbGlkYXRpb24uaW52YWxpZF9Jbml0TGlzdCBwZXJfcGFnZT0iLTEiLz4NCjxpbnAyOm1faWYgY2hlY2s9ImxpbmstdmFsaWRhdGlvbi5pbnZhbGlkX1RvdGFsUmVjb3JkcyI+DQoJVGhlZXNlIGxpbmtzIHdlcmUgbWFya2VkIGFzIGludmFsaWQgZHVyaW5nIHZhbGlkYXRpb24gcHJvY2Vzczo8YnIgLz4NCg0KCTxpbnAyOm1fRGVmaW5lRWxlbWVudCBuYW1lPSJsaW5rX2VsZW1lbnQiPg0KCQk8bGk+DQoJCQk8aW5wMjpGaWVsZCBuYW1lPSJMaW5rTmFtZSIvPiAoPGlucDI6Q2F0ZWdvcnlOYW1lLz4pDQoJCTwvbGk+DQoJPC9pbnAyOm1fRGVmaW5lRWxlbWVudD4NCg0KCTx1bD4NCgkJPGlucDI6bGluay12YWxpZGF0aW9uLmludmFsaWRfUHJpbnRMaXN0IHJlbmRlcl9hcz0ibGlua19lbGVtZW50Ii8+DQoJPC91bD4NCjxpbnAyOm1fZWxzZS8+DQoJQWxsIGxpbmtzIGFwcGVhciB0byBiZSB2YWxpZC4NCjwvaW5wMjptX2lmPg== + + + + \ No newline at end of file Property changes on: releases/5.2.1/install/english.lang ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.9 Added: svn:eol-style + LF Index: releases/5.2.1/install/prerequisites.php =================================================================== --- releases/5.2.1/install/prerequisites.php (revision 0) +++ releases/5.2.1/install/prerequisites.php (revision 16070) @@ -0,0 +1,81 @@ +_toolkit =& $instance; + } + + /** + * Checks minimal version, that could be upgradeable + * + * @param Array $versions + * @param string $mode when called mode {install, upgrade, standalone) + * @return Array + */ + function CheckPrerequisites($versions, $mode) + { + $errors = Array (); + + if ($mode == 'standalone') { + if (!$this->Application->isModuleEnabled('In-Portal')) { + $errors[] = 'Please install or enable "In-Portal" module first'; + } + } + + if ($mode == 'upgrade') { + $sql = 'SELECT Version + FROM ' . TABLE_PREFIX . 'Modules + WHERE Name = "In-Portal"'; + $inportal_version = $this->Conn->GetOne($sql); + + if ($inportal_version === false) { + // only, when In-Portal was installed + return $errors; + } + + $min_version = '4.3.1'; + + $current_version = $this->_toolkit->ConvertModuleVersion($inportal_version); + $needed_version = $this->_toolkit->ConvertModuleVersion($min_version); + if ($current_version < $needed_version) { + $errors[] = 'Please upgrade "In-Portal" to version ' . $min_version; + } + } + + return $errors; + } + } \ No newline at end of file Property changes on: releases/5.2.1/install/prerequisites.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.3 Added: svn:keywords + Id Added: svn:eol-style + LF Index: releases/5.2.1/install/.htaccess =================================================================== --- releases/5.2.1/install/.htaccess (revision 0) +++ releases/5.2.1/install/.htaccess (revision 16070) @@ -0,0 +1 @@ +deny from all \ No newline at end of file Property changes on: releases/5.2.1/install/.htaccess ___________________________________________________________________ Added: svn:eol-style + LF Index: releases/5.2.1/install/remove_schema.sql =================================================================== --- releases/5.2.1/install/remove_schema.sql (revision 0) +++ releases/5.2.1/install/remove_schema.sql (revision 16070) @@ -0,0 +1,6 @@ +DROP TABLE Link; +DROP TABLE LinkValidation; +DROP TABLE Listings; +DROP TABLE ListingTypes; +DROP TABLE LinkCustomData; +DROP TABLE LinkVisits; \ No newline at end of file Property changes on: releases/5.2.1/install/remove_schema.sql ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.1 Added: svn:eol-style + LF Index: releases/5.2.1/install/img/.htaccess =================================================================== --- releases/5.2.1/install/img/.htaccess (revision 0) +++ releases/5.2.1/install/img/.htaccess (revision 16070) @@ -0,0 +1 @@ +allow from all \ No newline at end of file Property changes on: releases/5.2.1/install/img/.htaccess ___________________________________________________________________ Added: svn:eol-style + LF Index: releases/5.2.1/install/img/icon_directory_management.gif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: releases/5.2.1/install/img/icon_directory_management.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: releases/5.2.1/install/install_data.sql =================================================================== --- releases/5.2.1/install/install_data.sql (revision 0) +++ releases/5.2.1/install/install_data.sql (revision 16070) @@ -0,0 +1,226 @@ +# Section "in-link:configuration_output": +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_SortField', 'Name', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_sortfield_prompt', 'select', '', 'Name=la_Link_Name||Description=la_Link_Description||Url=la_Link_URL||CreatedOn=la_opt_CreatedOn||Hits=la_Link_Hits||CachedRating=la_opt_Rating||SELECT Prompt AS OptionName, CONCAT("cust_", FieldName) AS OptionValue FROM CustomFields WHERE (Type = 4) AND (IsSystem = 0)', 10.01, 1, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_SortOrder', 'asc', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_sortfield_prompt', 'select', '', 'asc=la_common_ascending||desc=la_common_descending', 10.01, 2, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_SortField2', 'Description', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_sortfield2_prompt', 'select', '', 'Name=la_Link_Name||Description=la_Link_Description||Url=la_Link_URL||CreatedOn=la_opt_CreatedOn||Hits=la_Link_Hits||CachedRating=la_opt_Rating||SELECT Prompt AS OptionName, CONCAT("cust_", FieldName) AS OptionValue FROM CustomFields WHERE (Type = 4) AND (IsSystem = 0)', 10.02, 1, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_SortOrder2', 'desc', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_sortfield2_prompt', 'select', '', 'asc=la_common_ascending||desc=la_common_descending', 10.02, 2, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Perpage_Links', '10', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_perpage_prompt', 'text', '', '', 10.03, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Perpage_Links_Short', '3', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_perpage_short_prompt', 'text', '', '', 10.04, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_NewDays', '100', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_newdays_prompt', 'text', '', '', 10.05, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_MinPopRating', '5', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_fld_Link_MinPopRating', 'text', '', '', 10.06, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_MinPopVotes', '20', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_fld_Link_MinPopVotes', 'text', '', '', 10.07, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_MaxHotNumber', '5', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_fld_Link_MaxHotNumber', 'text', '', '', 10.08, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_EnhancedLinks', '0', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_EnhancedLinks', 'checkbox', '', '', 10.09, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_AllowFreeListings', '1', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_AllowFreeListings', 'checkbox', '', '', 10.1, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_ShowPick', '1', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_link_editorspick_prompt', 'checkbox', '', '', 10.11, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'link_ReviewDelay_Value', '1', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_prompt_DupReviews', 'text', '', 'style="width: 50px;"', 10.12, 1, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'link_ReviewDelay_Interval', '2419200', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_prompt_DupReviews', 'select', '', '1=la_opt_Sec||60=la_opt_Min||3600=la_opt_Hour||86400=la_opt_Day||604800=la_opt_Week||2419200=la_opt_Month||29030400=la_opt_Year', 10.12, 2, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'link_RatingDelay_Value', '1', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_prompt_DupRating', 'text', '', 'style="width: 50px;"', 10.13, 1, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'link_RatingDelay_Interval', '2419200', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_prompt_DupRating', 'select', '', '1=la_opt_Sec||60=la_opt_Min||3600=la_opt_Hour||86400=la_opt_Day||604800=la_opt_Week||2419200=la_opt_Month||29030400=la_opt_Year', 10.13, 2, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_MaxCategories', '3', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_fld_MaxCategories', 'text', NULL, NULL, 10.14, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_EnableGoogleMaps', '0', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_fld_LinkEnableGoogleMaps', 'checkbox', NULL, NULL, 10.15, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_EnableLinkContactForm', '1', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_config_EnableLinkContactForm', 'checkbox', NULL, NULL, 10.16, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'ReciprocalLinkChecking', '0', 'In-Link', 'in-link:configuration_output', 'la_Text_Links', 'la_config_ReciprocalLinkChecking', 'checkbox', NULL, NULL, 10.17, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_ReviewsSort', 'CreatedOn', 'In-Link', 'in-link:configuration_output', 'la_Text_Reviews', 'la_link_sortreviews_prompt', 'select', '', 'ReviewText=la_opt_CommentText||CreatedOn=la_opt_CreatedOn', 20.01, 1, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_ReviewsOrder', 'desc', 'In-Link', 'in-link:configuration_output', 'la_Text_Reviews', 'la_link_sortreviews_prompt', 'select', '', 'asc=la_common_Ascending||desc=la_common_Descending', 20.01, 2, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_ReviewsSort2', 'ReviewText', 'In-Link', 'in-link:configuration_output', 'la_Text_Reviews', 'la_link_sortreviews2_prompt', 'select', '', 'ReviewText=la_opt_CommentText||CreatedOn=la_opt_CreatedOn', 20.02, 1, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Link_ReviewsOrder2', 'asc', 'In-Link', 'in-link:configuration_output', 'la_Text_Reviews', 'la_link_sortreviews2_prompt', 'select', '', 'asc=la_common_Ascending||desc=la_common_Descending', 20.02, 2, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Perpage_LinkReviews', '10', 'In-Link', 'in-link:configuration_output', 'la_Text_Reviews', 'la_review_perpage_prompt', 'text', NULL, NULL, 20.03, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Perpage_LinkReviews_Short', '3', 'In-Link', 'in-link:configuration_output', 'la_Text_Reviews', 'la_review_perpage_short_prompt', 'text', NULL, NULL, 20.04, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_CategoryTemplate', '/in-link/designs/section', 'In-Link', 'in-link:configuration_output', 'la_section_Templates', 'la_fld_CategoryTemplate', 'text', '', '', 30.01, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_ItemTemplate', 'in-link/links/link_detail', 'In-Link', 'in-link:configuration_output', 'la_section_Templates', 'la_fld_ItemTemplate', 'text', '', '', 30.02, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_MaxImageCount', '5', 'In-Link', 'in-link:configuration_output', 'la_section_ImageSettings', 'la_config_MaxImageCount', 'text', '', '', 40.01, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_ThumbnailImageWidth', '120', 'In-Link', 'in-link:configuration_output', 'la_section_ImageSettings', 'la_config_ThumbnailImageWidth', 'text', '', '', 40.02, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_ThumbnailImageHeight', '120', 'In-Link', 'in-link:configuration_output', 'la_section_ImageSettings', 'la_config_ThumbnailImageHeight', 'text', '', '', 40.03, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_FullImageWidth', '450', 'In-Link', 'in-link:configuration_output', 'la_section_ImageSettings', 'la_config_FullImageWidth', 'text', '', '', 40.04, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'l_FullImageHeight', '450', 'In-Link', 'in-link:configuration_output', 'la_section_ImageSettings', 'la_config_FullImageHeight', 'text', '', '', 40.05, 0, 0, NULL); + +# Section "in-link:configuration_search": +INSERT INTO SystemSettings VALUES(DEFAULT, 'SearchRel_Keyword_links', '90', 'In-Link', 'in-link:configuration_search', 'la_config_SearchRel_DefaultKeyword', 'la_text_keyword', 'text', NULL, NULL, 0, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'SearchRel_Pop_links', '5', 'In-Link', 'in-link:configuration_search', 'la_config_DefaultPop', 'la_text_popularity', 'text', NULL, NULL, 0, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'SearchRel_Rating_links', '5', 'In-Link', 'in-link:configuration_search', 'la_config_DefaultRating', 'la_prompt_Rating', 'text', NULL, NULL, 0, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'SearchRel_Increase_links', '30', 'In-Link', 'in-link:configuration_search', 'la_config_DefaultIncreaseImportance', 'la_text_increase_importance', 'text', NULL, NULL, 0, 0, 1, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Search_ShowMultiple_links', '0', 'In-Link', 'in-link:configuration_search', 'la_config_ShowMultiple', 'la_Text_MultipleShow', 'text', NULL, NULL, 0, 0, 1, NULL); + +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ADD', NULL, 1, 1, 'In-Link', 'Add Link', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ADD', NULL, 1, 0, 'In-Link', 'Add Link', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ADD.PENDING', NULL, 1, 0, 'In-Link', 'Add Pending Link', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ADD.PENDING', NULL, 1, 1, 'In-Link', 'Add Pending Link', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.MODIFY', NULL, 1, 1, 'In-Link', 'Modify Link', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.MODIFY', NULL, 1, 0, 'In-Link', 'Modify Link', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.MODIFY.PENDING', NULL, 1, 0, 'In-Link', 'Link Modification Pending', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.MODIFY.PENDING', NULL, 1, 1, 'In-Link', 'Link Modification Pending', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.MODIFY.APPROVE', NULL, 1, 0, 'In-Link', 'Approve Link Modification', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.MODIFY.DENY', NULL, 1, 0, 'In-Link', 'Decline link modification', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.APPROVE', NULL, 1, 0, 'In-Link', 'Approve Pending Link', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.DENY', NULL, 1, 0, 'In-Link', 'Deny Link', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.REVIEW.ADD', NULL, 1, 1, 'In-Link', 'Link Comment Added', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.REVIEW.ADD', NULL, 1, 0, 'In-Link', 'Link Comment Added', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.REVIEW.ADD.PENDING', NULL, 1, 0, 'In-Link', 'Link Comment Pending', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.REVIEW.ADD.PENDING', NULL, 1, 0, 'In-Link', 'Link Comment Pending', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.REVIEW.APPROVE', NULL, 1, 0, 'In-Link', 'Link Comment Approved', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.REVIEW.DENY', NULL, 1, 0, 'In-Link', 'Link Comment Declined', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE', NULL, 1, 0, 'In-Link', 'Link enhancement submitted', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE', NULL, 1, 0, 'In-Link', 'Link enhancement submitted', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.APPROVE', NULL, 0, 0, 'In-Link', 'Link enhancement approved', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.APPROVE', NULL, 1, 0, 'In-Link', 'Link enhancement approved', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.DENY', NULL, 0, 0, 'In-Link', 'Link enhancement denied', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.DENY', NULL, 1, 0, 'In-Link', 'Link enhancement denied', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.EXPIRE', NULL, 1, 0, 'In-Link', 'Link enhancement expired', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.EXPIRE', NULL, 1, 0, 'In-Link', 'Link enhancement expired', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.EXTEND', NULL, 1, 0, 'In-Link', 'Link enhancement renewal submitted', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.EXTEND', NULL, 1, 0, 'In-Link', 'Link enhancement renewal submitted', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.RENEW', NULL, 0, 0, 'In-Link', 'Link enhancement extended', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.RENEW', NULL, 1, 0, 'In-Link', 'Link enhancement extended', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.RENEW.FAILED', NULL, 1, 0, 'In-Link', 'Link enhancement renewal failed', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.RENEW.FAILED', NULL, 1, 0, 'In-Link', 'Link enhancement renewal failed', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.CANCEL', NULL, 1, 0, 'In-Link', 'Link enhancement cancelled', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.CANCEL', NULL, 1, 0, 'In-Link', 'Link enhancement cancelled', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.RENEWAL.NOTICE', NULL, 1, 0, 'In-Link', 'Link enhancement is about to expire', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.ENHANCE.RENEWAL.NOTICE', NULL, 1, 0, 'In-Link', 'Link enhancement is about to expire', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.CONTACTFORM', NULL, 1, 0, 'In-Link', 'Link Contact Form', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.CONTACTFORM', NULL, 1, 0, 'In-Link', 'Link Contact Form', 0, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.RECIPROCAL.CHECK.FAILED', NULL, 1, 0, 'In-Link', 'Reciprocal Check Failed', 1, 1, 1); +INSERT INTO EmailTemplates (TemplateId, TemplateName, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'LINK.VALIDATION.RESULTS', NULL, 1, 0, 'In-Link', 'Link Validation Results', 1, 1, 1); + +INSERT INTO CustomFields VALUES (DEFAULT, 4, 'LinkAddress', 'lu_fld_LinkAddress', 0, 'la_section_BusinessLocation', 'la_fld_LinkAddress', 'text', 'size="40"', '', 1, 1, 0, 0); +INSERT INTO CustomFields VALUES (DEFAULT, 4, 'LinkCity', 'lu_fld_LinkCity', 0, 'la_section_BusinessLocation', 'la_fld_LinkCity', 'text', 'size="40"', '', 2, 1, 0, 0); +INSERT INTO CustomFields VALUES (DEFAULT, 4, 'LinkZipCode', 'lu_fld_LinkZipCode', 0, 'la_section_BusinessLocation', 'la_fld_LinkZipCode', 'text', NULL, '', 4, 1, 0, 0); +INSERT INTO CustomFields VALUES (DEFAULT, 4, 'LinkState', 'lu_fld_LinkState', 0, 'la_section_BusinessLocation', 'la_fld_LinkState', 'select', '=+||SELECT IsoCode AS OptionValue, l%3$s_Name AS OptionName FROM CountryStates WHERE Type = 2 ORDER BY StateCountryId DESC, IsoCode ASC', '', 3, 1, 0, 0); +INSERT INTO CustomFields VALUES (DEFAULT, 4, 'LinkCountry', 'lu_fld_LinkCountry', 0, 'la_section_BusinessLocation', 'la_fld_LinkCountry', 'select', '=+||SELECT IsoCode AS OptionValue, l%3$s_Name AS OptionName FROM CountryStates WHERE Type = 1 ORDER BY IsoCode ASC', '', 5, 1, 0, 0); +INSERT INTO CustomFields VALUES (DEFAULT, 4, 'LinkPhone', 'lu_fld_LinkPhone', 0, 'la_section_BusinessLocation', 'la_fld_LinkPhone', 'text', NULL, '', 6, 1, 0, 0); + +INSERT INTO ItemTypes VALUES (4, 'In-Link', 'l', 'Link', 'Name', 'CreatedById', 'Hits', 'CachedRating', 'la_ItemTab_Links', 1, 'in-link/admin/addlink.php', 'clsLink', 'Link'); + +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.ADD', 'la_PermName_Link.Add_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.VIEW', 'la_PermName_Link.View_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.ADD.PENDING', 'la_PermName_Link.Add.Pending_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.MODIFY', 'la_PermName_Link.Modify_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.DELETE', 'la_PermName_Link.Delete_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.RATE', 'la_PermName_Link.Rate_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.REVIEW', 'la_PermName_Link.Review_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.REVIEW.PENDING', 'la_PermName_Link.Review_Pending_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.MODIFY.PENDING', 'la_PermName_Link.Modify.Pending_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.OWNER.MODIFY', 'la_PermName_Link.Owner.Modify_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.OWNER.MODIFY.PENDING', 'la_PermName_Link.Owner.Modify.Pending_desc', 'In-Link', 1); +INSERT INTO CategoryPermissionsConfig VALUES (DEFAULT, 'LINK.OWNER.DELETE', 'la_PermName_Link.Owner.Delete_desc', 'In-Link', 1); + +INSERT INTO SearchConfig VALUES ('Link', 'OrgId', 0, 0, 'lu_fielddesc_link_orgid', 'lc_field_orgid', 'In-Link', 'la_text_link', 19, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'NewItem', 0, 1, 'lu_fielddesc_link_newitem', 'lc_field_newitem', 'In-Link', 'la_text_link', 18, DEFAULT, 0, 'boolean', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'PopItem', 0, 1, 'lu_fielddesc_link_popitem', 'lc_field_popitem', 'In-Link', 'la_text_link', 17, DEFAULT, 0, 'boolean', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'HotItem', 0, 1, 'lu_fielddesc_link_hotitem', 'lc_field_hotitem', 'In-Link', 'la_text_link', 16, DEFAULT, 0, 'boolean', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'ResourceId', 0, 1, 'lu_fielddesc_link_resourceid', 'lc_field_resourceid', 'In-Link', 'la_text_link', 15, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'EditorsPick', 0, 1, 'lu_fielddesc_link_editorspick', 'lc_field_EditorsPick', 'In-Link', 'la_text_link', 14, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'Status', 0, 0, 'lu_fielddesc_link_status', 'lc_field_status', 'In-Link', 'la_text_link', 13, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'Priority', 0, 0, 'lu_fielddesc_link_priority', 'lc_field_priority', 'In-Link', 'la_text_link', 12, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'ModifiedById', 0, 0, 'lu_fielddesc_link_modifiedbyid', 'lc_field_modifiedbyid', 'In-Link', 'la_text_link', 11, DEFAULT, 0, 'text', 'Users.Username', '{ForeignTable}.PortalUserId={LocalTable}.ModifiedById', NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'CreatedById', 0, 0, 'lu_fielddesc_link_createdbyid', 'lc_field_createdbyid', 'In-Link', 'la_text_link', 10, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'CachedReviewsQty', 0, 0, 'lu_fielddesc_link_cachedreviewsqty', 'lc_field_cachedreviewsqty', 'In-Link', 'la_text_link', 9, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'CachedVotesQty', 0, 0, 'lu_fielddesc_link_cachedvotesqty', 'lc_field_cachedvotesqty', 'In-Link', 'la_text_link', 8, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'LinkId', 0, 1, 'lu_fielddesc_link_linkid', 'lc_field_linkid', 'In-Link', 'la_text_link', 0, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'Name', 1, 1, 'lu_fielddesc_link_name', 'lc_field_name', 'In-Link', 'la_text_link', 1, DEFAULT, 1, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'Description', 1, 1, 'lu_fielddesc_link_description', 'lc_field_description', 'In-Link', 'la_text_link', 2, DEFAULT, 1, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'Url', 1, 1, 'lu_fielddesc_link_url', 'lc_field_url', 'In-Link', 'la_text_link', 3, DEFAULT, 2, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'CreatedOn', 0, 1, 'lu_fielddesc_link_createdon', 'lc_field_createdon', 'In-Link', 'la_text_link', 4, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'Modified', 0, 1, 'lu_fielddesc_link_modified', 'lc_field_modified', 'In-Link', 'la_text_link', 5, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'Hits', 0, 1, 'lu_fielddesc_link_hits', 'lc_field_hits', 'In-Link', 'la_text_link', 6, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('Link', 'CachedRating', 0, 0, 'lu_fielddesc_link_cachedrating', 'lc_field_cachedrating', 'In-Link', 'la_text_link', 7, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('CustomFields', 'LinkAddress', 1, 1, 'la_fld_LinkAddress', 'lu_fld_LinkAddress', 'In-Link', 'la_section_BusinessLocation', 1, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('CustomFields', 'LinkCity', 1, 1, 'la_fld_LinkCity', 'lu_fld_LinkCity', 'In-Link', 'la_section_BusinessLocation', 2, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('CustomFields', 'LinkState', 1, 1, 'la_fld_LinkState', 'lu_fld_LinkState', 'In-Link', 'la_section_BusinessLocation', 3, DEFAULT, 0, 'select', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('CustomFields', 'LinkZipCode', 1, 1, 'la_fld_LinkZipCode', 'lu_fld_LinkZipCode', 'In-Link', 'la_section_BusinessLocation', 4, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('CustomFields', 'LinkCountry', 1, 1, 'la_fld_LinkCountry', 'lu_fld_LinkCountry', 'In-Link', 'la_section_BusinessLocation', 5, DEFAULT, 0, 'select', NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO SearchConfig VALUES ('CustomFields', 'LinkPhone', 1, 1, 'la_fld_LinkPhone', 'lu_fld_LinkPhone', 'In-Link', 'la_section_BusinessLocation', 6, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) as LinkCount FROM <%prefix%>Link WHERE Status=1', NULL, 'la_prompt_ActiveLinks', 0, 1); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) AS TotalLinks FROM <%prefix%>Link', NULL, 'la_prompt_TotalLinks', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) AS ActiveLinks FROM <%prefix%>Link WHERE Status = 1', NULL, 'la_prompt_ActiveLinks', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) AS PendingLinks FROM <%prefix%>Link WHERE Status = 2', NULL, 'la_prompt_PendingLinks', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) AS DisabledLinks FROM <%prefix%>Link WHERE Status = 0', NULL, 'la_prompt_DisabledLinks', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) AS NewLinks FROM <%prefix%>Link WHERE (NewItem = 1) OR ( (UNIX_TIMESTAMP() - CreatedOn) <= <%m:config name="Link_NewDays"%>*86400 AND (NewItem = 2) )', NULL, 'la_prompt_NewLinks', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) FROM <%prefix%>Link WHERE EditorsPick = 1', NULL, 'la_prompt_EditorsPickLinks', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) AS HotLinks FROM <%prefix%>Link WHERE (HotItem = 1) OR (Hits >= <%m:config name="Link_MaxHotNumber"%> AND (HotItem = 2) )', NULL, 'la_prompt_HotLinks', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) AS PopularLinks FROM <%prefix%>Link WHERE (PopItem = 1) OR ( (CachedRating >= <%link:hit_count type="top"%>) AND <%link:hit_count type="top"%> AND (PopItem = 2) )', NULL, 'la_prompt_PopularLinks', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT <%m:post_format field="AVG(CachedRating)" type="currency" precision="2"%> FROM <%prefix%>Link WHERE CachedRating > 0', NULL, 'la_prompt_LinksAverageRating', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT MAX(Hits) AS MaxLinksHits FROM <%prefix%>Link', NULL, 'la_prompt_MaxLinksHits', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT MAX(CachedVotesQty) AS MaxLinksVotes FROM <%prefix%>Link', NULL, 'la_prompt_MaxLinksVotes', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT <%m:post_format field="MAX(CreatedOn)" type="date"%> FROM <%prefix%>Link', NULL, 'la_prompt_NewestLinkDate', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT <%m:post_format field="MAX(Modified)" type="date"%> FROM <%prefix%>Link', NULL, 'la_prompt_LastLinkUpdate', 0, 2); +INSERT INTO StatItem VALUES (DEFAULT, 'In-Link', 'SELECT COUNT(*) FROM <%prefix%>CatalogReviews WHERE Module = \'<%modules:get_current%>\'', NULL, 'la_prompt_LinkReviews', 0, 2); + +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.VIEW', 14, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'FAVORITES', 12, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.VIEW', 12, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.ADD.PENDING', 12, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.RATE', 12, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.REVIEW', 12, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.OWNER.MODIFY', 12, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.OWNER.MODIFY.PENDING', 12, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'FAVORITES', 13, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.ADD', 13, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.VIEW', 13, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.RATE', 13, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.REVIEW', 13, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.OWNER.MODIFY', 13, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.OWNER.MODIFY.PENDING', 13, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.OWNER.DELETE', 13, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'FAVORITES', 11, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.ADD', 11, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.VIEW', 11, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.MODIFY', 11, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.DELETE', 11, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.RATE', 11, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.REVIEW', 11, 1, 0, {LinkCatId}); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.ADD', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.VIEW', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.ADD.PENDING', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.MODIFY', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.DELETE', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.RATE', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.REVIEW', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.REVIEW.PENDING', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.MODIFY.PENDING', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.OWNER.MODIFY', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.OWNER.MODIFY.PENDING', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'LINK.OWNER.DELETE', 15, 0, 0, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:links.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:setting_folder.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_output.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_output.add', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_output.edit', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_search.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_search.edit', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_custom.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_custom.add', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_custom.edit', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:configuration_custom.delete', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:duplicate_checker.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:duplicate_checker.add', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:duplicate_checker.edit', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:duplicate_checker.delete', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:validation_list.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:validation_list.add', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:validation_list.edit', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:paid_listings.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:paid_listings.add', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:paid_listings.edit', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:paid_listings.delete', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:paid_listings.advanced:approve', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:paid_listings.advanced:decline', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:listing_types.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:listing_types.add', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:listing_types.edit', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:listing_types.delete', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:link_validation.view', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:link_validation.advanced:continue', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:link_validation.advanced:restart', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:link_validation.advanced:validate', 11, 1, 1, 0); +INSERT INTO Permissions VALUES (DEFAULT, 'in-link:link_validation.advanced:reset', 11, 1, 1, 0); + +INSERT INTO ImportScripts VALUES (DEFAULT, 'Links from CSV file [In-Link]', '', 'l', 'In-Link', '', 'CSV', '1'); + +INSERT INTO CustomFields VALUES (DEFAULT, 1, 'l_ItemTemplate', 'la_fld_cust_l_ItemTemplate ', 0, 'la_title_SystemCF', 'la_fld_cust_l_ItemTemplate ', 'text', NULL, '', 0, 0, 1, 0); + +INSERT INTO Counters VALUES (DEFAULT, 'linkhits_count', 'SELECT ROUND(SUM(Hits)) FROM <%PREFIX%>Link', NULL, NULL, '300', '0', '|Link|'); + +INSERT INTO Modules VALUES ('In-Link', 'modules/in-link/', 'Intechnic\\InPortal\\Modules\\InLink', 'l', DEFAULT, 1, 1, 'in-link/', 2, NULL, NULL); Property changes on: releases/5.2.1/install/install_data.sql ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.12 Added: svn:eol-style + LF Index: releases/5.2.1/install.php =================================================================== --- releases/5.2.1/install.php (revision 0) +++ releases/5.2.1/install.php (revision 16070) @@ -0,0 +1,58 @@ +toolkit; + /* @var $toolkit kInstallToolkit */ +} + +$application =& kApplication::Instance(); +$application->Init(); + +if ( $application->RecallVar('user_id') != USER_ROOT ) { + die('restricted access!'); +} + +$category =& $toolkit->createModuleCategory('Directory', 'Link Directory', '#in-link/section_design#', 'in-link/img/menu_links.gif'); + +$toolkit->RunSQL('/' . $module_folder . '/install/install_schema.sql'); +$toolkit->RunSQL('/' . $module_folder . '/install/install_data.sql', '{LinkCatId}', $category->GetID()); +$toolkit->ImportLanguage('/' . $module_folder . '/install/english'); + +$toolkit->SetModuleRootCategory(basename($module_folder), $category->GetID()); + +$toolkit->linkCustomFields(basename($module_folder), 'l', 4); // to create Custom Fields for Links +$toolkit->linkCustomFields('KERNEL', 'c', 1); // to create ItemTemplate custom field +$toolkit->setModuleItemTemplate($category, 'l', '#in-link/item_design#'); + +$toolkit->finalizeModuleInstall($module_folder, true); Property changes on: releases/5.2.1/install.php ___________________________________________________________________ Added: cvs2svn:cvs-rev + 1.1.2.2 Added: svn:keywords + Id Added: svn:eol-style + LF Property changes on: releases/5.2.1 ___________________________________________________________________ Added: tsvn:autoprops + *.php = svn:eol-style=LF;svn:keywords=Id *.tpl = svn:eol-style=LF *.sql = svn:eol-style=LF *.lang = svn:eol-style=LF *.sh = svn:eol-style=LF;svn:executable *.txt = svn:eol-style=LF *.html = svn:eol-style=LF *.htm = svn:eol-style=LF *.css = svn:eol-style=LF *.js = svn:eol-style=LF *.xml = svn:eol-style=LF .htaccess = svn:eol-style=LF .smsignore = svn:eol-style=LF COPYRIGHT = svn:eol-style=LF CREDITS = svn:eol-style=LF INSTALL = svn:eol-style=LF LICENSE = svn:eol-style=LF LICENSES = svn:eol-style=LF README = svn:eol-style=LF Added: bugtraq:url + http://tracker.in-portal.org/view.php?id=%BUGID% Added: bugtraq:logregex + (?:[Bb]ugs?|[Ii]ssues?|[Rr]eports?|[Ff]ixe?s?|[Rr]esolves?)+\s+(?:#?(?:\d+)[,\.\s]*)+ (\d+) Added: bugtraq:warnifnoissue + false Added: svn:mergeinfo Merged /modules/in-link/releases/5.0.4:r13719-13745 Merged /modules/in-link/releases/5.1.3:r14549-14582 Merged /in-link/releases/5.0.1:r12618-12654 Merged /modules/in-link/branches/5.0.x:r12746-13718 Merged /modules/in-link/branches/5.1.x:r13842-14548 Merged /in-link/branches/5.0.x:r12118-12745 Merged /modules/in-link/releases/5.0.2:r13075-13094 Merged /modules/in-link/releases/5.1.1:r14073-14089 Merged /modules/in-link/releases/5.0.3:r13507-13549 Merged /modules/in-link/releases/5.1.2:r14309-14569