Changeset 1390

Show
Ignore:
Timestamp:
03/05/07 18:37:28 (2 years ago)
Author:
jm3
Message:

calling it alpha and closing the window

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • feedmelinks/.htaccess-global

    r1375 r1390  
    4646 
    4747# xml API: 
    48 RewriteRule    ^xml/authenticate(.*)$ /authenticate$1 [L] 
    49 RewriteRule    ^xml/(f|tag)/([0-9a-z]+)$ /folder-as-xml?folder=$2 [L] 
    50 RewriteRule    ^xml/tags$ /tags-as-xml [L] 
    51 RewriteRule    ^xml/user/([0-9a-z]+)$ /users-links-as-xml?user=$1 [L] 
    52 RewriteRule    ^xml/set/comment   /api/comment 
    53 RewriteRule    ^xml/peeps$ /peeps-as-xml [L] 
    54 RewriteRule    ^api/backroom/(.*)$ /api/restricted/secure-call.php?call=$1 [L] 
     48RewriteRule    ^xml/authenticate(.*)$   /authenticate$1 [L] 
     49RewriteRule    ^xml/(f|tag)/(.+)$       /folder-as-xml?folder=$2 [L] 
     50RewriteRule    ^api/tag/(.+)$           /folder-as-xml?folder=$1 [L] 
     51RewriteRule    ^(xml|api)/tags$         /tags-as-xml [L] 
     52RewriteRule    ^xml/user/([0-9a-z]+)$   /users-links-as-xml?user=$1 [L] 
     53RewriteRule    ^xml/set/comment         /api/comment 
     54RewriteRule    ^(xml|api)/peeps$        /peeps-as-xml [L] 
     55RewriteRule    ^api/backroom/(.*)$      /api/restricted/secure-call.php?call=$1 [L] 
    5556 
    5657RewriteRule    ^api/rename/(.*)$ /api/core/index.php?op=rename&user=$1 [L] 
    5758RewriteRule    ^api/add_tags/(.*)$ /api/core/index.php?op=add_tags&user=$1 [L] 
     59RewriteRule    ^api/search(.*)$ /search-as-xml.php$1 [L] 
    5860 
    5961# JSON API 
  • feedmelinks/FAQ/index.php

    r1375 r1390  
    4242                                <li><a href="#q2_1">What the heck is a tag?</a></li> 
    4343                        </ol> 
    44                 <li>External Access Questions</li> 
     44                <li>Power-User Questions</li> 
    4545                <ol> 
    4646                        <li><a href="#q6_0">What is the naming convention / url schema for Feed Me Links? </a></li> 
     
    401401                <big>XML endpoints for the Feed Me Links REST API:</big> 
    402402                <p/> 
    403                         <code> 
    404                         # <b>authenticate using <a href="http://httpd.apache.org/docs/1.3/howto/auth.html#basic">HTTP-Basic authentication</a></b>:<br /> 
     403                        <b>authenticate using <a href="http://httpd.apache.org/docs/1.3/howto/auth.html#basic">HTTP-Basic authentication</a></b>:<br /> 
    405404                        <span class="subtle">http://feedmelinks.com</span>/xml/authenticate<br /> 
    406405                        (pass <code>user</code> and <code>password</code>) 
     
    408407                        <br /> 
    409408 
    410                         # <b>get all your links as XML</b>:<br /> 
     409                        <b>retrieve your links as XML</b>:<br /> 
    411410                        <span class="subtle">http://feedmelinks.com</span>/xml/user/<b>USERNAME</b><br /> 
    412411                        <br /> 
    413  
    414                         # <b>get all your tags as XML</b>:<br /> 
    415                         <span class="subtle">http://feedmelinks.com</span>/xml/tags<br /> 
    416                         <br /> 
    417                          
    418                         # <b>rename a link</b>:<br /> 
    419                         <span class="subtle">http://feedmelinks.com</span>/api/rename/USERNAME&id=LINK_ID&name=NAME<br /> 
    420                         <br /> 
    421  
    422                         # <b>add tags to a link</b>:<br /> 
    423                         <span class="subtle">http://feedmelinks.com</span>/api/add_tags/USERNAME&id=LINK_ID&tags=COMMA,SEPARATED,TAGS<br /> 
    424                         <br /> 
    425  
    426                         # <b>get a tag's metadata as XML</b>:<br /> 
    427                         <span class="subtle">http://feedmelinks.com</span>/xml/tag/<b>TAGNUM</b><br /> 
    428                         (<small>or</small> /xml/f/<b>TAGNUM</b> - deprecated)<br /> 
    429                         <br /> 
     412                         
     413                        <b>retrieve all your tags as XML</b>:<br /> 
     414                        <span class="subtle">http://feedmelinks.com</span>/api/tags<br /> 
     415                        <br /> 
     416                         
     417                        <b>retrieve all links tagged with a particular tag</b>:<br /> 
     418                        <span class="subtle">http://feedmelinks.com</span>/api/tag/<b>TAGNUMBER</b><br /> 
     419                        <br /> 
     420                         
     421                        <b>search Feed Me Links</b>:<br /> 
     422                        <span class="subtle">http://feedmelinks.com</span>/api/search?q=<b>SEARCHWORD</b><br /> 
     423                        <br /> 
     424                         
     425                        <b>rename a link</b>:<br /> 
     426                        <span class="subtle">http://feedmelinks.com</span>/api/rename/<b>USERNAME</b>&id=<b>LINK_ID</b>&name=<b>NAME</b><br /> 
     427                        <br /> 
     428 
     429                        <b>add tags to a link</b>:<br /> 
     430                        <span class="subtle">http://feedmelinks.com</span>/api/add_tags/<b>USERNAME</b>&id=<b>LINK_ID</b>&tags=<b>COMMA,SEPARATED,TAGS</b><br /> 
     431                        <br /> 
     432 
    430433 
    431434                        <!-- 
     
    441444 
    442445                        # <b>get your peeps as XML</b>:<br /> 
    443                         <span class="subtle">http://feedmelinks.com</span>/xml/peeps<br /> 
     446                        <span class="subtle">http://feedmelinks.com</span>/api/peeps<br /> 
    444447                        </code> 
    445448                        <p/> 
  • feedmelinks/aim/index.php

    r1354 r1390  
    3030                </dd> 
    3131 
     32<!-- 
    3233<dt> stalk (spy, on) : follow your friends' activity</dt> 
    3334  <dd>whenever one of your peeps adds a public link, you'll receive the link in an IM with the username of who linked it (the stalkee must also have you as a peep for this to work)</dd> 
     
    3839<dt>recent (synonyms: links) : see recent activity</dt> 
    3940  <dd>prints your last 10 links</dd> 
    40    
     41--> 
     42 
    4143<dt>today :  prints your last 10 links</dt> 
    4244<dd></dd> 
     
    4749<dt>anything but the above commands : aka the default</dt> 
    4850<dd> 
    49   if it matches one of your tags, it will show all your links with that tag 
    50   if it doesn't match any of your tags, it will search all your links for that string 
    51   if it starts with "all ...", it will search *all* of FML for that string 
     51        <ul> 
     52                <li>if it matches one of your tags, it will show all your links with that tag</li> 
     53                <li>if it doesn't match any of your tags, it will search all your links for that string</li> 
     54                <li>if it starts with "all ...", it will search *all* of FML for that string</li> 
     55<ul> 
     56        </ul> 
    5257        </dd> 
    5358 
  • feedmelinks/folder-as-xml.php

    r1385 r1390  
    66        $u    = $PHP_AUTH_USER ? $PHP_AUTH_USER : ( $user ? $user : $_COOKIE["c_uid"] ); 
    77        $tok =  $authenticated = $_COOKIE["c_pass_token"]; 
     8        Header( "Content-type: text/xml"); 
    89 
    910        if( $u && ($pass && $pass == getPasswdForUser( $u ) || ($tok && $tok == md5( getPasswdForUser( $u ))))) { 
     11                if( getOwnerForFolder( $folder ) != $u ) { 
     12                        $error = "No tag by that ID number or it's owned by someone else"; 
     13                        echo "<rest><response code='failed'>$error</response></rest>"; 
     14                        return; 
     15                } 
    1016 
    1117                if( $folder ) { 
     
    1622                        $q = mysql_query( $qs ); 
    1723                        if( $q && mysql_num_rows($q) ) { 
    18                                 Header( "Content-type: text/xml"); 
    1924                                echo "<?xml version='1.0' standalone='yes'?>\n"; 
    2025 
     
    2328                                $tag_name = makePrettyFolderName( $raw_tag_name ); 
    2429 
     30                                $numRows = mysql_num_rows($q); 
    2531%> 
    26 <posts tag="<%= $tag_name %>" is-public="<%= (! $isPrivate) ? 'true' : 'false' %>" tag-id="<%= $folder %>" user="<%= $u %>"
     32<posts tag="<%= $tag_name %>" is-public="<%= (! $isPrivate) ? 'true' : 'false' %>" tag-id="<%= $folder %>" user="<%= $u %>" num_links="<?= $numRows ?>"
    2733<% 
    28                                 $numRows = mysql_num_rows($q); 
    2934                                if( $q && $numRows ) { 
    3035                                        for( $i = 0; $i < $numRows; $i++ ) { 
     
    3439                                                if( !strstr( $url, "&amp;" )) 
    3540                                                        $url = str_replace( "&", "&amp;", $url ); 
    36                                                 $ts = formatAsDCDate( mysql_result($q,$i,"createDate")); 
     41                                                $ts = formatTS( mysql_result($q,$i,"createDate")); 
    3742 
    3843%> 
     
    4550<% 
    4651                        } else 
    47                                 $error = "No tag by that ID, or it's owned by someone else"; 
     52                                $error = "0_links"; 
    4853                        conClose( $con_xmlFolder ); 
    4954                } else 
    50                         $error = "no tag by that ID, or it's owned by someone else"; 
     55                        $error = "0_links"; 
    5156                if( $error ) { 
    52                         Header("HTTP/1.0 404 Not Found"); 
    53                         echo $error; 
     57                        echo "<posts tag='" . getFieldForFolder( $folder, "name" )  . "' is-public='" . (getFieldForFolder( $folder, "isPrivate" ) == 1 ? "false" : "true") . "' tag-id='$folder' user='$u' num_links='0'/>"; 
    5458                } 
    5559        } else { 
  • feedmelinks/lib/FeedMeLinks/Bot.pm

    r1388 r1390  
    1818open(LOG, ">>" . $logfile) or die "can't open log $logfile"; 
    1919 
    20 # always flush write to the log file so we see them immediately 
    21 
     20{ # flush writes to the log so we see them immediately 
    2221        my $ofh = select LOG; 
    2322        $| = 1; 
    2423        select $ofh; 
    2524} 
    26  
    2725log_mesg( \*LOG, "starting run" ); 
    2826 
     27my $num_recent = 5; 
    2928my $www = get_proxy( FeedMeLinks::Environment::get_bot_user(), FeedMeLinks::Environment::get_bot_password()); 
    3029my $site = "http://www." . FeedMeLinks::Environment::get_domain(); 
     
    3534 
    3635        my $user; 
    37         # AIM often wraps seemingly plaintext messages with shouty <HTML><FONT>...</FONT></HTML> crap. this strips that 
     36        # AIM can wrap messages w/ shouty <HTML><FONT>...</FONT></HTML> crap. this strips that 
    3837        $message = strip_html( $message ); 
    3938        log_mesg( \*LOG, "debug", "command: $message" ); 
    40  
    41         print "handle_resopnse can see site = $site\n"; 
    4239 
    4340        # init user 
     
    4542        $fml_username .= ""; # type coerce 
    4643        if( ! $fml_username ) { 
    47                $sessions_ref->{"$sender"} = build_empty_session( $sender ); 
    48         if( $sessions_ref->{ $sender }{ "seen_welcome" } != 1 ) { 
    49                         $aim->send_im($sender, h("<b>Hi! I am the Feed Me Links bot!</b>\nTo get started, you can type <b>links</b>, <b>help</b>, or click <b><a href='$site/set-up/IM?aim=$sender'>activate</a></b> to set up your account.") ); 
    50                 $sessions_ref->{ $sender }{ "seen_welcome" } = 1; 
     44        if( $sessions_ref->{ $sender }{ "seen_welcome" } == 0 && !( $message =~ m/validate/ )) { 
     45                       $aim->send_im($sender, h("<b>Hi! I am the Feed Me Links bot!</b>\nType '<b>help</b>' for more info or click <b><a href='$site/set-up/IM?aim=$sender'>activate</a></b> to start adding links.") ); 
     46                        $sessions_ref->{"$sender"} = build_empty_session( $sender ); 
     47                       $sessions_ref->{ $sender }{ "seen_welcome" } = 1; 
    5148                } 
    5249        } else { 
     
    5956        } 
    6057 
    61         # handle commands 
     58        # COMMAND: ADD LINK ############################################################### 
    6259        if(  
    6360                $message =~ m/(ftp|gopher|https?):\/\//  
     
    9693 
    9794                                $aim->send_im($sender, h("<b>Added</b>:\n<a href='$info'>$name</a>" )); 
    98                                 $aim->send_im($sender, h("To add tags, just type them, separated by tags\nTo rename it, type it: <em>new name...</em>" )); 
     95                                $aim->send_im($sender, h(get_message( "add_tags") . "\n" . get_message( "rename" ))); 
    9996                        } else { 
    10097                                if( $info =~ m/Duplicate/ ) { 
     
    109106                        # FIXME: should search and say "NN people have added this link -- click activate to add it" 
    110107                        log_mesg( \*LOG, "error:add link", "un-authenticated add request from $sender for $message" ); 
    111                         $aim->send_im($sender, h("That looks like a link! To add links via IM, just <b><a href='$site/set-up/IM?aim=$sender'>activate your account</a></b> by clicking." )); 
     108                        $aim->send_im($sender, h("To start adding links, please click <b><a href='$site/set-up/IM?aim=$sender'>activate my account</a></b>." )); 
    112109                } 
    113110                 
     111        # COMMAND: VALIDATE ############################################################### 
    114112        } elsif( $message =~ m/validate:/ ) { 
    115113 
     
    143141                        #$aim->send_im($sender, "<b>Rebuilt an authenticated session for you</b>:\n" . Dumper( $sessions_ref )); 
    144142 
    145                         $aim->send_im($sender, "<b>All done -- that was easy</b>!\nNow your Feed Me Links account is linked to your AIM and you can start using Feed Me Links via AIM. To get started, paste any URL into this window." ); 
     143                        $aim->send_im($sender, "<b>\n\nAll done -- that was easy</b>!\nNow your Feed Me Links account is linked to your AIM and you can start using Feed Me Links via AIM. To get started, paste any URL into this window." ); 
    146144                } else { 
    147145                        $aim->send_im($sender, h("Darn, that doesn't match our records. Please try again, or <a href='$site/contact-us?subject=AIM+issues:+'>contact us</a>.") ); 
    148146                } 
    149147 
     148        # COMMAND: WHO ############################################################### 
    150149        } elsif( $message =~ m/who/ || $message =~ m/lusers/ ) { 
    151150                my $users = ""; 
     
    161160                $aim->send_im($sender, h($users)); 
    162161 
    163         } elsif( $message =~ m/peeps/ ) { 
    164                 $aim->send_im($sender, "<b>what are you, SNACK FOOD?</b> (sorry, unfinished)\n" ); 
     162        # COMMAND: PEEPS ############################################################### 
     163        } elsif( $fml_username && $message =~ m/peeps/ ) { 
     164                $aim->send_im($sender, h("<b>what are you, SNACK FOOD?</b>\n(sorry, this part is unfinished, because I haven't decided what do with the peeps list yet. <a href='mailto:jm3\@feedmelinks.com'>What do you think</a>?)\n")); 
    165165                my $u = $sessions_ref->{ $sender } -> { "fml_username" }; 
    166166         
     
    170170                # FIXME: peeps list here for sharing 
    171171                 
     172        # COMMAND: VERSION ############################################################### 
    172173        } elsif( $message =~ m/version/ ) { 
    173174                log_mesg( \*LOG, "version", " $sender" ); 
    174175                $aim->send_im($sender, get_version()); 
    175176         
     177        # COMMAND: RECENT ############################################################### 
    176178        } elsif( $message =~ m/(links|recent)/ ) { 
    177179                log_mesg( \*LOG, "recent", " $sender" ); 
    178180                $aim->send_im($sender, "recent links here, soon! (not finished yet, sorry"); 
    179181         
     182        # COMMAND: LOG ############################################################### 
    180183        } elsif( $message =~ m/(^log)/ ) { 
    181184                log_mesg( \*LOG, "log test", " $message from $sender" ); 
    182185         
     186        # COMMAND: HELP ############################################################### 
    183187        } elsif( $message =~ m/help/ || $message =~ m/commands/ || $message =~ m/\?/ ) { 
    184188                log_mesg( \*LOG, "help", " $sender" ); 
    185189 
    186                 $aim->send_im($sender, "<b>Instructions</b>: 
    187   <b>paste or type any link</b> (or try: who, version, credits, or help)" ); 
    188  
     190                $aim->send_im($sender, "<b>This is the Feed Me Links AIM Bot</b>: 
     191From here, you can do most anything you can do on Feed Me Links. It's easy to get started. 
     192<b>Paste</b> or <b>type a URL to begin</b>.\nother commands to try: who, version, credits, or help" ); 
     193 
     194        # COMMAND: STATUS ############################################################### 
    189195        } elsif( $message =~ m/status/ ) { 
    190196                log_mesg( \*LOG, "status", " $sender" ); 
     
    193199                print Dumper( $sessions_ref ) . "\n"; 
    194200         
     201        # COMMAND: CREDITS ############################################################### 
    195202        } elsif( $message =~ m/credits/ ) { 
    196203                log_mesg( \*LOG, "credits", " $sender" ); 
    197204                        $aim->send_im($sender, h("by <b><a href='http://jm3.net'>John Manoogian III / jm3</a></b>")); 
    198205 
    199         } elsif( $sessions_ref->{$sender}->{"last_link"} && $sessions_ref->{$sender}->{"renamed"} == 0 && $message =~ m/rename(:| )/ ) { 
     206        # COMMAND: RENAME ############################################################### 
     207        } elsif( $fml_username && $sessions_ref->{$sender}->{"last_link"} && $sessions_ref->{$sender}->{"renamed"} == 0 && $message =~ m/rename(:| )/ ) { 
    200208                        $sessions_ref->{$sender}->{"last_action"} = "rename"; 
    201209                        $sessions_ref->{$sender}->{"renamed"}  = 1; 
     
    216224                        if( $response_code == "success" ) { 
    217225                                $aim->send_im($sender, h("Thanks! We renamed <a href='$site/$link'><b>$pretty_name</b></a>.")); 
     226                                if( $sessions_ref->{$sender}->{"added_tags"} == 0 ) { 
     227                                        $aim->send_im($sender, h(get_message( "add_tags"))); 
     228                                } 
    218229                        } else { 
    219230                                $aim->send_im($sender, h("<b>Oops, the server screwed something up!</b>\n$response_code" )); 
     
    221232                        log_mesg( \*LOG, "debug", "response: $response_code renaming $link to $message" ); 
    222233 
    223         } elsif( $sessions_ref->{$sender}->{"last_link"} && $sessions_ref->{$sender}->{"added_tags"} == 0 ) { 
     234        # COMMAND: TAG ############################################################### 
     235        } elsif( $fml_username && $sessions_ref->{$sender}{"last_link"} && $sessions_ref->{$sender}->{"added_tags"} == 0 ) { 
    224236                        $sessions_ref->{$sender}->{"last_action"} = "added_tags"; 
    225237                        $sessions_ref->{$sender}->{"added_tags"}  = 1; 
     
    242254                                $tag_noun .= " <b>$message</b>"; 
    243255                                $aim->send_im($sender, h("Thanks! We added the tags <b>$message</b> to <a href='$site/" . $sessions_ref->{$sender}->{"last_link"} . "'>your link</a>")); 
     256                                if( $sessions_ref->{$sender}->{"renamed"} == 0 ) { 
     257                                        $aim->send_im($sender, h(get_message( "rename"))); 
     258                                } 
    244259                        } 
     260                 
     261        # COMMAND: SHOW TAG ############################################################### 
     262        } elsif( $fml_username && $sessions_ref->{$sender}{"tags"}{$message} ) { 
     263 
     264                my $url = "$site/api/tag/" . encode( $sessions_ref->{$sender}{"tags"}{$message} )  
     265                        . "&user=" . encode( $sessions_ref->{$sender}{"fml_username"} )  
     266                        . "&password=" . encode($sessions_ref->{$sender}{"fml_password"}); 
     267                log_mesg( \*LOG, "debug", "found a tag, will get it with url: $url"); 
     268                my $response = $sessions_ref->{$sender}->{"proxy"}->get( $url , []); 
     269 
     270                my $num_links = "" . XML::XPath->new(xml => $response->content)->findnodes('/posts/@num_links'); 
     271                log_mesg( \*LOG, "debug", "got num links $num_links"); 
     272                if( $num_links != 0 )  { 
     273                        my $link_nodes = XML::XPath->new(xml => $response->content)->findnodes('/posts/post'); 
     274                        my $summary = ""; 
     275                        my $max = $num_recent; 
     276                        my $c = 0; 
     277                        foreach my $link_node ($link_nodes->get_nodelist) { 
     278                                if( $c < $max ) { 
     279                                        $summary .=  
     280                                                "<a href='"  
     281                                                        . $link_node->findnodes( "./\@href" ) 
     282                                                        . "'>" 
     283                                                        . $link_node->findnodes( "./\@description" ) 
     284                                                        . "</a>, "; 
     285                                } 
     286                                ++ $c; 
     287                        } 
     288                        $summary =~ s/, $//; 
     289 
     290                        log_mesg( \*LOG, "debug", "summary: $summary" ); 
     291                $aim->send_im($sender, h("You have <a href='$site/u/" . encode( $sessions_ref->{$sender}{"fml_username"}) . "/tags/" . encode($message) . "'>$num_links links</a> tagged with $message, including $summary" )); 
     292                } 
    245293 
    246294        } else { 
     295 
     296                        my $tags_ref = $sessions_ref->{$sender}{"tags"}; 
    247297                        log_mesg( \*LOG, "search", "$message by $sender" ); 
    248                         $aim->send_im($sender, "<b>Hm, let me search for that on Feed Me Links</b>:\n(searching)"); 
    249298 
    250299                        my $search_term = $message; 
    251300                        $search_term =~ s/^search(:|\s+)(\s*)?//; 
    252                         my $url = "http://www.feedmelinks.com/search-as-xml?q=$search_term"; 
     301 
     302                        if( length( $search_term ) < 3 ) { 
     303                                $aim->send_im($sender, "I'm up in your AIM, feed me some links. (type <b>?</b> for help)"); 
     304                                return; 
     305                        } else { 
     306                                $aim->send_im($sender, "<b>Hm, let me search for that on Feed Me Links</b>:\n(searching)"); 
     307                        } 
     308                        my $url = "$site/search-as-xml?q=$search_term"; 
    253309                        log_mesg( \*LOG, "debug", " $url" ); 
    254310 
    255                         my $response = $sessions_ref->{$sender}->{"proxy"}->get( $url, []); 
     311                        if( 1 ) { 
     312                        # FIXME EMERGENCY: if( $sessions_ref && $sessions_ref->{$sender} && $sessions_ref->{$sender}->{"proxy"}) { 
     313                        my $response = $www->get( $url, []); 
    256314                        my $nodes = XML::XPath->new(xml => $response->content)->findnodes("/rest/response/link"); 
    257                         #my $nodes = XML::XPath->new(xml => $response->content)->findnodes("/rest/response/link/name/text()"); 
    258315                        my $message = "" . XML::XPath->new(xml => $response->content)->findnodes("/rest/response/message"); 
    259316                        my $response_code = "" . XML::XPath->new(xml => $response->content)->findnodes("/rest/response/\@code"); 
    260317                        if( $response_code == "success" ) { 
    261318                                my $summary = ""; 
    262                                 my $max = 3
     319                                my $max = $num_recent
    263320                                my $c = 0; 
    264321                                foreach my $link_node ($nodes->get_nodelist) { 
     
    270327                                                                . $link_node->findnodes( "name/text()" ) 
    271328                                                                . "</a>, "; 
    272                                                 log_mesg( \*LOG, XML::XPath::XMLParser::as_string($link_node)); 
    273329                                        }; 
    274330                                        ++ $c; 
    275331                                } 
    276                                 log_mesg( \*LOG, "debug", "summary: $summary" ); 
    277                                 log_mesg( \*LOG, scalar( $nodes->get_nodelist) . " links found" ); 
     332                                #log_mesg( \*LOG, "debug", "summary: $summary" ); 
    278333                                log_mesg( \*LOG, "search", "found $message" ); 
    279                         $aim->send_im($sender, "<b>$message</b> (<a href='$site/search?q=$search_term'>view all matches</a>)\nincluding: $summary"); 
    280                         } 
     334                                if( length( $summary ) > 3 ) { 
     335                                        $aim->send_im($sender, "<b>$message</b> (<a href='$site/search?q=$search_term'>view all matches</a>), including: $summary"); 
     336                                } else { 
     337                                        $aim->send_im($sender, "<b>$message</b>"); 
     338                                        $aim->send_im($sender, "(perhaps you'd like to add some links on this subject? :-) )"); 
     339                                } 
     340                } 
     341                } 
    281342        } 
    282343 
     
    311372                'last_action'  => '', 
    312373                'added_tags'   => 0, 
     374                'tags'         => (), 
    313375                'renamed'      => 0, 
    314376    'fml_username' => "",  
    315377    'fml_password' => "",  
     378                'proxy' => get_proxy( "", "" ), 
    316379    'validated' => 0, 
    317380    'seen_welcome' => 0 
     
    328391        print "> passing user: $u\n"; 
    329392        print "> using url: $site/api/backroom/getPasswdForUser&user=$u\n"; 
     393 
    330394        my $response = $www->get( "$site/api/backroom/getPasswdForUser&user=$u", []); 
    331395        my $xp = XML::XPath->new(xml => $response->content); 
    332396        my $p = "" . $xp->getNodeText("/rest/response"); 
    333         log_mesg( \*LOG, "debug", "got password $p" ); 
     397 
     398        my $url = "$site/api/tags?user=" . encode( $u ) . "&password=" . encode( $p ); 
     399        $response = $www->get( $url, []); 
     400        $xp = XML::XPath->new(xml => $response->content); 
     401 
     402        my $tag_nodes = $xp->findnodes("/tags/tag"); 
     403        my $tags_ref = (); 
     404        foreach my $tag_node ($tag_nodes->get_nodelist) { 
     405                my $tag_name = "" . $tag_node->findnodes("./\@name"); 
     406                $tag_name =~ s/\s*name="\s*//; 
     407                $tag_name =~ s/"\s*$//; 
     408                 
     409                my $tag_id = "" . $tag_node->findnodes("./\@id"); 
     410                $tag_id =~ s/\s*id="\s*//; 
     411                $tag_id =~ s/"\s*$//; 
     412                $tags_ref->{ $tag_name } = $tag_id; 
     413        } 
     414 
     415        log_mesg( \*LOG, "debug", "found " . ( keys %$tags_ref ) . " tags for $u" ); 
    334416 
    335417        my $session = {  
     
    337419                'last_action'  => '', 
    338420                'added_tags'   => 0, 
     421                'tags'         => $tags_ref, 
    339422                'renamed'      => 0, 
    340423                'fml_username' => $u, 
     
    351434        my( $u, $p ) = @_; 
    352435        my $www = LWP::UserAgent->new; 
    353         $www->credentials( 
    354                 "www." . FeedMeLinks::Environment::get_domain() . ":80", 
    355                 'Feed_Me_Links_XML_API', 
    356                 # FIXME: are we doing something wrong? tags is failing with no authroization... 
    357                 $u => $p 
    358         ); 
     436        if( $u && $p ) { 
     437                $www->credentials( 
     438                        "www." . FeedMeLinks::Environment::get_domain() . ":80", 
     439                        'Feed_Me_Links_XML_API', 
     440                        # FIXME: are we doing something wrong? tags is failing with no authroization... 
     441                        $u => $p 
     442                ); 
     443        } 
    359444        return $www; 
    360445} 
     
    452537} 
    453538 
     539sub get_message { 
     540        my $m = $_[0]; 
     541        my %messages = ( 
     542                "add_tags" => "To add tags, just type them, separated by commas", 
     543                "rename" => "To rename it, type it: <em>new name...</em>" 
     544        ); 
     545        return $messages{ "$m" }; 
     546} 
     547 
    4545481; # modules must return a true value 
    455549 
  • feedmelinks/modules/utils.inc.php

    r1388 r1390  
    24492449    return " 
    24502450    SELECT * FROM links, tags AS t, links_tags_xref AS x WHERE x.tagID = " . urlencode( $args[1] ) . " AND x.linkID = links.ID AND t.ID = x.tagID AND links.userid = '" 
    2451     . urlencode( $args[2] ) ."';"; 
     2451    . urlencode( $args[2] ) ."' ORDER BY links.createDate DESC;"; 
    24522452 
    24532453  } else if( $argWhichQuery  == "recent_for_user" ) { 
  • feedmelinks/script/form-validation.js

    r1350 r1390  
    1717function check_im( f ) { 
    1818        var e = f.im.value; 
    19         var filter  = /^[a-zA-Z0-9_\.\-\@]+$/; 
     19        var filter  = /^[a-zA-Z0-9_\.\-\@ ]+$/; 
    2020        if( e == '' ) { 
    2121                alert( "Please enter your AIM name." ); 
  • feedmelinks/search-as-xml.php

    r1388 r1390  
    1 <% 
     1<?php 
    22        ob_start(); 
    33        include_once( "modules/class.gzip_encode.inc.php" ); 
     
    1313 
    1414        $searchTerm = $q ? $q : $searchTerm; 
     15        if( strlen( $searchTerm ) < 3 ) { 
     16                echo '<rest><request>Search Feed Me Links for "$searchTerm"</request><response code="failed"><message>search for something at least 3 characters long</message></response></rest>'; 
     17                #echo "hi"; 
     18                return; 
     19        } 
    1520        $searchTerm = str_replace( " ", "%", $searchTerm ); 
    1621        $searchTerm = str_replace( "'", "", $searchTerm ); 
     
    2328        $searchWhat = $search_only; 
    2429 
     30        function xml_text_node_fix( $s ) { 
     31                if( ! $s ) 
     32                        return ""; 
     33                return preg_replace( "/</", "&lt;", preg_replace( "/>/", "&gt;", preg_replace( "/&([^a])/", "&amp;\\1", unicode_fix( $s )))); 
     34        } 
     35 
    2536        $qs2 = getQuery( "num_links" ); 
    2637        $q2 = mysql_query( $qs2 ); 
    2738        if( $q2 ) $totalNumLinks = mysql_result($q2,0); 
    28 %
    29 <<%= "?" %>xml version='1.0' encoding="UTF-8" standalone='yes'?> 
     39?
     40<<?= "?" ?>xml version='1.0' encoding="UTF-8" standalone='yes'?> 
    3041<rest> 
    3142        <request>Search <%= $my ? "My Links" : "Feed Me Links" %> <%= $q ? "for '$q'" : "" %> 
     
    3546                if( $search_only == "links" )  
    3647                        $qs = $my ?  
    37                                         "SELECT * FROM links WHERE lcase(name) LIKE '%$searchTerm%' AND userid='$sessionUserId' ORDER BY createDate DESC" 
     48                                        "SELECT * from links WHERE lcase(name) LIKE '%$searchTerm%' AND userid='$sessionUserId' ORDER BY createDate DESC" 
    3849                                        # this query needs to pull from the master query, but the column names are different... 
    39                                         : "SELECT * FROM links WHERE lcase(name) LIKE '%$searchTerm%' AND (isPrivate is NULL OR userid = '$u') ORDER BY createDate DESC"; 
     50                                        : "SELECT * FROM links, users WHERE links.userid = users.userid AND users.snuffed IS NULL AND lcase(links.name) LIKE '%$searchTerm%' AND (links.isPrivate is NULL OR links.userid = '$u') ORDER BY createDate DESC"; 
    4051                else if( $search_only == "users" ) 
    41                         $qs = "SELECT * FROM users WHERE lcase(userid) LIKE '%$searchTerm%' ORDER BY userid;"; 
     52                        $qs = "SELECT * from users WHERE lcase(userid) LIKE '%$searchTerm%' and snuffed is NULL ORDER BY userid;"; 
    4253                else if( $search_only == "tags" ) 
    4354                        $qs = "SELECT * FROM tags WHERE name LIKE '%$searchTerm%' AND (isPrivate IS NULL OR userid = '$u') ORDER BY name;"; 
     
    6374                                                $url = urldecode( mysql_result($q,$i,"url")); 
    6475%> 
    65 <link
     76<link user="<?= $userid ?>"
    6677<%  
    6778        $cats = get_tags_as_HTML( $id, $u, "add-trailing-noun=1", 0 );  
     
    6980        $name = preg_replace( "/&apos;/", "'", $name ); 
    7081        $url = preg_replace( "/&/", "&amp;", $url ); 
     82 
    7183%> 
    72 <url><%= $url %></url>  
    73 <name><%= preg_replace( "/&([^a])/", "&amp;\\1", unicode_fix( $name )) %></name> 
     84<url><%= utf8_encode( xml_text_node_fix( $url )) %></url> 
     85<name><%= utf8_encode( xml_text_node_fix( $name )) %></name> 
    7486<%  
    7587        $cats = $cats ? "$cats" : "by $userid"; 
  • feedmelinks/set-up/IM.php

    r1355 r1390  
    2323                                if( !$im ) 
    2424                                        return; 
    25                                 $im = urlencode( $im ); 
    2625                                $success = run_query( "UPDATE users SET im = '$im' WHERE userId = '$u'" ); 
    2726                                $showForm = false; 
     
    3332        <h1>Success! Your Validation Code is:</h1> 
    3433        <input class="copyable" name="secret" value="validate: <?= $u . ", " . get_im_validation_phrase_for_user( $u ) ?>" size="32" /> 
    35         <small>Paste the above text into your AIM window to finish the setup process</small> 
     34        <small>Paste the <b><big>entire</big></b> string above into your AIM window to finish validating your account.</small> 
    3635        <br /><br /><br /><br /> 
    3736        (All done, you can close this window now) 
     
    4342                 
    4443                if( $showForm ) { 
     44 
     45                                # handle the weirdo's with @ signs in their names: # FIXME: test from actual klaus aim session 
     46                                #$aim = str_replace( " ", "", $aim ); 
     47                                $aim = urlencode( $aim ); 
     48                                $aim = str_replace( "%40", "@", $aim ); 
     49                                $aim = str_replace( "%2540", "@", $aim ); 
     50                                $aim = str_replace( "+", " ", $aim ); 
    4551?> 
    4652