Example #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $output->writeln('<info>Clearing tracker...</info>');
     $trackerId = $input->getArgument('trackerId');
     $tracker = \Tracker_Definition::get($trackerId);
     if (!$tracker) {
         throw new \Exception('Tracker Clear: Tracker not found');
     }
     $perms = \Perms::get('tracker', $trackerId);
     if (!$perms->admin_trackers) {
         throw new \Exception('Tracker Clear: Admin permission required');
     }
     $confirm = $input->getOption('confirm');
     $utilities = new \Services_Tracker_Utilities();
     if ($confirm) {
         $utilities->clearTracker($trackerId);
         $output->writeln('<info>Tracker clear done</info>');
     } else {
         $name = $tracker->getConfiguration('name');
         $output->writeln("<info>Use the --confirm option to proceed with the clear operation.</info>");
         $output->writeln("<info>  There is NO undo and no notifications will be sent.</info>");
         $output->writeln("<info>  All items in tracker #{$trackerId} \"{$name}\" will be deleted.</info>");
     }
     return 0;
 }
Example #2
0
function wikiplugin_insert_rewrite($data, $params, $context)
{
    $tikilib = TikiLib::lib('tiki');
    $trackerIds = $tikilib->get_preference('tracker_insert_allowed', array(), true);
    foreach ($trackerIds as $trackerId) {
        $utilities = new Services_Tracker_Utilities();
        $item = Tracker_Item::newItem($trackerId);
        if (!$item->canModify()) {
            continue;
        }
        $definition = $item->getDefinition();
        if (!$definition->canInsert(array_keys($params))) {
            continue;
        }
        $available = array();
        foreach ($params as $key => $value) {
            if ($item->canModifyField($key)) {
                $available[$key] = $value;
            }
        }
        $id = $utilities->insertItem($definition, array('status' => 'o', 'fields' => $available));
        if (false !== $id) {
            $relationlib = TikiLib::lib('relation');
            $relationlib->add_relation('tiki.source.creator', 'trackeritem', $id, $context['type'], $context['itemId']);
            return "{objectlink type=trackeritem id={$id}}";
        }
    }
    return false;
}
Example #3
0
 function execute(JitFilter $data)
 {
     $object_id = $data->object_id->int();
     $field = $data->field->word();
     $value = $data->value->text();
     $trklib = TikiLib::lib('trk');
     $info = $trklib->get_item_info($object_id);
     $definition = Tracker_Definition::get($info['trackerId']);
     $utilities = new Services_Tracker_Utilities();
     $utilities->updateItem($definition, array('itemId' => $object_id, 'status' => $info['status'], 'fields' => array($field => $value)));
     return true;
 }
Example #4
0
 function action_import($input)
 {
     if (!Perms::get()->admin_trackers) {
         throw new Services_Exception_Denied(tr('Reserved for tracker administrators'));
     }
     unset($success);
     $confirm = $input->confirm->int();
     if ($confirm) {
         $raw = $input->raw->none();
         $preserve = $input->preserve->int();
         $data = TikiLib::lib('tiki')->read_raw($raw);
         if (!$data || !isset($data['tracker'])) {
             throw new Services_Exception(tr('Invalid data provided'), 400);
         }
         $data = $data['tracker'];
         $trackerId = 0;
         if ($preserve) {
             $trackerId = (int) $data['trackerId'];
         }
         unset($data['trackerId']);
         $trackerId = $this->utilities->updateTracker($trackerId, $data);
         $success = 1;
         return array('trackerId' => $trackerId, 'name' => $data['name'], 'success' => $success);
     }
     return array('title' => tr('Import Tracker Structure'), 'modal' => $input->modal->int());
 }
Example #5
0
 function write(\Tracker\Tabular\Source\SourceInterface $source)
 {
     $schema = $source->getSchema();
     $definition = $schema->getDefinition();
     $columns = $schema->getColumns();
     $utilities = new \Services_Tracker_Utilities();
     $tx = \TikiDb::get()->begin();
     $lookup = $this->getItemIdLookup($schema);
     foreach ($source->getEntries() as $entry) {
         $info = ['itemId' => false, 'status' => '', 'fields' => []];
         foreach ($columns as $column) {
             $entry->parseInto($info, $column);
         }
         $info['itemId'] = $lookup($info);
         if ($info['itemId']) {
             $utilities->updateItem($definition, $info);
         } else {
             $utilities->insertItem($definition, $info);
         }
     }
     $tx->commit();
 }
Example #6
0
 private function updateItem($itemId, $metadata, $additional)
 {
     $definition = $this->getScormTracker();
     $fields = $this->buildFields($definition, $metadata, $additional);
     $utilities = new Services_Tracker_Utilities();
     $utilities->updateItem($definition, array('itemId' => (int) $itemId, 'status' => 'o', 'fields' => $fields));
 }
Example #7
0
 function linkedInLogin()
 {
     global $user, $prefs;
     $userlib = TikiLib::lib('user');
     $curl = curl_init();
     $data = array("oauth2_access_token" => $_SESSION['LINKEDIN_ACCESS_TOKEN'], "format" => "json");
     $profile_fields = array('id', 'first-name', 'last-name', 'formatted-name', 'picture-url', 'picture-urls::(original)');
     if ($prefs['socialnetworks_linkedin_email'] == 'y') {
         $profile_fields[] = 'email-address';
     }
     $url = "https://api.linkedin.com/v1/people/~:(" . implode(",", $profile_fields) . ")";
     $url = sprintf("%s?%s", $url, http_build_query($data, '', '&'));
     curl_setopt($curl, CURLOPT_URL, $url);
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
     $result = curl_exec($curl);
     curl_close($curl);
     $linkedin_info = json_decode($result);
     if (isset($linkedin_info->errorCode)) {
         $smarty = TikiLib::lib('smarty');
         $smarty->assign('errortype', 'login');
         $smarty->assign('msg', tra('We were unable to log you in using your LinkedIn account. Please contact the administrator.'));
         $smarty->display('error.tpl');
         die;
     }
     if (!$user) {
         if ($prefs['socialnetworks_linkedin_login'] != 'y') {
             return false;
         }
         $local_user = $this->getOne("select `user` from `tiki_user_preferences` where `prefName` = 'linkedin_id' and `value` = ?", array($linkedin_info->id));
         if ($local_user) {
             $user = $local_user;
         } elseif ($prefs['socialnetworks_linkedin_autocreateuser'] == 'y') {
             $randompass = $userlib->genPass();
             $email = $prefs['socialnetworks_linkedin_email'] === 'y' ? $linkedin_info->emailAddress : '';
             if ($prefs['login_is_email'] == 'y' && $email) {
                 $user = $email;
             } else {
                 if ($prefs['login_autogenerate'] == 'y') {
                     $user = '';
                 } else {
                     $user = '******' . $linkedin_info->id;
                 }
             }
             $user = $userlib->add_user($user, $randompass, $email);
             if (!$user) {
                 $smarty = TikiLib::lib('smarty');
                 $smarty->assign('errortype', 'login');
                 $smarty->assign('msg', tra('We were unable to log you in using your LinkedIn account. Please contact the administrator.'));
                 $smarty->display('error.tpl');
                 die;
             }
             //Checks if user tracker is used and if it is, then set the names as per the info
             $ret = $userlib->get_usertrackerid("Registered");
             $userTracker = $ret['usersTrackerId'];
             $userField = $ret['usersFieldId'];
             if ($prefs['socialnetworks_linkedin_create_user_trackeritem'] == 'y' && $userTracker && $userField) {
                 $definition = Tracker_Definition::get($userTracker);
                 $utilities = new Services_Tracker_Utilities();
                 $fields = array('ins_' . $userField => $user);
                 if (!empty($prefs['socialnetworks_linkedin_names'])) {
                     $names = array_map('trim', explode(',', $prefs['socialnetworks_linkedin_names']));
                     $fields['ins_' . $names[0]] = $linkedin_info->firstName;
                     $fields['ins_' . $names[1]] = $linkedin_info->lastName;
                 }
                 $utilities->insertItem($definition, array('status' => '', 'fields' => $fields, 'validate' => false));
             }
             $this->set_user_preference($user, 'realName', $linkedin_info->formattedName);
             if ($prefs['feature_userPreferences'] == 'y') {
                 $avatarlib = TikiLib::lib('avatar');
                 $avatarlib->set_avatar_from_url($linkedin_info->pictureUrls->values[0], $user);
             }
         } else {
             $_SESSION['loginfrom'] = str_replace('tiki-socialnetworks_linkedin.php', 'tiki-socialnetworks.php', $_SERVER['REQUEST_URI']);
             $smarty = TikiLib::lib('smarty');
             $smarty->assign('errortype', 'login');
             $smarty->assign('msg', tra('You need to link your local account to LinkedIn before you can login using it'));
             $smarty->display('error.tpl');
             die;
         }
         global $user_cookie_site;
         $_SESSION[$user_cookie_site] = $user;
         $userlib->update_expired_groups();
         $this->set_user_preference($user, 'linkedin_id', $linkedin_info->id);
         $this->set_user_preference($user, 'linkedin_token', $_SESSION['LINKEDIN_ACCESS_TOKEN']);
         $userlib->update_lastlogin($user);
         header('Location: tiki-index.php');
         die;
     } else {
         $this->set_user_preference($user, 'linkedin_id', $linkedin_info->id);
         $this->set_user_preference($user, 'linkedin_token', $_SESSION['LINKEDIN_ACCESS_TOKEN']);
     }
     return true;
 }
Example #8
0
 private function prepareRefreshRelated($target)
 {
     $itemId = $this->getItemId();
     // After saving the field, bind a temporary event on save to refresh child elements
     TikiLib::events()->bind('tiki.trackeritem.save', function ($args) use($itemId, $target) {
         if ($args['type'] == 'trackeritem' && $args['object'] == $itemId) {
             $utilities = new Services_Tracker_Utilities();
             foreach ($target as $key) {
                 list($type, $id) = explode(':', $key, 2);
                 if ($type == 'trackeritem') {
                     $utilities->resaveItem($id);
                 }
             }
         }
     });
 }
Example #9
0
 function getDocumentPart($baseKey, Search_Type_Factory_Interface $typeFactory)
 {
     $data = $this->getLinkData(array(), 0);
     $item = $data['value'];
     $dlist = $data['listdisplay'];
     $list = $data['list'];
     if (!empty($dlist)) {
         $label = isset($dlist[$item]) ? $dlist[$item] : '';
     } else {
         $label = isset($list[$item]) ? $list[$item] : '';
     }
     $out = array($baseKey => $typeFactory->sortable($item), "{$baseKey}_text" => $typeFactory->plaintext($label));
     $indexRemote = array_filter(explode('|', $this->getOption('indexRemote')));
     if (count($indexRemote) && is_numeric($item)) {
         $utilities = new Services_Tracker_Utilities();
         $trackerId = $this->getOption('trackerId');
         $itemData = $utilities->getItem($trackerId, $item);
         $definition = Tracker_Definition::get($trackerId);
         foreach ($indexRemote as $fieldId) {
             $field = $definition->getField($fieldId);
             $permName = $field['permName'];
             $out["{$baseKey}_{$permName}"] = $typeFactory->plaintext($itemData['fields'][$permName]);
         }
     }
     return $out;
 }
Example #10
0
 function action_clear($input)
 {
     return TikiLib::lib('tiki')->allocate_extra('tracker_clear_items', function () use($input) {
         $trackerId = $input->trackerId->int();
         $confirm = $input->confirm->int();
         $perms = Perms::get('tracker', $trackerId);
         if (!$perms->admin_trackers) {
             throw new Services_Exception_Denied(tr('Reserved to tracker administrators'));
         }
         $definition = Tracker_Definition::get($trackerId);
         if (!$definition) {
             throw new Services_Exception_NotFound();
         }
         if ($confirm) {
             $utilities = new Services_Tracker_Utilities();
             $utilities->clearTracker($trackerId);
             return array('trackerId' => 0);
         }
         return array('trackerId' => $trackerId, 'name' => $definition->getConfiguration('name'));
     });
 }
Example #11
0
 function getDocumentPart($baseKey, Search_Type_Factory_Interface $typeFactory)
 {
     $item = $this->getValue();
     $label = $this->getItemLabel($item);
     $out = array($baseKey => $typeFactory->identifier($item), "{$baseKey}_text" => $typeFactory->sortable($label));
     $indexRemote = array_filter(explode('|', $this->getOption('indexRemote')));
     if (count($indexRemote) && is_numeric($item)) {
         $utilities = new Services_Tracker_Utilities();
         $trackerId = $this->getOption('trackerId');
         $itemData = $utilities->getItem($trackerId, $item);
         $definition = Tracker_Definition::get($trackerId);
         foreach ($indexRemote as $fieldId) {
             $field = $definition->getField($fieldId);
             $permName = $field['permName'];
             $out["{$baseKey}_{$permName}"] = $typeFactory->sortable($itemData['fields'][$permName]);
         }
     }
     return $out;
 }